码迷,mamicode.com
首页 > 其他好文 > 详细

约束、视图与事务

时间:2015-12-25 18:50:37      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

约束

CHECK(检查)约束限定允许插入某个列的值。它与WHERE子句都使用相同的条件表达式。

 

1 CREATE TABLE piggy_bank(
2     id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
3     coin CHAR(1) CHECK (coin IN (P,N,D,Q))
4 )

 

如果插入的值无法通过CHECK条件,则出现错误信息。

视图

视图是一个只有在查询中使用view时才存在的表。它被称为虚拟表,因为其行为和表一样,也能执行表可用的操作。虚拟表不会一直保存在数据库里。

视图的好处:

1.视图把复杂查询简化为一个命令,带来更轻松的生活。

2.即使一直改变数据库结构,也不会破坏依赖表的应用程序。

3.创建视图可以隐藏读者无须看到的信息。

例:

1 CREATE TABLE piggy_bank(
2     id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
3     coin CHAR(1) NOT NULL,
4     coin_year CHAR(4)
5 )
CREATE VIEW pb_quarters AS SELECT * FROM piggy_bank WHERE coin = Q;
CREATE VIEW pb_dimes AS SELECT * FROM piggy_bank WHERE coin=D WITH CHECK OPTION;

INSERT INTO pb_quarters VALUES (‘‘,‘Q‘,1000);

  数据插入表,视图里也有
INSERT INTO pb_quarters VALUES (‘‘,‘D‘,3000);

  数据插入表,视图里没有

INSERT INTO pb_dimes VALUES(‘‘,‘Q‘,2005); 

  因为check option产生错误信息。因为它没有通过where子句的验证

DELETE FROM pb_quarters WHERE coin = ‘N‘ OR coin = ‘P‘ OR coin = ‘D‘;

  上述查询对表没有任何影响,因为他只能找到面额是‘Q‘的硬币的记录。

UPDATE pb_quarters SET coin = ‘Q‘ WHERE coin = ‘P‘;

  上述查询对表没有任何影响,因为在视图pb_quarters里没有coin = ‘P‘的值。

CHECK OPTION 检查每个进行INSERT或DELETE的查询,它根据视图中的WHERE子句来判断这些查询可否执行。

可更新视图就是可以改变底层表的视图,可更新视图的内容需要包括它引用的表中所有设定为NOT NULL的列。

删除视图: DROP VIEW pb_dimes;

当数据的使用者不止一人时,CHECK CONSTRAINT 与视图均有助于维护控制权。

 

约束、视图与事务

标签:

原文地址:http://www.cnblogs.com/starryyy/p/5076360.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!