约束
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 与视图均有助于维护控制权。