mysql-基础

SQL
Mysql Sql通用语法
- SQL语句可以单行或多行书写,以分号结尾。
- SQL语句可以使用空格/缩进来增强语句的可读性
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
- 注释:
- 单行注释: –注释内容 或 # 注释内容(MySQL特有)
- 多行注释: /*注释内容 */
Sql语句分类

DDL
DDL主要用来操作数据库,表,字段。
DDL-数据库操作
- 查询
查询所有数据库
1 | -- 查询所有数据库 |
- 创建数据库
1 | CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集][COLLATE 排序规则]; |
- 删除数据库
1 | drop database [if exists] 数据库名; |
- 使用数据库
1 | USE 数据库名; |
DDL-表操作
- 查询当前数据库所有表
1 | show tables; |
- 查询表结构
1 | desc 表名; |
- 查询指定表的建表语句
1 | show create table 表名; |
- 创建数据库表
1 | CREATE TABLE 表名( |
- 修改数据库表
- 添加字段
1 | ALTER TABLE 表名 ADD 字段名 类型(长度)[COMMENT 注释][约束]; |
- 修改字段类型
1 | ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度)[COMMENT 注释][约束]; |
- 修改字段名和字段类型
1 | ALTER TABLE 表名 CHANGE 字段名 新字段名 新数据类型(长度)[COMMENT 注释][约束]; |
- 删除字段
1 | ALTER TABLE 表名 DROP 字段; |
- 修改表名
1 | ALTER TABLE 表名 RENAME TO 新表名 |
- 删除表
- drop:删除数据库表
1 | DROP TABLE [IF EXISTS] 表名 |
- truncate: 删除指定表,并重新创建表
1 | TRUNCATE TABLE 表名 |
DML
DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。
- 添加数据(INSERT)

- 修改数据(UPDATE)

后面的where条件可以有也可以没有,如果没有,则会修改整张表的数据
- 删除数据(DELETE)
1 | DELETE FROM 表名 [WHERE 条件] |
后面的where条件可以有也可以没有,如果没有,则会删除整张表的数据
DQL
DQL英文全称是Data QueryLanguage(数据查询语言),数据查询语言,用来查询数据库中表的记录。

基本查询

条件查询

聚合函数
将一列数据作为一个整体,进行纵向计算

分组查询
1 | SELECT 字段列表 FROM 表名[WHERE 条件]GROUP BY 分组字段名[HAVING 分组后过滤条件]; |

排序查询
1 | SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2 |
分页查询
1 | SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数 |
DCL
用户管理
DCL英文全称是Data ControlLanguage(数据控制语言),用来管理数据库用户、控制数据库的访问权限

权限控制


MySql数据类型
数值类型
| ***分类***** | ***类型***** | ***大小***** | ***有符号(SIGNED)范围***** | ***无符号(UNSIGNED)范围***** | ***描述***** |
|---|---|---|---|---|---|
| 数值类型 | TINYINT | 1 byte | (-128,127) | (0,255) | 小整数值 |
| SMALLINT | 2 bytes | (-32768,32767) | (0,65535) | 大整数值 | |
| MEDIUMINT | 3 bytes | (-8388608,8388607) | (0,16777215) | 大整数值 | |
| INT或INTEGER | 4 bytes | (-2147483648,2147483647) | (0,4294967295) | 大整数值 | |
| BIGINT | 8 bytes | (-2^63,2^63-1) | (0,2^64-1) | 极大整数值 | |
| FLOAT | 4 bytes | (-3.402823466 E+38,3.402823466351 E+38) | 0和(1.175494351 E-38,3.402823466 E+38) | 单精度浮点数值 | |
| DOUBLE | 8 bytes | (-1.7976931348623157 E+308,1.7976931348623157 E+308) | 0和(2.2250738585072014 E-308,1.7976931348623157 E+308) | 双精度浮点数值 | |
| DECIMAL | ***依赖于M(精度)和D(标度)的值***** | ***依赖于M(精度)和D(标度)的值***** | 小数值(精确定点数) |
字符串类型
| ***分类***** | ***类型***** | ***大小***** | ***描述***** |
|---|---|---|---|
| 字符串类型 | CHAR | 0-255 bytes | 定长字符串 |
| VARCHAR | 0-65535 bytes | 变长字符串 | |
| TINYBLOB | 0-255 bytes | 不超过255个字符的二进制数据 | |
| TINYTEXT | 0-255 bytes | 短文本字符串 | |
| BLOB | 0-65535 bytes | 二进制形式的长文本数据 | |
| TEXT | 0-65535 bytes | 长文本数据 | |
| MEDIUMBLOB | 0-16777215 bytes | 二进制形式的中等长度文本数据 | |
| MEDIUMTEXT | 0-16777215 bytes | 中等长度文本数据 | |
| LONGBLOB | 0-4294967295 bytes | 二进制形式的极大文本数据 | |
| LONGTEXT | 0-4294967295 bytes | 极大文本数据 |
日期类型
| ***分类***** | ***类型***** | ***大小***** | ***范围***** | ***格式***** | ***描述***** |
|---|---|---|---|---|---|
| 日期类型 | DATE | 3 | 1000-01-01至9999-12-31 | YYYY-MM-DD | 日期值 |
| TIME | 3 | -838:59:59至838:59:59 | HH:MM:SS | 时间值或持续时间 | |
| YEAR | 1 | 1901至2155 | YYYY | 年份值 | |
| DATETIME | 8 | 1000-01-0100:00:00至9999-12-3123:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 | |
| TIMESTAMP | 4 | 1970-01-0100:00:01至2038-01-1903:14:07 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
函数
字符串函数

日期函数

数值函数

流程函数

约束

外键约束删除更新行为

多表查询
项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:
- 一对多(多对一)
- 多对多
- 一对一
内连接

外连接

自连接

联合查询

如果携带参数ALL,则不会去重。
子查询


标量子查询
例子:查询销售部的所有员工
1 | select * from emp where emp.dept_id = (select id from dept where name = '销售部' ) |
列子查询
例子:查询有员工薪资大于5000的部门
1 | select * from dept where id in (select salary from emp where salary > 5000) |
行子查询

表子查询

事务
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
事务操作
1 | -- 设置手动提交事务,每次更新操作都要commit才能生效 |

手动开启事务,提交与回滚

事务的四大特性
- 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
- 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
- 隔离性(lsolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
- 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
事务的隔离性是数据库事务的四大特性(ACID)之一,它确保了多个并发执行的事务之间不会相互干扰,每个事务的操作对其他事务是“透明”还是“可见”取决于数据库设置的隔离级别。隔离性旨在解决并发事务操作数据时可能导致的脏读、不可重复读、幻读等问题。
事务的并发问题

事务的隔离级别







