MySQL约束与事务

一约束:

含义: 一种限制,用于保证字段的值不能为空
分类: 六大约束
NOT NULL: 非空用于保证该字段的值不能为空
&nbsp比如性别
PRIMARY KEY: 主键,用于保证该字段具有唯一性,并且非空
比如学号、员工编号等
UNIQUE: 唯一,用于保证该字段具有唯一性,可以为空
比如座位号
CHECK: 检查约束【mysql不支持】
比如年龄、性别
POREIGN KEY: 外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值再从表添加外键约束,用于引导主表中某列的值
比如学生表的专业编号,员工表的部门的部门编号,员工表的工种编号

主键和唯一性的对比:

分类唯一性是否为空一个表中是否可以有多个
主键唯一的不能为空只能有一个
唯一性唯一的可以为空可以有多个

二、 MySQL事务

事务:
一个或者一组SQL的执行单元,这个执行单元要么都执行,要么都不执行。
a,b都有1000元

updateset a的余额=a的余额+500 where name=a;
updateset a的余额=a的余额-500 where name=b;

事务的特性:
ACID

原子性:一个事务不可以在分割,要么都执行要么都不执行。    
一致性:一个事务执行会使数据从一个一致状态切换到另一个一致状态。     
隔离性:一个事务的执行不受其他事务的干扰     
持久性:一个事务一旦提交,则会永久的改变数据库的数据

事务的创建:

隐式事务: 事务没有明显的开启和结束标记。
例如: insert,update,delete

显式事务: 事务具有明显的开启和结束标记。
前提: 必须设置自动提交功能为禁止

set autocommit=0;
start transaction;
sql语句1;
sql语句2;
COMMIT;

例题:

--张三给李四转500块钱
set autocommit=0;
start transaction;
update ATM set manry = 1500 where name = '张三';
update ATM set manry = 500 where name = '李四';
commit;

--李四给张三转500块钱
set autocommit=0;
start transaction;
update ATM set manry = manry-500 where name = '张三';
update ATM set manry = manry+500 where name = '李四';
commit;

--李四给张三转500块钱(停电了转账失败)
set autocommit=0;
start transaction;
update ATM set manry = manry-500 where name = '张三';
#停电了
update ATM set manry = manry+500 where name = '李四';
rollback;

版权声明:本文为weixin_43064399原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。