这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战
1. 主键约束
主键约束可以分为2种: 单列主键约束:在一个列上添加的主键约束 复合主键约束:在两个或更多列上添加的主键约束。 即主键可以是1个列构成的,也可以是多个列构成的。 复合主键约束是用在多对多映射关系中,当两个表具有多对多映射关系时,就需要创建中间关系表,关系表中要用复合主键约束。 例如 stu_course表 -- 创建学生,课程关系表
-- 创建学生,课程关系表
CREATE table stu_couse(
cid int ,
sid int,
FOREIGN KEY(cid) REFERENCES course(cid),
FOREIGN KEY(sid) REFERENCES stuinfo(stuid),
PRIMARY key(cid,sid) -- 同时在cid和sid上添加主键约束
)
复合主键约束的特点:添加了复合主键约束的任何一列的值可以重复,但是组合在一起就不能重复了。例如:
设计表时添加主键约束:
2. 常见的映射关系
1)一对一:两个实体(表)之间的基数的比例为1:1. 例如:男女朋友是1:1,boy表和gril表。通过外键来确定2个表的一对一的映射关系。 在表设计时,外键添加在任何一张表上都行。
2)一对多/多对一:两个实体(表)之间的基数的比例为1:N. 例如班级和学生,球队和球员。站在一方角度来看是1对多,从多方角度来看就是多对一。在表设计,外键是添加在多方的表上。
3)多对多:两个实体(表)之间的基数的比例为M:N.其实就是2个一对多。 例如课程和学生,共享单车和骑行者。 在表设计时,要再创建一个中间关系表,在中间关系表中使用复合主键(同时也是外键)来反映多对多关系。
3.数据库事务
事务:一个或多个SQL语句组成的逻辑工作单元,这个单元中的一组操作要么全部执行成功,要么全部失败。 经典案例:转账,a和b之间进行转账交易,要么两方都成功,要么都失败。
事务的四个特性(ACID):
-
原子性(A):事务中的多个SQL操作是一个不能分割的整体,要么都执行成功,要么都执行失败。
-
一致性(C): 在事务执行前后数据状态是一致的。
-
隔离性(I):多个事务同时操作相同数据库的同一个数据时,一个事务的执行不受另外一个事务的干扰,彼此隔离.
-
持久性(D):事务一旦提交,对数据库的影响是永久的
在MySQL中,任何一个或多个DML语句都构成了一个事务,事务默认是自动提交的,即事务默认是隐式事务
显式事务:有明显的开启和结束事务的标记. 显式事务的编写步骤:
1、开启事务
取消自动提交事务的功能
2、编写事务的一组逻辑操作单元(多条sql语句)
insert
update
delete
3、提交事务或回滚事务
示例代码:
-- 显式事务
-- 取消事务自动提交功能
set autocommit=0;
-- 开启
start TRANSACTION;
update account set balance=balance-100 where id=1;
update account set balance=balance+100 where id=2;
-- 回滚
ROLLBACK;
并发事务产生的问题:
4,事务隔离级别
演示隔离级别:
1)设置隔离级别,此处设为read committed
2) 使用数据库
- 设置命令行界面的字符集为gbk
4) 开启事务,执行修改操作
5)上面的事务没有提交,则第2个事务就读不到脏数据(临时无效的数据),即避免了脏读。