数据库基本概念

image.png
image.png
image.png

安装masql:

  1. 1. 通过secureCRT工具连接Linux系统
  2. 2. 上传 mysql 的安装包
  3. alt + p -------> put d:/setup/mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar
  4. 3. 解压 mysql 的安装包
  5. mkdir mysql
  6. tar -xvf mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar -C mysql/
  7. 4. 安装客户端
  8. cd mysql/
  9. rpm -ivh mysql-community-client-5.7.27-1.el7.x86_64.rpm --force --nodeps
  10. 5. 安装服务端
  11. rpm -ivh mysql-community-server-5.7.27-1.el7.x86_64.rpm --force --nodeps
  12. 6. 修改mysql默认字符集
  13. vi /etc/my.cnf
  14. 添加如下内容:
  15. [mysqld]
  16. character-set-server=utf8
  17. collation-server=utf8_general_ci
  18. -- 在文件最下方添加
  19. [client]
  20. default-character-set=utf8
  21. 7. 启动mysql服务
  22. service mysqld start
  23. 8. 登录mysql
  24. mysql -u root -p 敲回车,输入密码
  25. 初始密码查看:cat /var/log/mysqld.log
  26. root@localhost: 后面的就是初始密码
  27. 9. 修改mysql登录密码
  28. set global validate_password_policy=0;
  29. set global validate_password_length=1;
  30. set password=password('密码');
  31. 10. 授予远程连接权限
  32. //授权
  33. grant all privileges on *.* to 'root' @'%' identified by '密码';
  34. //刷新
  35. flush privileges;
  36. 11. 关闭Linux系统防火墙
  37. systemctl stop firewalld
  38. 12. 重启mysql服务
  39. service mysqld restart
  40. 13. 使用SQLYog工具连接mysql

注册信息

  1. Professional 版本:
  2. 注册名:luoye2562
  3. 注册码:ec38d297-0543-4679-b098-4baadf91f983
  4. Enterprise 版本:
  5. 注册名:luoye2562
  6. 注册码: 59adfdfe-bcb0-4762-8267-d7fccf16beda
  7. Ultimate 版本: (终极是最好的)
  8. 注册名:luoye2562
  9. 注册码: 8d8120df-a5c3-4989-8f47-5afc79c56e7c

数据库.数据表.数据的关系

image.png
SQL的介绍
image.png

DDL查询和创建数据库

image.png

DDL修改/删除/使用数据库

image.png

DDL查询数据表

image.png
DDL创建数据表
image.png

MySQL中数据类型

  1. 各数据类型及字节长度一览表:
  2. | 数据类型 | 字节长度 | 范围或用法 |
  3. | ------------------ | -------- | ------------------------------------------------------------ |
  4. | Bit | 1 | 无符号[0,255],有符号[-128,127],天缘博客备注:BITBOOL布尔型都占用1字节 |
  5. | TinyInt | 1 | 整数[0,255] |
  6. | SmallInt | 2 | 无符号[0,65535],有符号[-32768,32767] |
  7. | MediumInt | 3 | 无符号[0,2^24-1],有符号[-2^23,2^23-1]] |
  8. | Int | 4 | 无符号[0,2^32-1],有符号[-2^31,2^31-1] |
  9. | BigInt | 8 | 无符号[0,2^64-1],有符号[-2^63 ,2^63 -1] |
  10. | Float(M,D) | 4 | 单精度浮点数。天缘博客提醒这里的D是精度,如果D<=24则为默认的FLOAT,如果D>24则会自动被转换为DOUBLE型。 |
  11. | Double(M,D) | 8 | 双精度浮点。 |
  12. | Decimal(M,D) | M+1M+2 | 未打包的浮点数,用法类似于FLOATDOUBLE,天缘博客提醒您如果在ASP中使用到Decimal数据类型,直接从数据库读出来的Decimal可能需要先转换成FloatDouble类型后再进行运算。 |
  13. | Date | 3 | YYYY-MM-DD的格式显示,比如:2009-07-19 |
  14. | Date Time | 8 | YYYY-MM-DD HH:MM:SS的格式显示,比如:2009-07-19 112230 |
  15. | TimeStamp | 4 | YYYY-MM-DD的格式显示,比如:2009-07-19 |
  16. | Time | 3 | HH:MM:SS的格式显示。比如:112230 |
  17. | Year | 1 | YYYY的格式显示。比如:2009 |
  18. | Char(M) | M | 定长字符串。 |
  19. | VarChar(M) | M | 变长字符串,要求M<=255 |
  20. | Binary(M) | M | 类似Char的二进制存储,特点是插入定长不足补0 |
  21. | VarBinary(M) | M | 类似VarChar的变长二进制存储,特点是定长不补0 |
  22. | Tiny Text | Max:255 | 大小写不敏感 |
  23. | Text | Max:64K | 大小写不敏感 |
  24. | Medium Text | Max:16M | 大小写不敏感 |
  25. | Long Text | Max:4G | 大小写不敏感 |
  26. | TinyBlob | Max:255 | 大小写敏感 |
  27. | Blob | Max:64K | 大小写敏感 |
  28. | MediumBlob | Max:16M | 大小写敏感 |
  29. | LongBlob | Max:4G | 大小写敏感 |
  30. | Enum | 12 | 最大可达65535个不同的枚举值 |
  31. | Set | 可达8 | 最大可达64个不同的值 |
  32. | Geometry | | |
  33. | Point | | |
  34. | LineString | | |
  35. | Polygon | | |
  36. | MultiPoint | | |
  37. | MultiLineString | | |
  38. | MultiPolygon | | |
  39. | GeometryCollection | | |

