数据库基本概念
安装masql:
1. 通过secureCRT工具连接Linux系统2. 上传 mysql 的安装包alt + p -------> put d:/setup/mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar3. 解压 mysql 的安装包mkdir mysqltar -xvf mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar -C mysql/4. 安装客户端cd mysql/rpm -ivh mysql-community-client-5.7.27-1.el7.x86_64.rpm --force --nodeps5. 安装服务端rpm -ivh mysql-community-server-5.7.27-1.el7.x86_64.rpm --force --nodeps6. 修改mysql默认字符集vi /etc/my.cnf添加如下内容:[mysqld]character-set-server=utf8collation-server=utf8_general_ci-- 在文件最下方添加[client]default-character-set=utf87. 启动mysql服务service mysqld start8. 登录mysqlmysql -u root -p 敲回车,输入密码初始密码查看:cat /var/log/mysqld.log在root@localhost: 后面的就是初始密码9. 修改mysql登录密码set global validate_password_policy=0;set global validate_password_length=1;set password=password('密码');10. 授予远程连接权限//授权grant all privileges on *.* to 'root' @'%' identified by '密码';//刷新flush privileges;11. 关闭Linux系统防火墙systemctl stop firewalld12. 重启mysql服务service mysqld restart13. 使用SQLYog工具连接mysql
注册信息
Professional 版本:注册名:luoye2562注册码:ec38d297-0543-4679-b098-4baadf91f983Enterprise 版本:注册名:luoye2562注册码: 59adfdfe-bcb0-4762-8267-d7fccf16bedaUltimate 版本: (终极是最好的)注册名:luoye2562注册码: 8d8120df-a5c3-4989-8f47-5afc79c56e7c
数据库.数据表.数据的关系
DDL查询和创建数据库
DDL修改/删除/使用数据库
DDL查询数据表
MySQL中数据类型
各数据类型及字节长度一览表:| 数据类型 | 字节长度 | 范围或用法 || ------------------ | -------- | ------------------------------------------------------------ || Bit | 1 | 无符号[0,255],有符号[-128,127],天缘博客备注:BIT和BOOL布尔型都占用1字节 || TinyInt | 1 | 整数[0,255] || SmallInt | 2 | 无符号[0,65535],有符号[-32768,32767] || MediumInt | 3 | 无符号[0,2^24-1],有符号[-2^23,2^23-1]] || Int | 4 | 无符号[0,2^32-1],有符号[-2^31,2^31-1] || BigInt | 8 | 无符号[0,2^64-1],有符号[-2^63 ,2^63 -1] || Float(M,D) | 4 | 单精度浮点数。天缘博客提醒这里的D是精度,如果D<=24则为默认的FLOAT,如果D>24则会自动被转换为DOUBLE型。 || Double(M,D) | 8 | 双精度浮点。 || Decimal(M,D) | M+1或M+2 | 未打包的浮点数,用法类似于FLOAT和DOUBLE,天缘博客提醒您如果在ASP中使用到Decimal数据类型,直接从数据库读出来的Decimal可能需要先转换成Float或Double类型后再进行运算。 || Date | 3 | 以YYYY-MM-DD的格式显示,比如:2009-07-19 || Date Time | 8 | 以YYYY-MM-DD HH:MM:SS的格式显示,比如:2009-07-19 11:22:30 || TimeStamp | 4 | 以YYYY-MM-DD的格式显示,比如:2009-07-19 || Time | 3 | 以HH:MM:SS的格式显示。比如:11:22:30 || Year | 1 | 以YYYY的格式显示。比如:2009 || Char(M) | M | 定长字符串。 || VarChar(M) | M | 变长字符串,要求M<=255 || Binary(M) | M | 类似Char的二进制存储,特点是插入定长不足补0 || VarBinary(M) | M | 类似VarChar的变长二进制存储,特点是定长不补0 || Tiny Text | Max:255 | 大小写不敏感 || Text | Max:64K | 大小写不敏感 || Medium Text | Max:16M | 大小写不敏感 || Long Text | Max:4G | 大小写不敏感 || TinyBlob | Max:255 | 大小写敏感 || Blob | Max:64K | 大小写敏感 || MediumBlob | Max:16M | 大小写敏感 || LongBlob | Max:4G | 大小写敏感 || Enum | 1或2 | 最大可达65535个不同的枚举值 || Set | 可达8 | 最大可达64个不同的值 || Geometry | | || Point | | || LineString | | || Polygon | | || MultiPoint | | || MultiLineString | | || MultiPolygon | | || GeometryCollection | | |
DDL修改数据表
DML新增表数据
DML修改和删除表数据
注意:where 后的条件按照这个排序优先级
DQL表数据查询—————-查询全部
注意在计算列的值时有特殊情况
起别名as可以省略
DQL表数据查询————-条件查询
注意,一个下划线代表一个字符
DQL表数据查询———-聚合函数查询

DQL表数据查询———-排序查询
DQL表数据查询——-分组查询
DQL表数据查询————分页查询
约束的介绍
主键约束
主键自增约束
注意:自增约束可以为空
唯一约束
非空约束
外键约束
外键的级联更新和级联删除
注意:级联的操作大部分情况下是不使用的,牵一发而动全身;
多表操作
一对一操作
一对多操作
多对多操作

