数据库基础知识
自增约束:
管控id值,让他可以自动增长;
唯一约束:
约束修饰的字段的值不可以重复;
1.建表的时候就添加约束
2.可以使用alter。。。。 add。。。。
3.alter。。。。 modify。。。。
4.删除 alter。。。。 drop。。。。
非空约束:
修饰的字符不能为空;
默认约束:
就是当我们插入字段值的时候,如果没有传值,就会使用默认值;
外键约束:
涉及两个表,父表和子表或者叫主表和副表;
1.主表(父表)中没有的数据值,再副表(子表)中是不可以使用的
2.主表中的记录被副表引用,是不可以被删除的
第一范式
数据表中的所有字段都是不可分割的原子值;字段值还可以继续拆分的,就不满足第一范式;范式设计的越详细,对于某些实际操作可能更好,但是不一定都是好处。
第二范式
必须是满足第一范式的前提下,第二范式要求,除主键外的每一列都必须完全依赖于主键,如果要出现不完全依赖,只可能发生在联合主键的情况下(允许传递依赖,不允许部分依赖)。
第三范式
必须是满足第二范式的前提下,除开主键列的其他列之间不能有传递依赖关系(不允许传递依赖)。
事务的四大特征:
A 原子性:事务是最小的单位,不可以再分割。
C 一致性:事务要求,同一事务中的sql语句,必须保证同时成功或者同时失败。
I 隔离性:事务1和事务2之间是具有隔离性的。
D 持久性:事务一旦结束,就不可以返回。
事务手动提交:commit;
事务手动回滚:rollback;
如果两个不同的地方,都在进行操作,如果事务a开启之后,他的数据可以被其他事务读取到,这样就会出现脏读;
脏读:
一个事务读到了另一个事务没有提交的数据,就叫做脏读。实际开发是不允许脏读出现的。
不可重复读:
虽然我只能读到另外一个事务提交的数据,但还是会出现问题,就是读取同一个表的数据,发现前后不一致。(偏向于查询或者修改)
可能是两次查询过程中间插入了一个事务更新的原有的数据。
幻读:
事务a和事务b同时操作一张表,事务a提交的数据,也不能被事务b读到,就可以造成幻读。(偏向于插入或者删除)
当user表被另一个事务操作的时候,其他事务里面的写操作,是不可以进行的。
进入排队状态(串行化),指导事务a结束之后,事务b的写入操作才会执行。在没有等待超时的情况下。
串行化问题是,性能特差。隔离级别越高,性能越差。
read-uncommitted(读未提交):
允许读尚未提交的数据。可能导致脏读、不可重复读和幻读。
read-committed(读已提交):
允许读取并发事务已经提交的数据,可以阻止脏读,但无法阻止幻读和不可重复读。
repeatable-read(可重复读):
对同一字段多次读取的结果是一致的。可以阻止脏读和不可重复读,无法阻止幻读。
serializable(可串行化):
最高的隔离级别,完全服从ACID的隔离级别,所有事务依次逐个执行,事务之间完全不可能产生干扰。防止幻读、不可重复读和脏读。
Mysql默认采用可重复读隔离级别