1、概念:约束是作用与表中字段的规则,用于限制存储在表中的数据。
2、目的:保证数据库中数据的正确、有效性和完整性。
3、分类:
注意:约束是作用于表中字段上的,可以在创建表/修改表中添加约束。
中auto_increment这个是指主键自增(添加主键是自动增加id序号)
案例:
二、外键约束
概念:外键是用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。
外键约束
【】语法:
1、添加外键
方法一(创建表时)
create table 表名(
字段名 数据类型,
...
[constraint] [外键名称] foreign key(外键字段名) references 主表(主表列名)
)
方法二、
alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表 (主表列名);
2、删除外键
alter table 表名 drop foreign key 外键名称;
外键约束
更新/删除行为
alter table 表名 add constraint 外键名称 foreign key (外键字段) references 主表名(主表字段名 on update cascade on delete cascete;
多表查询
概述:项目开发中数据库表设计时,会根据业务需求,实现业务之间相互关联,所以各个表之间存在关系,基本分为三种一对多(多对一);多对多;一对一。
1、一对多(多对一);
案例:部门与员工的关系;
目的:一个部门对应多个员工
实现:在多的一方建立外键,指向单一的一方;
多对多:
一个学生可以选修多门课程
一个班的多个学生同样可以选秀多门课程
;
一对一:
目的:一对一,多用于单表拆分,一张表的基础字段放在一张表中,详情放在另一张表中。
实现:在任意一方加入外键,关联另外一方的主键,并且设置外键作为唯一的(unique)。
多表查询详情
单表查询:select * from emp;
多表查询:select * from emp,dapt;(笛卡尔积)
两个集合a和集合b的所有组合情况。(要消除无效的笛卡尔积)
多表查询:select * from emp,dapt where emp.dept_id = dept_id;(笛卡尔积)
多表查询的分类
内连接:相当于集合a和集合b交集的部分数据;
隐式内连接:
select 字段列表 from 表1,表2 where 条件。。。;
显式内连接:
select 字段列表 from 表1 【inner】join 表2 on 连接条件。。。;
外连接:
左外连接:相当于查询表1(左表)的所有数据,包括表1和表2交集部分的数据;
select 字段列表 from 表1 left 【outer】join 表2 on 条件。。。;
右外连接:相当于查询表2(右表)的所有数据,包括表1和表2交集部分的数据;
select 字段列表 from 表1 right【outer】join 表2 on 条件。。。;
自链接:可以是内连接查询,也可以是外连接查询;
内
select 字段列表 from 表a 别名a join 表a 别名b on 条件。。。;
外(空也可以查询)
select 字段列表 from 表a 别名a left 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;
根据子查询位置,分为:where之后,from之后,select之后
实例题
事务
返回0是手动
1是自动
开启事务
start transaction;
第一种手动
无误提交事务
有问题进行回滚事务
第二种 自动
有问题回滚事务
事务四大特性
并发事务问题
事务隔离级别