一、CHECK,列的约束
1. 创建表时检查约束
CREATE TABLE table_name
(
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
column_name CHAR(2) CHECK (column_name IN ('男','女'))
)
2.用 ALTER 给已创建的表增加约束
ALTER TABLE table_name
ADD CONSTRAINT CHECK gender IN ('M','F');
3.CHECK的用法和注意事项
column_name INT(4) CHECK (column_name > 200);
column_name VARCHAR(10) CHECK ('A'=SUBSTRING(column_name,1,1 )); '首字母必须为A
column_name VARCHAR(10) CHECK ('A'=SUBSTRING(column_name,1,1 ) AND '8'=SUBSTRING(column_name,2,1 )); '字符串首个字符必须为A,第二个字符必须为2
① CHECK可以限定插入列的内容;
② CHECK可以和所有条件运算符一起使用,但无法用于子查询;
③ MYSQL数据库里不能使用CHECK,它会忽略CHECK语句。
二、视图,存储在数据库内的查询
1.创建视图与查询
CREATE VIEW table_name1 AS
SELECT mc.name,mc.phone,mc.email FROM my_contacts mc
NATURAL JOIN job_desired jd
WHERE jd.title='column_name';
① 查询
创建视图后,若需查询内容,就不需要写这么长的代码了,只需要把视图当做一张表,直接SELECT,代码是:
SELECT * FROM table_name1;
② 视图的原理
当查询中实际使用视图时,原理与子查询一样,CREATE VIEW AS 后的语句作为子查询,并设定别名为 table_name1,具体代码如下:
SELECT * FROM
(SELECT mc.name,mc.phone,mc.email FROM my_contacts mc
NATURAL JOIN job_desired jd
WHERE jd.title='column_name') AS table_name1
2.视图的优势
视图是在查询时使用VIEW时才存在的表,它被视为虚拟表,其行为和表一样,但是不会一直保持在数据库里。
① 创建了视图,就不需要创建复杂的连接和子查询;
② 即使改变了数据库的结果,也不会破坏依赖表的应用程序;
③ 可以隐藏敏感信息,让查询者只看到他能看到的信息。
3.利用视图进行INSERT、UPDATE和DELETE
以下2种情况不能这么做,事实上用传统的方式做更好
① 视图使用了统计函数,则无法用视图改变数据;
② 如果包含GROUP BY、DISTINCT、HAVING,也不能改变。
关键词 CHECK OPTION
CREATE VIEW table_name AS
SELECT * FROM poggy_bank WHERE coin='D' WITH CHECK OPTION;
① 如果在视图后添加CHECK OPTION,那么RDBMS会检查每个INSERT、UPDATE和DELETE语句,符合WHERW的条件的才能添加、更新和删除;
② 在MYSQL中,可以利用CHECK OPTION模拟CHECK CONSTRAIN
4、观察和清除视图
SHOW TABLES 查看所有视图和表
DESC table_name 观察视图的结构
DEOP VIEW table_name 删除视图
三、事务,一群必须同时完成或同时不完成的SQL语句
1.事务(transaction)的定义
在事物过程中,如果所有步骤无法不受干扰地完成,则不该完成任何单一步骤
2.判断是否构成事务的四个原则,ACID检测
① 原子性,ATOMICITY
事务里的每一个步骤都必须完成,否则只能都不完成,不能只执行部分步骤;
② 一致性,CONSISTENCY
事务完成后应该维持数据库的一致性,即财务里所说的收支一致的概念;
③ 隔离性,ISOLATION
表示每次事务都会看到具有一致性的数据库,无论其他事务有什么行动(如一个银行账户有2个人在同时使用时,一人在操作,另一人不能查询账户余额);
④ 持久性,DURABILITY
事务完成后,数据库需要正确地存储数据并保护数据免受断电或其他威胁的伤害。
3.事务的SQL语句
START TRANSACTION; 持续追踪后续所有SQL语句,直到输入COMMIT或ROLLBACK为止;
COMMIT; 如果所有语句的改变都已经妥当,输入次让语句改为变为真;
ROLLBACK; 回滚,如果改变的过程有问题,可用次回到之前开始的状态;
在COMMIT之前,数据库都不会发生任何改变。
4.可更新视图
① 可更新视图就是可以改变底层表的视图,重点是其内容必须包含它引用表中所有设定为NOT NULL的列;
② 如此一来,即可确定每个必须有值的列确实都填入/更新/删除了内容
5.如何让事务在MYSQL中运行
①存储引擎必须是BDB或InnDB,两种支持事务的引擎之一;
② SHOW CREATE TABLE table_name
③ 引擎的语句
ALTER TABLE table_name TYPE=InnDB
网友评论