-- 创建student表CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT, -- 主键idNAME VARCHAR(20) -- 学生姓名);-- 添加数据INSERT INTO student VALUES (NULL,'张三'),(NULL,'李四');-- 创建course表CREATE TABLE course(id INT PRIMARY KEY AUTO_INCREMENT, -- 主键idNAME VARCHAR(10) -- 课程名称);-- 添加数据INSERT INTO course VALUES (NULL,'语文'),(NULL,'数学');-- 创建中间表CREATE TABLE stu_course(id INT PRIMARY KEY AUTO_INCREMENT, -- 主键idsid INT, -- 用于和student表中的id进行外键关联cid INT, -- 用于和course表中的id进行外键关联CONSTRAINT sc_fk1 FOREIGN KEY (sid) REFERENCES student(id), -- 添加外键约束CONSTRAINT sc_fk2 FOREIGN KEY (cid) REFERENCES course(id) -- 添加外键约束);-- 添加数据INSERT INTO stu_course VALUES (NULL,1,1),(NULL,1,2),(NULL,2,1),(NULL,2,2);
多表查询
显式内连接
隐式内连接
注意:内连接只显示两张表相关的数据
外链接查询
子查询
多行多列可以看成一个表根据多表操作来判断用外链接还是内连接
自关联查询
视图


-- 封装CREATE VIEW city_country (city_id,city_name,country_name) ASSELECTc1.id,c1.name,c2.nameFROMcity c1,country c2WHEREc1.cid=c2.id;-- 查询视图SELECT * FROM city_country;
存储过程和函数



DELIMITER $-- 创建存储过程CREATE PROCEDURE stu_group()BEGINSELECT gender,SUM(score) getsum FROM student GROUP BY gender ORDER BY getsum ASC;END $DELIMITER ;-- 调用存储过程CALL stu_group();-- 查看数据库中所有的存储过程SELECT * FROM mysql.proc WHERE db='db6';-- 删除存储过程DROP PROCEDURE IF EXISTS stu_group; --这里不加括号

定义变量演示-- 创建存储过程DELIMITER $CREATE PROCEDURE pro_test1()BEGIN-- 定义变量DECLARE num INT DEFAULT 10;-- 使用变量SELECT num;END$DELIMITER ;-- 调用pro_test1存储过程CALL pro_test1();变量赋值方式一-- 创建存储过程DELIMITER $CREATE PROCEDURE pro_test2()BEGIN-- 定义变量DECLARE NAME VARCHAR(10);-- 给变量赋值SET NAME='存储过程';-- 使用变量SELECT NAME;END$DELIMITER ;-- 调用pro_test2存储过程CALL pro_test2();变量赋值方式二-- 创建存储过程DELIMITER $CREATE PROCEDURE pro_test3()BEGIN-- 定义变量DECLARE men,women INT; -- 同种类型变量可以同时定义-- 查询男同学的总分数,为men赋值SELECT SUM(score) INTO men FROM student WHERE gender='男';-- 查询女同学的总分数,为women赋值SELECT SUM(score) INTO women FROM student WHERE gender='女';-- 使用变量SELECT men,women;END $DELIMITER ;-- 调用pro_test3存储过程CALL pro_test3();

DELIMITER $CREATE FUNCTION fun_test1()RETURNS INTBEGIN-- 定义变量DECLARE s_count INT;-- 查询成绩大于95的分的数量,为s_count赋值SELECT COUNT(*) INTO s_count FROM student WHERE score > 95;-- 返回统计结果RETURN s_count;END $DELIMITER ;-- 调用函数SELECT fun_test1();
INSERT 型触发器
-- 创建触发器DELIMITER $CREATE TRIGGER account_insertAFTER INSERTON accountFOR EACH ROWBEGININSERT INTO account_log VALUES (NULL,'insert',NOW(),new.id,CONCAT('插入后{id=',new.id,',name',new.name,',money',new.money,'}'));END$DELIMITER ;-- 向account 表添加一条记录INSERT INTO account VALUES (NULL,'王五',2000);-- 查询 account_log 表SELECT * FROM account_log;
UPDATE 型触发器
DELIMITER $CREATE TRIGGER account_updateAFTER UPDATEON accountFOR EACH ROWBEGININSERT INTO account_log VALUES (NULL,'update',NOW(),new.id,CONCAT('插入前{id=',old.id,',name',old.name,',money',old.money,'}','插入后{id=',new.id,'name',new.name,'money',new.money,'}'));END$DELIMITER ;-- 改account 表中的李四的金额为2000UPDATE account SET money=2000 WHERE id=2;-- 查询account表SELECT * FROM account;-- 查看日志表SELECT * FROM account_log;
delete 型触发器
DELIMITER $CREATE TRIGGER account_deleteAFTER DELETEON accountFOR EACH ROWBEGININSERT INTO account_log VALUES (NULL,'DELETE',NOW(),old.id,CONCAT('插入前{id=',old.id,',name',old.name,',money',old.money,'}'))END $DELIMITER ;-- 删除 account 表中的王五DELETE FROM account WHERE id =3;-- 查询account表SELECT * FROM account;-- 查询account_log表SELECT * FROM account_log;



基本使用:
-- 开启事务START TRANSACTION;-- 张三账户减500UPDATE account SET money=money-500 WHERE NAME='张三';-- 李四账户加500UPDATE account SET money= money +500 WHERE NAME='李四';-- 如果数据错误回滚事务ROLLBACK;-- 如果数据正确提交事务COMMIT;
@@代表全局系统变量 0代表手动提交, 1代表自动提交
事务提交方式改成手动的后,如果不提交,数据时零时存储.
MySQL存储引擎
























