DDL修改数据表

image.png
image.png

DML新增表数据

image.png

DML修改和删除表数据

image.png
image.png
image.png

注意:where 后的条件按照这个排序优先级

DQL表数据查询—————-查询全部

image.png

注意在计算列的值时有特殊情况

image.png

起别名as可以省略

image.png

DQL表数据查询————-条件查询

image.png
image.png
image.png

注意,一个下划线代表一个字符

DQL表数据查询———-聚合函数查询

image.png

image.png
image.png
image.png

DQL表数据查询———-排序查询

image.png
image.png

DQL表数据查询——-分组查询

image.png
image.png
image.png

DQL表数据查询————分页查询

image.png
image.png
image.png

约束的介绍

image.png

主键约束

image.png
image.png

主键自增约束

image.png

注意:自增约束可以为空

唯一约束

image.png
image.png

非空约束

image.png
image.png

外键约束

image.png
image.png
image.png
image.png
image.png

外键的级联更新和级联删除

image.png
image.png

注意:级联的操作大部分情况下是不使用的,牵一发而动全身;

image.png

多表操作

image.png

一对一操作

image.png
image.png
image.png

一对多操作

image.png
image.png
image.png
image.png
image.png
image.png

多对多操作

image.png

  1. -- 创建student
  2. CREATE TABLE student(
  3. id INT PRIMARY KEY AUTO_INCREMENT, -- 主键id
  4. NAME VARCHAR(20) -- 学生姓名
  5. );
  6. -- 添加数据
  7. INSERT INTO student VALUES (NULL,'张三'),(NULL,'李四');
  8. -- 创建course
  9. CREATE TABLE course(
  10. id INT PRIMARY KEY AUTO_INCREMENT, -- 主键id
  11. NAME VARCHAR(10) -- 课程名称
  12. );
  13. -- 添加数据
  14. INSERT INTO course VALUES (NULL,'语文'),(NULL,'数学');
  15. -- 创建中间表
  16. CREATE TABLE stu_course(
  17. id INT PRIMARY KEY AUTO_INCREMENT, -- 主键id
  18. sid INT, -- 用于和student表中的id进行外键关联
  19. cid INT, -- 用于和course表中的id进行外键关联
  20. CONSTRAINT sc_fk1 FOREIGN KEY (sid) REFERENCES student(id), -- 添加外键约束
  21. CONSTRAINT sc_fk2 FOREIGN KEY (cid) REFERENCES course(id) -- 添加外键约束
  22. );
  23. -- 添加数据
  24. INSERT INTO stu_course VALUES (NULL,1,1),(NULL,1,2),(NULL,2,1),(NULL,2,2);

多表查询

image.png
image.png

显式内连接

image.png
image.png

隐式内连接

image.png

注意:内连接只显示两张表相关的数据

外链接查询

image.png
image.png
image.png

子查询

image.png
image.png
image.png
image.png
image.png

多行多列可以看成一个表根据多表操作来判断用外链接还是内连接

自关联查询

image.png
image.png
image.png
image.png

视图

image.png
image.png

  1. -- 封装
  2. CREATE VIEW city_country (city_id,city_name,country_name) AS
  3. SELECT
  4. c1.id,
  5. c1.name,
  6. c2.name
  7. FROM
  8. city c1,
  9. country c2
  10. WHERE
  11. c1.cid=c2.id;
  12. -- 查询视图
  13. SELECT * FROM city_country;

存储过程和函数

image.png
image.png
image.png

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

