十一、约束、视图和事物

2017-04-21  本文已影响0人  天天阳光好

一、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 BYDISTINCTHAVING,也不能改变。

关键词 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中运行

①存储引擎必须是BDBInnDB,两种支持事务的引擎之一;

② SHOW CREATE TABLE table_name

③ 引擎的语句

ALTER TABLE table_name TYPE=InnDB

上一篇 下一篇

猜你喜欢

热点阅读