一、事务
—概述
数据库事务:单个逻辑单元执行的一系列操作,要么完全地执行,要么完全地不执行。
事务四个特性:ACID
原子性(不可分割性)Atomicity:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某一个环节,在执行过程中如果出现了错误,会被回滚(rollback)到事务开始前的状态。
一致性Consistency:在事务开始之前和事务结束后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度,串联性以及后续数据库可以自发性地完成预定的工作。
隔离性(独立性)Isolation:数据库允许多个事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据不一致。
持久性Durability:事务处理结束后,对数据的修改是永久的,即使系统故障也不会丢失。
隔离级别
- 读未提交( read uncommitted):安全性最差,可能发生并发数据问题,性能最好。
- 读提交( read committed):Oracle默认隔离级别
- 可重复读 (repeatable read):MySQL默认的隔离级别,安全性比较好,性能一般。
- 串行化 (Serializable):表级锁,读写都加锁,效率低下,安全性高,不能并发。
读未提交 read uncommitted
窗口1:
> mysql>start transaction; #开启事务
> mysql>insert into tb_door values(3,"四哈",12345678964,1300);
> mysql>commit; #提交事务
> mysql>rollback;表示回滚,回滚到事务的起点,之前所有操作被撤消.
窗口2:
mysql>select * from tb_door;
二、字段约束
–1.默认约束
#默认约束,给字段设置默认值
CREATE TABLE test01(
id INT PRIMARY KEY AUTO_INCREMENT,
sex CHAR(3) DEFAULT '男' #默认约束
)
–2.检查约束
#2.检查约束:检查字段的值是否合理性
CREATE TABLE test02(
id INT PRIMARY KEY AUTO_INCREMENT,
age INT,
CHECK(age>0) #检查约束,了解即可
)
INSERT INTO test02 VALUES(4,10);
INSERT INTO test02 VALUES(5,-10);
–3.外键约束
#3外键约束,为了节省内存,使用对方表的主键来描述两张表的关系
CREATE TABLE test03(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME vachar(10),
age INT,
phone VARCHAR(11)
)
CREATE TABLE test0300(
user_id INT PRIMARY KEY,#不能自增!!!
address VARCHAR(100),
#1.创建外键FK,描述和关联表的关系
#foreign key(本表的主键) references 对方表名(对方主键)
FOREIGN KEY(user_id) REFERENCES test03(id)
)
情况1:主表的数据记录不能删除,因为关联表的数据还在使用,只有将关联表的对应数据删除,主表才可以删除。
情况2:关联表的主键不能超过主表的主键,主键值必须与主表主键值一致。
–4.主键约束
CREATE TABLE tb_user(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30)
);
–5.唯一约束 UNI
CREATE TABLE tb_user(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30) UNIQUE NOT NULL,
PHONE VARCHAR(30)
);
–6.非空约束 NOT NULL
CREATE TABLE tb_user(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30) UNIQUE NOT NULL,
PHONE VARCHAR(30)
);