建设部执业资格网站,文件错误wordpress,网络广告营销经典案例,织梦做中英文企业网站一、数据库完整性 数据库完整性是指数据库中数据的正确性和相容性。 完整性约束条件的作用对象 列级约束#xff1a; 包括对列的类型、取值范围、精度等的约束元组约束#xff1a; 指元组中各个字段之间的相互约束表级约束#xff1a; 指若干元组、关系之间的联系的约束定义… 一、数据库完整性 数据库完整性是指数据库中数据的正确性和相容性。 完整性约束条件的作用对象 列级约束 包括对列的类型、取值范围、精度等的约束元组约束 指元组中各个字段之间的相互约束表级约束 指若干元组、关系之间的联系的约束定义与实现完整性约束实体完整性 、参照完整性、 用户定义的完整性 **************************实体完整性************************** 实体完整性 在MySQL中实体完整性是通过主键约束和候选键约束实现的。 主键列必须遵守的规则 每一个表只能定义一个主键主键的值(键值)必须能够唯一标志表中的每一行记录且不能为NULL复合主键不能包含不必要的多余列一个列名在复合主键的列表中只能出现一次 主键约束与候选键约束的区别 主键约束 一个表只能创建 一个主键 关键字 PRIMARY KEY候选键约束 可以定义 若干个候选键 关键字 UNIQUE***********************参照完整性******************************* REFERENCES tbl_name(index_col_name,…)[ON DELETE reference_option][ON UPDATE reference_option] tbl_name指定外键所参照的表名 index_col_name指定被参照的列名 ON DELETE指定参照动作相关的SQL语句 reference_option指定参照完整性约束的实现策略 RESTRICT-限制策略 | CASCADE-级联策略 | SET NULL-置空策略 | NO ACTION-不采取实施策略 **********************用户定义的完整性**************************** 非空约束NOT NULL CHECK 约束CHECK(expr) 命名完整性约束CONSTRAINT [symbol] symbol指定的约束名字 只能给基于表的完整性约束指定名字无法给基于列的完整性约束指定名字 命名完整性约束的方法是在各种完整性约束的定义说明之前加上关键字 CONSTRAINT 和该约束的名字 更新完整性约束 使用ALTER TABLE语句更新与列或表有关的各种约束。 1、完整性约束不能直接被修改。先删除再增加2、使用ALTER TABLE语句可以独立地删除完整性约束而不会删除表 本身。DROP TABLE语句删除一个表则表中所有的完整性约束都会被 自动删除 二、触发器 什么是触发器是用户定义在关系表上的一类由事件驱动的数据对象 也是一种保证数据完整性的方法。 *************************创建触发器****************************** 使用CREATE TRIGGER语句创建触发器 CREATE TRIGGER trigger_name trigger_time trigger_eventON tbl_name FOR EACH ROW trigger_body trigger_name指定触发器的名称 trigger_time指定触发器被触发的时刻 trigger_event指定触发器的触发事件 tbl_name指定与触发器相关联的表名 FOR EACH ROW 指定对于受触发事件影响的每一 行都要激活触发器的动作 trigger_body指定触发器动作主体 例如在数据库mysql_test的表customers中创建一个触发器 customers_insert_trigger用于每次向表customers插入一行数据时 将用户变量str的值设置为one customer added! CREATE TRIGGER mysql_test.customers_insert_trigger AFTER INSERT- ON mysql_test.customers FOR EACH ROW SET str‘one customer added!’ 使用DROP语句删除触发器 语法DROP TRIGGER [IF EXISTS][schema_name.]trigger_name IF EXISTS用于避免在没有触发器的 情况下删除触发器schema_name指定触发器所在的数据库的名称trigger_name指定要删除的触发器名称例如DROP TRIGGER IF EXISTS mysql_test.customers_insert_trigger; 使用触发器 INSERT触发器 DELETE触发器 UPDATE触发器 *******************INSERT触发器*********************** 在INSERT触发器代码内可引用一个名为NEW不区分大小写的虚拟 表来访问被插入的行。 在BEFORE INSERT触发器中NEW中的值可以被更新 例如在数据库mysql_test的表customers中重新创建触发器 customers_insert_trigger用于每次向表customers插入一行数据时 将用户变量str的值设置为新插入客户的id号。 CREATE TRIGGER mysql_test.customers_insert_trigger AFTER INSERT- ON mysql_test.customers FOR EACH ROW SET strNEW.cust_id; ********************DELETE触发器************************* 在DELETE触发器代码内可引用一个名为OLD不区分大小写的虚拟 表来访问被删除的行。 OLD中的值全部是只读的不能被更新。 *******************UPDATE触发器*************************** 在UPDATE触发器代码内可引用一个名为OLD不区分大小写的虚拟 表来访问UPDATE语句执行前的值也可以引用一个名为NEW不区 分大小写的虚拟表来访问更新后的值 例如在数据库mysql_test的表customers中创建一个触发器 customers_update_trigger用于每次更新表customers时将该表中cust_address列 的值设置为cust_contact列的值。 CREATE TRIGGER mysql_test.customers_update_trigger BEFORE UPDATE- ON mysql_test.customers FOR EACH ROW- SET NEW.cust_addressOLD.cust_contact; 三、安全性与访问控制 数据库的安全性是指保护数据库以防止不合法的使用而造成数据泄露、更 改或破坏所以安全性对于任何一个DBMS来说都是至关重要的。 安全性与访问控制身份验证 、数据库用户权 限确认 使用CREATE USER语句创建MySQL账户 语法CREATE USER user [IDENTIFIED BY [PASSWORD]’password’] user格式指定创建用户账号 格式’user_name’’host name’IDENTIFIED BY可选项指定用户账号对应的口令PASSWORD可选项指定散列口令例如在MySQL服务器中添加两个新的用户其用户名分别为zhangsan 和lisi他们的主机名均为localhost用户zhangsan的口令为123用户 lisi的口令为对明文456使用PASSWORD()函数加密返回的散列值。 CREATE USER ‘zhangsan’’localhost’ IDENTIFIED BY ‘123’,- ‘lisi’’localhost’ IDENTIFIED BY PASSWORD- ‘*531E182E272080AB0740FE2F2D689DBE0146E04’; 使用DROP USER语句删除用户账号 语法DROP USER user [,user]… 例如DROP USER lisilocalhost 使用RENAME USER语句修改用户账号 例如RENAME USER ‘zhangsan’’localhost’ TO ‘wangwu’’localhost’; 使用SET PASSWORD语句修改用户登录口令 SET PASSWORD [FOR user]{PASSWORD(‘new_password’)|’encrypted password’} 例如SET PASSWORD FOR usernamelocalhost PASSWORD(pass); 使用GRANT语句为用户授权 GRANTpriv_type [(column_list)][,priv_type [(column_list)]] …ON [object_type] priv_levelTO user_specification [,user_specification] …[WITH GRANT OPTION] priv_type用于指定权限的名称column_list用于指定权限要授予给表中哪些具体的列object_type用于指定权限授予的对象类型priv_level用于指定权限授予的级别TO用于设定用户的口令以及指定 被授予权限的用户useruser_specificationuser[IDENTIFIED BY [PASSWORD]’password’]WITH 可选项用于实现权限的转移或限制例如授予用户zhangsan在数据库mysql_test的表customers上拥有对 列cust_id和列cust_name的SELECT权限。 GRANT SELECT(cust_id,cust_name)- ON mysql_test.customers- TO’zhangsan’’localhost’; 授予当前系统中一个不存在的用户liming和用户huang要求创建 这两个用户并设置对应的系统登录口令同时授予他们在数据库 mysql_test的表customers上拥有SELECT和UPDATE的权限。 GRANT SELECT,UPDATE
- ON mysql_test.customers
- TO liminglocalhost IDENTIFIED BY 123,
- huanglocalhost IDENTIFIED BY 789; 授予系统中已存在的wangwu可以在数据库mysql_test中执行所有 数据库操作的权限 GRANT ALL- ON mysql_test.*- TO ‘wangwu’’localhost’; 授予系统中已存在的wangwu拥有创建用户的权限 GRANT CREATE USER- ON *.*- TO ‘wangwu’’localhost’; 权限的转移 授予当前系统中不存在的用户 zhou 在数据库mysql_test的表customers上 拥有SELECT和UPDATE的权限并允许其可以将自身的这个权限授予给其他 用户 GRANT SELECT,UPDATE- ON mysql_test.customers- TO ‘zhou’’localhost’ IDENTIFIED BY ‘123’- WITH GRANT OPTION; 使用REVOKE语句撤销用户权限 REVOKEpriv_type [(column_list)][,priv_type [(column_list)]] …ON [object_type] priv_levelFROM user [,user] … 回收系统中已存在用户zhou在数据库mysql_test的表customers 上的SELECT权限 REVOKE SELECT- ON mysql_test.customers- FROM ‘zhou’’localhost’; 四、事务与并发控制 所谓事务是用户定义的一个数据操作序列这些操作可作为一个完整的工 作单元要么全部执行要么全部不执行是一个不可分割的工作单位。 事务中的操作一般是对数据的更新操作包括增、删、改。 以BEGIN TRANSACTION语句开始 以 COMMIT 语句或 ROLLBACK语句结束 事务的特征ACID 原子性 Atomicity事务是不可分割的最小工作单位一致性 Consistenc y隔离性 Isolation持续性永久性 Durability例题依据事务的ACID特征分析并编写银行数据库系统中的转账事务T从账 户A转账S金额资金到账户B BEGIN TRANSACTION
read(A);
AA-S;
write(A);
If(A0)ROLLBACK;
else read(B);BBSwrite(B);COMMIT;} 并发操作问题 丢失更新 • 事务T1,T2同时读入同一数据并加以修改T2的提交结果会破坏T1提交的结果不可重复读 • 事务T1读取数据后事务T2执行更新操作使T1无法再现前一次读取结果读“脏”数据 • 事务T1修改数据后撤销使得T2读取的数据与数据库中不一致封锁是最常用的并发控制技术 基本思想需要时事务通过向系统请 求对它所希望的数据对象加锁以确保 它不被非预期改变 锁 一个锁实质上就是允许或阻止一个事务对一个数据对象的存取特权。 基本的封锁类型 1、排他锁X锁用于写操作2、共享锁S锁用于读操作封锁的工作原理 1.若事务T对数据D加了X锁则所有别的事务对数据D的锁请求都必须等 待直到事务T释放锁。2.若事务T对数据D加了S锁则别的事务还可对数据D请求S锁而对数据 D的X锁请求必须等待直到事务T释放锁。3.事务执行数据库操作时都要先请求相应的锁即对读请求S锁对更新 请求X锁。这个过程一般是由DBMS在执行操作时自动隐含地进行。4.事务一直占有获得的锁直到结束时释放封锁的粒度 我们通常以粒度来描述封锁的数据单元的大小DBMS可以决定不同粒度的锁 粒度越细并发性就越大但软件复杂性和系统开销也就越大。封锁的级别又称为一致性级别或隔离度 0级封锁不重写其他非0级封锁事务的未提交的更新数据。实用价值低1级封锁不允许重写未提交的更新数据。防止了丢失更新的发生2级封锁既不重写也不读未提交的更新数据防止了读脏数据3级封锁不读未提交的更新数据不写任何包括读操作未提交数据。死锁和活锁 活锁——先来先服务死锁——预防 1一次性锁请求 2锁请求排序 3序列化处理 4资源剥夺可串行性 一组事务的一个调度就是它们的基本操作的一种排序。在数据库系统中可串行性就是并发执行的正确性准则即当且当一组事务 的并发执行调度是可串行化的才认为它们是正确的。两段封锁法 1.发展Growing或加锁阶段2.收缩Shrinking或释放锁阶段五、备份与恢复 数据丢失的途径 1.计算机硬件故障 2.计算机软件故障 3.病毒 4.人为误操作 5.自然灾害 6.盗窃 数据库备份与恢复的概念 数据备份是指通过导出数据或者复制表文件的方式来制作数据库的复本数据库恢复则是当数据库出现故障或遭到破坏时将备份的数据库加载到 系统从而使数据库从错误状态恢复到备份时的正确状态。 数据库的恢复是以备份为基础的它是与备份相对应的系统维护和管理操 作。使用SELECT INTO…OUTFILE语句备份数据 SELECT *INTO OUTFILE ‘file_name’ export_options| INTO DUMPFILE ‘file_name’ file_name指定数据备份文件的名称 使用LOAD DATA…INFILE语句恢复数据 简述恢复数据的方法? 备份数据库mysql_test中表customers的全部数据到c盘的BACKUP目录 下一个名为backupfile.txt的文件中要求字段值如果是字符则用双引号 标注字段值之间用逗号隔开每行以问号为结束标志。然后将备份后 的数据导入到一个和customers表结构相同的空表customers_copy中。 SELECT * FROM mysql_test.customers
INTO OUTFILE ‘C:/BACKUP/backupfile.txt’
FIELDS TERMINATED BY ’,’
OPTIONALLY ENCLOSED BY “”
LINES TERMINATED BY ‘?’; 转载于:https://www.cnblogs.com/jalja/p/11614085.html