image.png

  1. 定义变量演示
  2. -- 创建存储过程
  3. DELIMITER $
  4. CREATE PROCEDURE pro_test1()
  5. BEGIN
  6. -- 定义变量
  7. DECLARE num INT DEFAULT 10;
  8. -- 使用变量
  9. SELECT num;
  10. END$
  11. DELIMITER ;
  12. -- 调用pro_test1存储过程
  13. CALL pro_test1();
  14. 变量赋值方式一
  15. -- 创建存储过程
  16. DELIMITER $
  17. CREATE PROCEDURE pro_test2()
  18. BEGIN
  19. -- 定义变量
  20. DECLARE NAME VARCHAR(10);
  21. -- 给变量赋值
  22. SET NAME='存储过程';
  23. -- 使用变量
  24. SELECT NAME;
  25. END$
  26. DELIMITER ;
  27. -- 调用pro_test2存储过程
  28. CALL pro_test2();
  29. 变量赋值方式二
  30. -- 创建存储过程
  31. DELIMITER $
  32. CREATE PROCEDURE pro_test3()
  33. BEGIN
  34. -- 定义变量
  35. DECLARE men,women INT; -- 同种类型变量可以同时定义
  36. -- 查询男同学的总分数,为men赋值
  37. SELECT SUM(score) INTO men FROM student WHERE gender='男';
  38. -- 查询女同学的总分数,为women赋值
  39. SELECT SUM(score) INTO women FROM student WHERE gender='女';
  40. -- 使用变量
  41. SELECT men,women;
  42. END $
  43. DELIMITER ;
  44. -- 调用pro_test3存储过程
  45. CALL pro_test3();

image.png

  1. DELIMITER $
  2. CREATE FUNCTION fun_test1()
  3. RETURNS INT
  4. BEGIN
  5. -- 定义变量
  6. DECLARE s_count INT;
  7. -- 查询成绩大于95的分的数量,为s_count赋值
  8. SELECT COUNT(*) INTO s_count FROM student WHERE score > 95;
  9. -- 返回统计结果
  10. RETURN s_count;
  11. END $
  12. DELIMITER ;
  13. -- 调用函数
  14. SELECT fun_test1();

image.png
image.png

INSERT 型触发器

  1. -- 创建触发器
  2. DELIMITER $
  3. CREATE TRIGGER account_insert
  4. AFTER INSERT
  5. ON account
  6. FOR EACH ROW
  7. BEGIN
  8. INSERT INTO account_log VALUES (NULL,'insert',NOW(),new.id,
  9. CONCAT('插入后{id=',new.id,',name',new.name,',money',new.money,'}'));
  10. END$
  11. DELIMITER ;
  12. -- account 表添加一条记录
  13. INSERT INTO account VALUES (NULL,'王五',2000);
  14. -- 查询 account_log
  15. SELECT * FROM account_log;

UPDATE 型触发器

  1. DELIMITER $
  2. CREATE TRIGGER account_update
  3. AFTER UPDATE
  4. ON account
  5. FOR EACH ROW
  6. BEGIN
  7. INSERT INTO account_log VALUES (NULL,'update',NOW(),new.id,
  8. CONCAT('插入前{id=',old.id,',name',old.name,',money',old.money,'}',
  9. '插入后{id=',new.id,'name',new.name,'money',new.money,'}'));
  10. END$
  11. DELIMITER ;
  12. -- account 表中的李四的金额为2000
  13. UPDATE account SET money=2000 WHERE id=2;
  14. -- 查询account
  15. SELECT * FROM account;
  16. -- 查看日志表
  17. SELECT * FROM account_log;

delete 型触发器

  1. DELIMITER $
  2. CREATE TRIGGER account_delete
  3. AFTER DELETE
  4. ON account
  5. FOR EACH ROW
  6. BEGIN
  7. INSERT INTO account_log VALUES (NULL,'DELETE',NOW(),old.id,
  8. CONCAT('插入前{id=',old.id,',name',old.name,',money',old.money,'}'))
  9. END $
  10. DELIMITER ;
  11. -- 删除 account 表中的王五
  12. DELETE FROM account WHERE id =3;
  13. -- 查询account
  14. SELECT * FROM account;
  15. -- 查询account_log
  16. SELECT * FROM account_log;

image.png
image.png
image.png
基本使用:

  1. -- 开启事务
  2. START TRANSACTION;
  3. -- 张三账户减500
  4. UPDATE account SET money=money-500 WHERE NAME='张三';
  5. -- 李四账户加500
  6. UPDATE account SET money= money +500 WHERE NAME='李四';
  7. -- 如果数据错误回滚事务
  8. ROLLBACK;
  9. -- 如果数据正确提交事务
  10. COMMIT;

image.png

@@代表全局系统变量 0代表手动提交, 1代表自动提交

事务提交方式改成手动的后,如果不提交,数据时零时存储.

image.png
image.png
image.png
image.png
image.png

MySQL存储引擎

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png