zoukankan      html  css  js  c++  java
  • 第十一章-约束、视图与事务

    约束

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

  • 相关阅读:
    c#设计模式(1)——单例模式
    Javascript变量
    悲观锁和乐观锁
    NestJs 环境 配置
    分布式查询
    Git hub 忽略 文件 、文件夹
    ES6 基础 二
    ES6 基础 一
    invalid credential, access_token is invalid or not latest hint(微信 上传图片返回 error)
    nodejs 入门一(环境及插件)
  • 原文地址:https://www.cnblogs.com/hell0x/p/5076360.html
Copyright © 2011-2022 走看看