赞
踩
六大约束NOT NULL : 非空约束,用于保证该字段的值不能为空 DEFAULT: 默认约束,用于保证该字段有默认值 PRIMARY KEY: 主键约束,用于保证该字段的值具有唯一性 UNIQUE:唯一约束,用于保证该字段的值具有唯一性,可以为空 CHECK: 检查约束,【mysql中不支持】 FOREIGN KEY:外键约束,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关系列的值 添加约束的时机:
事务原则 ACID原子性(Atomicity) 原子性是指一个不可分割的工作单位,食物中的操作,要么都发生,要么都不发生 原子的实现原理是通过undo log 来进行实现的,undolog是为了实现事务的原子性,在mysql 数据库innodb存储引擎中,还用 undo log 来实现多版本并发控制,简称(MVCC);在操作任何数据之前,首先将数据被分到一个地方(这个存储备份的地方称为 undo log),然后进行数据的修改,如果出现了错误或者用户执行了rollback语句,系统可以利用undo log中的备份将数据恢复到事务开始之前的状态。 注意:undo log 是逻辑日志,可以理解为: 当delete一条记录时,Undo log中会记录一条对应的insert 记录 当insert 一条记录时,undolog中会记录一条delete记录 当update 一条记录时,它记录与之相反的update记录 一致性(Consistency) 最终一致性,过程一致性,事物的前后数据完整性必须保证一致 隔离性(Isolation) 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事物的操作数据所干扰,多个并发事务之间要相互隔离。 持久性(Durability) 持久性是指一个事务一旦被提交,他对数据库中的数据改变是永久性的,接下来即使数据库发生故障也不应该对其有任何影响,事务一旦提交就不可逆了。 redo log 和undolog相反,redolog记录的是新数据的备份。
在事务提交前,只要将redolog 持久化即可,不需要将数据持久化
,当系统崩溃时,虽然数据没有持久化,但是redolog已经持久化,系统可以根据redo log的内容,将所有数据恢复到最新状态。
事务的隔离级别1111111脏读 指一个事务读取了另外一个事务未提交的数据。 不可重复读 在一个事物内读取表中的某一行数据的时候,多次读取结果不同(这不一定是错误,只是某些场合不对) 幻读(虚读) 在一个事务内读取到了别的事务插入的数据,导致前后读取不一致
--mysql 是默认开启事务自动提交的set autocommit = 0 --关闭自动提交事务set autocommit = 1 --开启自动提交事务(默认的)--手动处理事务SET autocommit = 0; --关闭自动提交事务--事务的开启START TRANSACTION--标记一个事务的开始,从这个之后的SQL都在同一个事务内SQL语句......--提交 (成功 持久化)commit--回滚(失败 回到原来的样子)rollback --事务结束SET autocommit = 1; --开启自动提交
select @@tx_isolation;--查看数据库的事务隔离级别set session transaction isolation level 隔离级别;--设置数据库隔离级别
数据库的4种隔离级别
隔离级别 | 描述 |
---|---|
READ UNCOMMITED (读未提交的数据) | 允许事务读取未被其他事务提交的变更、脏读、不可重复读和幻读的问题出现 |
READ COMMITED (读已提交的数据) | 只允许事务读取已经被其他事务提交的变更,可以避免脏读,但不可重复 读和幻读问题仍然可能出现 |
REPEATABLE READ (可重复读) | 确保事务可以多次从一个字段中读取相同的值,在这个事务持续期间,禁止其他事务对这个字段进行更新,可以避免脏读和不可重复读,但是幻读的问题依然存在 |
SERIALIZABLE (串行化) | 确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止其他事务对该表执行插入,更新和删除操作,所有并发问题都可以避免,但性能十分低下。 |
--视图的创建语法create view 视图名as查询语句;--视图的修改语法1create or replace view 视图名as查询语句;--视图的修改语法2alter view 视图名as查询语句;--删除视图drop view 视图名,视图名...;--查看视图1desc 视图名;--查看视图show create view 视图名;
视图的好处:
视图和表的对比
类型 | 创建语法关键字 | 物理空间的占用 | 使用 |
---|---|---|---|
视图 | create view | 只保存SQL逻辑,几乎可以忽略 | 增删查改,一般不能增删改 |
表 | create table | 保存了数据 | 增删查改 |
create procedure 存储过程名(参数列表)begin存储过程体(一组合法的sql语句)end参数列包含三部分参数模式参数名参数类型eg: IN stuname VARCHAR(20)参数模式:IN*(该参数可以作为输入,即是该参数需要调用方法传入值)OUT(该参数可以作为输出,也就是该参数可以作为返回值) INOUT(该参数既可以输入又可以输出,也就是该参数既需要传入值,又可以返回值)
如果存储过程体仅仅只有一句话,BEGIN END 可以省略,存储过程体中的每条SQL语句要求必须加分号,存储过程体结尾可以使用DELIMITER 重新设置
语法:
DELIMITER 结束标记 eg: DELIMITER $
调用语法
CALL 存储过程名(实参列表);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。