约束

1.概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。

2.目的:保证数据库中数据的正确、有效性和完整性。

3.分类:

约束

描述

关键字

非空约束

限制该字段的数据不能为null

NOT NULL

唯一约束

保证该字段的所有数据都是唯一、不重复的

UNIQUE

主键约束

主键是一行数据的唯一标识,要求非空且唯一

PRIMARY KEY

默认约束

保存数据时,如果未指定该字段的值,则采用默认值

DEFAULT

检查约束

保证字段值满足某一个条件

CHECK

外键约束

用来让两张表的数据之间建立连接,保证数据的一致性和完整性

FOREIGN KEY

注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

添加外键

CREATE TABLE表名(
……
字段名数据类型,
[CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主表列名)
);
ALTERTABLE表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名);

删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

多表查询:

多表关系:一对多

多对多

多对一

连接查询-内连接

1.隐式内连接

SELECT 字段列表 FROM 表1,表2 WHERE 条件...;

2.显式内连接

SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件...;

内连接查询的是两张表交集的部分

连接查询-外连接

1.左外连接

SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件...;

相当于查询表1(左表)的所有数据包含表1和表2交集部分的数据

2.右外连接

SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件...;

相当于查询表2(右表)的所有数据包含表1和表2交集部分的数据

连接查询-自连接

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件...;

自连接查询,可以是内连接查询,也可以是外连接查询。

联合查询-union , union all

对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。

SELECT 字段列表 FROM 表A ...
UNION [ALL]
SELECT 字段列表 FROM 表B ....;

对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。

union all会将全部的数据直接合并在一起,union会对合并之后的数据去重。

子查询

●概念:SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。

SELECT * FROM t1 WHERE column1 =( SELECT column1 FROM t2);

注:子查询外部的语句可以是INSERT / UPDATE/ DELETE / SELECT的任何一个。

●标量子查询

子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询成为标量子查询。

常用的操作符:= <> > >= < <=

●列子查询

子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。

常用的操作符:IN 、NOT IN 、ANY 、 SOME 、ALL

操作符

描述

IN

在指定的集合范围之内,多选一

NOT IN

不在指定的集合范围之内

ANY

子查询返回列表中,有任意一个满足即可

SOME

与ANY等同,使用SOME的地方都可以使用ANY

ALL

子查询返回列表的所有值都必须满足

●行子查询

子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。

常用的操作符:= 、<> 、IN 、NOT IN

●表子查询

子查询返回的结果是多行多列,这种子查询称为表子查询。

常用的操作符:IN

事务

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

事务操作

●查看/设置事务提交方式

SELECT @@autocommit;
SET @@autocommit =0;//0是关闭,1是开启

●提交事务

COMMIT;

●回滚事务

ROLLBACK;

●开启事务

START TRANSACTION 或 BEGIN ;

事务四大特性(ACID)

●原子性(Atomicity)︰事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

●一致性(Consistency)︰事务完成时,必须使所有的数据都保持一致状态。

●隔离性(lsolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

●持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

并发事务问题:

问题

描述

脏读

一个事务读到另外一个事务还没有提交的数据。

不可重复读

一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。

幻读

一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了"幻影”。

事务隔离级别:

隔离级别

赃读

不可重复读

幻读

Read uncommitted

Read committed

×

Repeatable Read(mysql默认)

×

×

Serializable

×

×

×

--查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;
--设置事务隔离级别
SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED |REPEATABLE READ |SERIALIZABLE}