1、对数据库施加数据完整性约束的作用
防止数据库中存在不符合语义的数据,维护数据库完整性
随时检测更新状态数据库内容是否符合完整性约束,保障数据一致性与正确性
防止对数据库的恶意破坏,体改完整性检测的效率,减轻数据库编程人员负担
2、完整性约束条件的作用对象可以是列、元祖、表
列:字段的类型、空值、取值范围、精度等约束
元祖:字段之间的约束,开始日期小于结束期
表:主键和外键之间的约束
3、定义与实现完整性约束
(1)实体完整性约束:指关系的主属性,即主码的组成不能为空,也就是关系的主属性不能是NULL
(2)参照完整性约束:定义外码和主码之间的引用规则,它是对关系间引用数据的一种限制
(3)用户定义的完整性约束:针对某一应用环境的完整性约束条件,它反应了某一具体应用所涉及的数据应满足的条件
check约束:在创建表或更新表同时,根据用户的实际完整性要求定义的。
4、使用SQL实现命名完整性约束
5、使用SQL实现更新完整性约束
CREATE TABLE table_name(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL DEFAULT "",
PRIMARY KEY(id),
FOREIGN KEY(shcool_id)
REFERENCE school(id)
ON DELETE RESTRICT
ON UPDATE RESTRICT
);
CASCADE:父表delete、update的时候,子表会delete、update掉关联记录;
SET NULL:父表delete、update的时候,子表会将关联记录的外键字段所在列设为null,所以注意在设计子表时外键不能设为not null;
RESTRICT:如果想要删除父表的记录时,而在子表中有关联该父表的记录,则不允许删除父表中的记录;
NO ACTION:同 RESTRICT,也是首先先检查外键;
6、触发器
CREATE TRIGGER trigger_name AFTER UPDATE ON table_name FOR EACH ROW SET NEW.name = OLD.name;
DROP TRIGGER IF EXISTS trigger_name;
7、SQL语言安全控制中的访问控制的作用,两种方式用户账号和权限管理
存储在名为mysql的数据库user表中,包含所有用户帐号。
需要为用户分配访问适当的权限。
8、用户账号管理
CREATE USER 'admin'@'127.0.0.1' IDENTIFIELD BY '123456',
'hongda'@'127.0.0.1' IDENTIFIELD BY PASSWORD 'afrwefwe';
DROP USER [email protected];
RENAME USER 'hongda'@'127.0.0.1' TO 'hong'@'127.0.0.1';
SET PASSWORD FOR 'hongda'@'127.0.0.1' = 'asfohwoiefhowihefoiw';
9、用户权限管理
GRANT SELECT(id,name) ON table_name TO 'hongda'@'127.0.0.1';
GRANT SELECT,UPDATE ON table_name TO 'hongda'@'127.0.0.1',
'admin'@'127.0.0.1'
WITH GRANT OPTION;
10、事务与并发控制的概念
并发控制:对并发操作提供一定的控制,防止他们互相干扰,从而保证数据库的正确性不被破坏,避免数据库不一致性;
事务:用户定义的一个数据操作序列,这些操作可以作为一个完整的工作单元,要么全部执行,要么全部不执行,是一个不可分割的工作单位;
11、事务的特征ACID
原子性、一致性、隔离性、持续性
12、并发操作的问题
丢失更新
不可重复读
读脏数据
13、封锁
封锁作为一种常用的并发控制技术,用于解决并发操作所带来的数据不一致性问题
基本思想:事务通过向系统请求对它所希望的数据对象加锁,以确保它不被非预期修改
(1)锁:允许或阻止一个事务对一个数据对象的存取特权。排它锁(X锁)、共享锁(S锁)
(2)用封锁进行并发控制:
事务对数据加了X锁,只有当事务结束后,才可对数据做存取
事务对数据加了S锁,其他事务可以继续施加S锁。X锁必读等待S锁全部释放才可请求
事务执行数据库操作时先请求相应的锁,由DBMS隐式执行
事务一直战友获得的锁,当ROLLBACK或COMMIT时释放
(3)封锁的粒度
粒度描述封锁的数据单元的大小。粒度越细,并发越高,软件复杂性和系统够开销也大。对数据库加锁,粒度最大,数据存取只能顺序执行,性能大大下降。
(4)封锁的级别
又称为一致性级别或隔离度。与封锁期限有关,有的只是数据单元的存取期,有的是整个事务的存取期。
0级封锁:封锁的事务不重复写其他非0级封锁事务的为提交的更新数据
1级封锁:被封锁的事务不允许重写未提交的更新数据
2级封锁:被封锁的事务既不重写也不读未提交的更新数据
3级封锁:被封锁的事务不读未提交的更新数据,不写任何未提交数据
(5)活锁与死锁
活锁:并发事务处理过程中,由于锁会使一事务处于等待状态而调度其他事务,因而该事务可能因为优先级低永远等待下去。
死锁:两个以上事务循环等待被同组中另一事物锁住的数据单元的情形
死锁解决方法:一次性锁请求、锁请求排序、序列化处理、资源剥夺
(6)可串行性
一组事务的一个调度就是他们基本操作的一个排序。一个调度中,任意两个事务T1和T2,要么T1所有操作都在T2之前,要么之后,则该调度是可串行的。
(7)两段封锁法
任意一个事务中,所有加锁操作都必须在所有释放锁操作之前。
14、备份与恢复
概念:备份是指通过导出数据或复制表文件的方式制作数据库的副本;恢复是指当前数据库遭到破坏时,将备份加载到系统中,使数据库从错误状态恢复到正确状态。
作用:
保证数据库的可靠性和完整性
可以用于数据恢复
通过导出数据或者复制表文件的方式制作数据库的副本
SELECT * FROM table_name INTO OUTFILE 'C://table_name.txt';
LOAD DATA INFILE 'C://table_name.txt' INTO TABLE table_name;