多表之间的关系
- 外键约束_
- 保证引用完整性. 用来维护多表间关系
语法: alter table 表名1 add constraint 外键名 foreign key(外键字段名) references 表名2(主键字段名)
-- 把tb做为外键表,tp做为主键表,进行引用 (外键字段:tp_id, 主键字段:t_id, 外键表名:tp_tb)
alter table tb add constraint tp_tb foreign key(tp_id) references tp(t_id)
-- 在表中添加外键约束
create table 表(
列 类型 [约束],
列 类型 [约束],
constraint tp_tb foreign key(tp_id) references tp(t_id)
...
);
删除外键约束_
语法: alter table 外键表名drop foreign key 外键名
-- 删除外键约束
alter table tb drop foreign key tp_tb;
外键级联_
- 在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作
语法: on update cascade – 级联更新,主表主键发生更新时,外键也会更新 on delete cascade – 级联删除,主键主键发生删除时,外键也会删除
-- 在添加外键约束时添加外键级联
alter table tb add constraint tp_tb foreign key(tp_id) references tp(t_id) on update cascade on delete cascade
多表关系_
一对多
-- 一对多
create table a(
id int primary key auto_increment,
name varchar(40)
);
create table b(
id int primary key auto_increment,
name varchar(40),
b_id int, -- 外键
constraint a_id foreign key (b_id) references a(id) -- 在表中添加外键约束 (b_id 引用 a中的id)
);
多对多
-- 多对多
create table a(
id int primary key auto_increment,
name varchar(40)
);
create table b(
id int primary key auto_increment,
name varchar(40),
);
create table a_b_tab(
aid int,
bid int,
foreign key (aid) references a(id),
foreign key (bid) references b(id)
);
一对一
create table a(
id int primary key auto_increment,
name varchar(40)
);
create table b(
id int primary key auto_increment,
name varchar(40),
bid int unique, -- 外键约束唯一
constraint a_id foreign key (bid) references a(id)
);
交叉查询_ 语法: select * from 表1,表2
内连接查询_ 语法: 隐式内连接: select * from A,B where A_主键 = B_外键 [and 其他条件] 显示内连接: select * from A [inner] join B on A.主键 = B.外键 [where 其他条件]
外连接查询_
- 左外连接查询(左边的数据全部显示出来. 再通过连接条件匹配出右边表的数据, 如果满足连接条件, 展示右边表的数据; 如果不满足,右边的数据通过null代替 可以理解为:在内连接的基础上保证左边表的数据全部显示
语法: 左外连接: select * from A left join B on A.主键 = B.外键 (保证左边的全部显示) 右外连接: select * from A right join B on A.主键 = B.外键 (保证右边的全部显示)
子查询_
- 一个查询语句的结果作为另一个查询语句的条件就叫作子查询
- 有查询的嵌套,内部的查询称为子查询
- 子查询要使用括号
子查询结果的三种情况:
- 子查询的结果是一个值的时候 :select 表 from 表 where 列 > < = (子查询)
- 子查询的结果是单列多行的时候 :select 表 from 表 where 列 In (子查询)
- 子查询的结果是多列多行的时候 :select 表 from (子查询) 别名 where …
事务
- 数据库的事务(Transaction)是指逻辑上的一组操作,组成这组操作的单元要么全部成功,要么全部失败
- 事务是一个不可分割的工作逻辑单元
手动管理事务_
-- 开启事务
start transaction;
或者 begin;
-- 提交事务
commit;
-- 回滚事务
事务的四大特征_
- 原子性(Atomicity):事务是不可分割的最小操作单位,要么同时成功,要么同时失败
- 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态
- 隔离性(Isolation):多个事务之间,操作的可见性
- 待久性(Durablility):事务一但提交或回滚,它对数据库中的数据的改变就是永久的
|