美文网首页
十一、约束、视图和事物

十一、约束、视图和事物

作者: 天天阳光好 | 来源:发表于2017-04-21 17:11 被阅读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

    相关文章

      网友评论

          本文标题:十一、约束、视图和事物

          本文链接:https://www.haomeiwen.com/subject/jvzrzttx.html