语法:
- SQL可以单行或者多行书写,以分号结尾
- SQL可以使用空格/缩进来增强语句的可读性
- 不区分大小写,但是关键字建议使用大写,这也是一个良好的习惯。
- 注释:单行注释: -- 或者 # ,#是MySQL特有的,建议统一使用--
- 多行注释: /* */
分类:
- 数据定义语言: 用来定义数据库对象(数据库,表,字段)
- 数据操作语言:用来对数据库表中的数据进行增删改
- 数据查询语言: 用来查询数据库中表的记录
- 数据控制语言: 用来创建数据库用户、控制数据库的访问权限。
数据库:
- 数据库创建时,使用utf8mb4的好处是在数据库中有的字符占4个字节而使用utf8作为字符集时就会导致错误。
表:
字符串:
- 时间日期已经字符串需要用单引号括起来。
外键:
- 外键所关联的必须要是唯一约束或者主键,总而言之必须唯一,确保数据的一直性和完整性质。
- 如果直接删除关联的子表是可以直接删除的。
- 在删除父表时,如果父表中的记录在子表中找不到这条记录,即使是默认的外键约束行为也可以删除父表的这条记录。
多表查询:
- 一般我们说的多表查询都涉及外键和父子表之间的关系。
- 比如一对多:一般前面指的是父表后面指的是子表。
- 对于三张表的查询,至少有两个连接条件。
- 下面是多表查询的两大类。
内外连接以及自连接区别:
- 对于内外连接主要就是join 有没有left和right有的话就是外连接,只是join就是内连接
- 如果join的两张表是同一张表那就是自连接
- 联合查询的两张表字段数量和类型都必须保持完全一致。所以它也属于子查询的一类。
子查询:
- 嵌套的select语句
- 外面的可以是增删改查任何一个语句。
别名:
- 对于SQL的执行顺序,第一步就是表名列表,对于一些较长的表明我们查找时可以先起别名。
- 由于DQL语句的执行顺序第一步就是表名列表,起了别名后就不能再用原来的表名了。
- 自连接查询必须起别名。
on子句和where子句
- 对于on子句:在执行表连接(如
JOIN
)时应用。在连接操作时应用,决定哪些记录会被连接在一起。优先级较高。它决定了两个表之间的匹配条件。 - where子句:在连接操作完成后应用。
去重
- distinct: 它之后的所有列组合起来都完全相同时才会认为重复。
事务:
- 如果上一个事务我们没有rollback和commit然后直接begin开启了下一个事务,这时候未提交的事务会被主动提交。