`

第四部分 约束 视图 事务 安全

    博客分类:
  • SQL
阅读更多

一、约束

        CHECK(检查)约束限定允许插入某列的值。她和WHERE子句使用相同的条件表达式。如果插入的值无法通过CHECK条件,那么会出现错误信息。(MySQL中无法使用check,可以用触发机制(trigger,满足特定条件才执行)来实现)。

CREATE TABLE piggy_bank
(
    id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
    coin CHAR(1) CHECK (coin IN('P','N','D','Q')),
    coin_year CHAR(4)
)
CREATE TABLE mystery
(
    column1 INT(4) CHECK (column1>200),
    column2 CHAR(1) CHECK (column2 NOT IN('x','y','z')),
    column3 VARCHAR(3) CHECK ('A'=SUBSTRING(column3,1,1)),
    column4 VARCHAR(3) CHECK ('A'=SUBSTRING(column4,1,1) AND 'A'=SUBSTRING(column4,2,1))
)
ALTER TABLE my_contacts
ADD CONSTRAINT CHECK gender IN('M','F');

 

 二、视图

CRETE VIEW  web_designers AS
SELECT mc.name,mc.phone,mc.email
FROM my_contacts mc 
NATURAL JOIN job_desired jd   #此处也可以改为INNER JOIN job_desired jd ON mc.id=jd.id
WHERE jd.title='Web Designer';
 
SELECT * FROM web_designers;
          这个视图与查询等价于 
SELECT * FROM 
CRETE VIEW  web_designers AS
SELECT mc.name,mc.phone,mc.email
FROM my_contacts mc 
NATURAL JOIN job_desired jd 
WHERE jd.title='Web Designer';  
         视图是一个查询中使用VIEW是才存在的表,它被视为虚拟表。视图把查询简化成一条命令。即使一直改变数据库结构也不会破坏依赖表的应用程序。创建视图可以隐藏读者需看到的信息。
CRETE VIEW  job_raises AS
SELECT mc.name,jc.id,jc.salary,jd.salary_low,jd.salary_low-jc.salary AS raise
FROM my_contacts mc 
INNER JOIN job_desired jd 
INNER JOIN job_current jc
WHERE mc.contact_id=jd.contact_id AND jd.contact_id=jc.contact_id;
        这个查询是庞大的,且经常使用时,可以将其创建为一个视图,这样就只需要输入SELECT * FROM job_raises;就可以查到需要的信息。
        视图不仅仅能用于SELECT,还能用于UPDATE、INSERT、DELETE。当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化,同时,若基本表的数据发生变化,则这种变化也可以自动地反映到视图中。
CRETE VIEW  pb_dimes AS
SELECT * FROM piggy_bank 
WHERE coin='D' WITH CHECK OPTION;
         这个视图带有CHECK OPTION,这意味着,如果对视图进行update或者insert时,会检查修改或插入是否符合WHERE后面的内容,例如 UPDATE pb_dimes SET coin='X';不符合WHERE后面的字句。
        一般,不使用INSERT、UPDATE、DELETE来改变视图。
        用SHOW TABLES能看到表和视图,用DESC来查看结构,用DROP VIEW pd_dimes;来删除视图。
 
三、事务
         在事务过程中,如果所有步骤无法不收干扰完成,则不该完成任何单一步骤。一个SQL步骤是否是事务可以用ACID来判断:一、原子性(autoumicity),不能只发生一半就停下来;二、一致性(consistency),步骤完成后应该维持数据库的一致性,例如,取钱后,余额与所取的钱的和应该与原始余额相等;三、隔离性(iolation),每次事务应该看到相同的数据库,两个人使用同一张卡同时同时取钱,一个人正在完成操作,另外一个正在查询余额,这时后一个人根本就不应该看到余额,或者后一个人看到“正在交易”之类的信息;四、持久性(burability),事务完成后,通常把数据放在主数据库以外的地方,这样就可以防止断电或者其他威胁。
        SQL事务工具有:START TRANSACTION持续追踪后续所有SQL语句,直到COMMIT或者ROLLBACK,而COMMIT是提交代码进行执行,ROLLBACK是撤销到START TRANSACTION状态。
        要想使用事务,必须要采用正确的存储引擎。有些存储引擎不允许事务,可以用SHOW CREATE TABLE my_contacts;来查看存储引擎(反括号后面ENGINE=...),支持事务的存储引擎有BDB和InnoDB。改变存储引擎的语句是
ALTER TABLE my_contacts TYPE=InnoDB;
 
START TRANSACTION;
SELECT * FROM piggy_bank;
UPDATE piggy_bank SET coin='Q' WHERE coin='P';
SELECT * FROM piggy_bank;
ROLLBACK;    #放弃改变数据,回到原始状态
SELECT * FROM piggy_bank;
 
START TRANSACTION;
SELECT * FROM piggy_bank;
UPDATE piggy_bank SET coin='Q' WHERE coin='P';
SELECT * FROM piggy_bank;
COMMIT;    #确认改变数据
SELECT * FROM piggy_bank;
 
四、安全
    数据库中默认第一位用户为根用户root,它具有一切权限。给它设置密码如下:
SET PASSWORD FOR 'root'@'localhost' =PASSWORD('123456');
        localhost表示运行查询的计算机,即安装当前SQL RDBMS。如果你的SQL软件在O'Reilly的网络中的一台叫kumquats的机器上,那么主机名可能是root@kumquats.oreilly.com。 
        创建用户:
CREATE USER elsie IDENTIFIED BY '123456';创建用户elsie密码123456
         可以使用GRANT语句来控制用户的权限:
GRANT INSERT ON animals TO doc;  #给doc INSERT 表 animals权限
GRANT INSERT、SELECT ON animals TO doc;
GRANT ALL ON animals TO doc;    #doc拥有SELECT、INSERT、UPDATE、DELETE表animals的权限
GRANT DELETE ON animals TO doc,happy WITH GRANT OPTION ;
             #给doc、happy DELETE 表 annimals的权限,并且他们有权把同样的权限给别人
GRANT SELECT(animal_name) ON animals TO doc; #给doc查询表animal中的列animal_name的权限
GRANT SELECT ON cottage.* ON doc;  #doc查询数据库cottage中所有的表
         用REVOKE撤销权限:
REVOKE INSERT ON animals FROM doc;  #收回INSERT权限
REVOKE GRANT OPTION ON
    DELETE ON animals TO doc,happy; #收回给予别人权限的权限,但仍然有DELETE权限
REVOKE DELETE ON animals FROM happy CASCADE;  #收回happy的DELETE权限,同时收回happy赋予别人的权限,默认为CASCADE
REVOKE DELETE ON animals FROM happy RESTRICT;  #如果happy给了第三方权限,那么“收回”失败
 
GRANT SELECT ON animals TO doc IDENTIFIED BY '123456';#创建用户并授权
        
        如果要给一群人赋予相同的权限,可以先创建一个角色,在给他们权限。
CREATE ROLE data_entry;    #创建角色
GRANT SELECT ,INSERT ON animanls TO  data_entry;  #给角色授权
GRANT data_entry TO doc;  #用户doc和角色data_entry有一样的权限
DROP ROLE data_entry;     #删除角色,用户doc不再有权限
 
GRANT data_entry TO doc WITH ADMIN OPTION;  #用户doc获得权限并且可以把data_entry赋予别人
REVOKE data_entry FROM doc CASCADE;  #收回doc的权限,doc给别人的权限也被收回
REVOKE data_entry FROM doc RESTRICT; #如果doc给别人权限,那么收回失败
 
分享到:
评论

相关推荐

    IBM-ETP-Oracle05第5章 事务和备份恢复管理

    本章“IBM-ETP-Oracle05第5章 事务和备份恢复管理”着重探讨了数据库的核心概念——事务处理以及如何通过有效的备份和恢复策略确保数据的安全性与完整性。 事务是数据库操作的基本单元,它包含了对数据库的一系列...

    第10章-事务管理:并发控制与恢复

    事务管理遵循ACID原则,这是事务正确执行的四个基本特性: 1. 原子性(Atomicity):事务中的所有操作要么全部成功,要么全部失败,不会留下中间状态。 2. 一致性(Consistency):事务执行前后,数据库必须保持一致...

    第四章数据库安全性控制ppt课件.ppt

    其中,视图机制允许用户只能看到和操作数据库中被授权的部分,限制了对敏感信息的直接访问。审计(Audit)功能记录所有数据库活动,以便追踪任何异常或非法行为,这在出现问题时提供了追查线索。数据加密则通过对...

    oracle管理应用工具和sql高级应用视频教程详细完整版

    第四章:使用SELECT语句 第五章:数据的限定与排序 第六章:多表连接技术 第二部分:ORACLE SQL高级应用 第一章:使用子查询 第二章:用户访问控制 第三章:Oracle的事务和锁 第四章:使用索引 第五章:约束的作用 ...

    第6章数据库安全保护.pptx

    第6章"数据库安全保护"主要探讨了四个关键领域:数据库的安全性控制、完整性控制、事务和并发控制以及数据库恢复。 6.1 数据库的安全性控制 数据库安全性控制的目的是防止非法用户、非法数据、并发访问冲突以及系统...

    数据库第四版答案

    5. **数据库安全性与完整性**:这部分可能包括用户权限管理、角色定义、访问控制,以及如何通过约束条件(如主键、外键、唯一性约束)确保数据完整性。 6. **数据库性能优化**:答案可能讨论索引的创建和管理,查询...

    oracle11g

    第四章、WHERE子句中常用的运算符 第五章:分组函数 第六章:数据限定和排序 第七章:复杂查询(上):多表连接技术 第八章:复杂查询(下):子查询 第二部分:用户及数据库对象 第九章:用户访问控制 第十章...

    Oracle教程 超详细

    第四章 单行函数 第五章 分组函数 第六章 多表查询 第七章 子查询 第八章 高级查询 第九章 数据字典 第十章 Oracle数据类型 第十一章 Oracle体系结构(DBA) 第十二章 DDL(改变表结构) 第十三章 DML(改变数据结构) ...

    Oracle超详细教程

    第四章 单行函数 第五章 分组函数 第六章 多表查询 第七章 子查询 第八章 高级查询 第九章 数据字典 第十章 Oracle数据类型 第十一章 Oracle体系结构(DBA) 第十二章 DDL(改变表结构) 第十三章 DML(改变数据...

    详细orale教程

    第四章 单行函数 第五章 分组函数 第六章 多表查询 第七章 子查询 第八章 高级查询 第九章 数据字典 第十章 Oracle 数据类型 第十一章 Oracle 体系结构(DBA) 第十二章 DDL(改变表结构) 第十三章 ...

    ORACLE教材

    第四章:管理表空间 表空间概述 通过OEM管理表空间 第五章:管理用户 利用图形界面创建新用户 利用图形界面了解权限 权限与数据字典 创建和修改用户指令 第六章:建立和管理表 表 临时表 表的操作 从...

    ORACLE详细教程

    第四章 单行函数 第五章 分组函数 第六章 多表查询 第七章 子查询 第八章 高级查询 第九章 数据字典 第十章 Oracle 数据类型 第十一章 Oracle 体系结构(DBA) 第十二章 DDL(改变表结构) 第十三章 DML(改变数据结构 ...

    信永国际 中文超详细Oracle教程

    第四章 单行函数 第五章 分组函数 第六章 多表查询 第七章 子查询 第八章 高级查询 第九章 数据字典 第十章 Oracle数据类型 第十一章 Oracle体系结构(DBA) 第十二章 DDL(改变表结构) 第十三章 DML(改变数据...

    mysql数据库笔试题一.docx

    填空题第四部分的答案是:"集合"。 【高级数据库特性】 13. 存储过程有性能提升、减少网络流量、提高数据一致性以及增强安全性的优点。 14. 触发器分为INSERT、DELETE和UPDATE三种类型,用于在特定操作发生时自动...

    数据库原理及应用-第五章简答题答案.docx

    7. 死锁发生在满足互斥、不可抢占、部分分配和循环等待四个条件时。消除死锁的方法包括一次加锁法(一次性获取所有需要的锁)和顺序加锁法(规定事务获取锁的顺序),以及死锁检测和解除策略。 8. 数据库可能遇到的...

    SQL Server 2012从零开始学培训视频和PPT.rar

    第4章Transact-SQL语言基础.ppt 第5章轻松掌握Transact-SQL语句.ppt 第6章认识函数.ppt 第7章Transact-SQL查询.ppt 第8章数据的更新.ppt 第9章规则、默认和完整性约束ppt 第10章创建和使用索引l.ppt 第11章事务和锁....

    数据库原理及应用doc版 要点

    实习四:数据库视图操作 视图是数据库的一个虚拟表,基于一个或多个表的查询结果。通过实习,学生将学习如何创建和使用视图,视图可以简化复杂的查询,提供数据的安全性,并帮助隐藏底层数据结构。理解视图的运用,...

    数据库系统导论(第七版)

    第四部分 事务管理 第14章 恢复 333 14.1 引言 333 14.2 事务 334 14.3 事务恢复 335 14.4 系统恢复 337 14.5 介质恢复 338 14.6 两阶段提交 338 14.7 SQL对事务的支持 339 14.8 小结 340 练习 341 参考文献和简介 ...

    oracle数据库的相关知识,包含dml dql,索引,视图,游标,存储过程等

    #### 四、事务处理特性(ACID) Oracle数据库支持严格的事务处理机制,以确保数据的一致性和完整性。事务处理遵循ACID原则: 1. **A(Atomicity)原子性**:事务中的所有操作要么全部完成,要么一个也不完成。例如...

    分布式事务中间件JDTX介绍.pptx

    4. MVCC(多版本并发控制)引擎:实现了事务的一致性视图,允许并发读写操作。 5. WAL(Write-Ahead Log):预写式日志,用于异步刷盘,提升性能。 6. 查询和更新执行器:处理查询和更新请求。 7. 约束校验引擎:...

Global site tag (gtag.js) - Google Analytics