当前位置:   article > 正文

mysql 存储过程_MySQL之常见约束以及事务和存储过程

mysql存储过程限制

常见约束

数据库约束就是一种限制,用于限制表中行和列的数据,为了保证表中的数据准确和可靠

约束分类

六大约束
NOT NULL :       非空约束,用于保证该字段的值不能为空 DEFAULT:       默认约束,用于保证该字段有默认值 PRIMARY  KEY:  主键约束,用于保证该字段的值具有唯一性 UNIQUE:唯一约束,用于保证该字段的值具有唯一性,可以为空 CHECK:  检查约束,【mysql中不支持】 FOREIGN  KEY:外键约束,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关系列的值 添加约束的时机:
  • 创建表时
  • 修改表时
约束的添加分类:
  • 列级约束
    • 六大约束语法上都支持,但是外键约束没有效果
    • 直接在字段名和类型后面追加 约束类型即可
  • 表级约束
    • 除了非空、默认,其他都可以支持。

主键和唯一的对比

主键约束 PRIMARY KRY
  • PRIMARY KRY 主键 是唯一的 一张表只能有一个主键
  • AUTO_INCREMENT 一定要和主键连用
  • 但主键不一定要和 AUTO_INCREMENT 连用
  • 主键一定是非空的 NOT NULL
  • 唯一约束 UNIQUE KEY
UNIQUE KEY 唯一约束
  • 唯一约束可以保证数据的唯一性
  • 唯一约束的字段可以为空
  • 每张数据表可以有存在多个唯一约束

事务

将一组SQL放在一个批次中去执行,要么都成功,要么都失败 MySQL 是默认开启事务自动提交的
事务原则   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;  --开启自动提交

d6f380eac6d8358c543838daef5aed8b.png

数据库事务的隔离性

数据库系统必须具有隔离并发运行各个事务的能力,使它们不会互相影响,避免各种并发问题。 一个事务与其他事务隔离的程度成为隔离级别,数据库规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性就越好,但并发性越弱。
select @@tx_isolation;--查看数据库的事务隔离级别set session transaction isolation level 隔离级别;--设置数据库隔离级别

数据库的4种隔离级别

隔离级别描述
READ UNCOMMITED    (读未提交的数据)允许事务读取未被其他事务提交的变更、脏读、不可重复读和幻读的问题出现
READ COMMITED      (读已提交的数据)只允许事务读取已经被其他事务提交的变更,可以避免脏读,但不可重复 读和幻读问题仍然可能出现
REPEATABLE  READ      (可重复读)确保事务可以多次从一个字段中读取相同的值,在这个事务持续期间,禁止其他事务对这个字段进行更新,可以避免脏读和不可重复读,但是幻读的问题依然存在
SERIALIZABLE             (串行化)确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止其他事务对该表执行插入,更新和删除操作,所有并发问题都可以避免,但性能十分低下。
  • Oracle支持的2种事务隔离级别:read commited、 serializable。Oracle默认的事务隔离级别为:read commited(读已提交)
  • MySQL支持四种事务隔离级别,mysql默认的事务隔离级别为 repeatable read(可重复读)

视图

视图的含义:视图就是虚拟的表,和普通表一样的使用,是mysql 5.1版本出现的新特性,是通过表动态生成数据 如果我们查询是一个复杂的查询,查询涉及到多张表,那么我们就可以把复杂的查询封装成一个视图。只保存SQL逻辑,不保存查询结果 应用场景:
  • 多个地方用到同样的查询结果
  • 该查询结果使用的SQL语句比较复杂
--视图的创建语法create view 视图名as查询语句;--视图的修改语法1create or replace view 视图名as查询语句;--视图的修改语法2alter view 视图名as查询语句;--删除视图drop view 视图名,视图名...;--查看视图1desc 视图名;--查看视图show create view 视图名;
视图的好处:
  • 重用SQL语句
  • 简化复杂的SQL操作,不必知道它的查询细节
  • 保护数据,提高安全性

视图和表的对比

类型创建语法关键字物理空间的占用使用
视图create view只保存SQL逻辑,几乎可以忽略增删查改,一般不能增删改
create table保存了数据增删查改

存储过程

一组预先编译好的SQL语句的集合,可以理解成批处理语句
  • 提高代码的重要性
  • 简化操作
  • 减少了编译次数,并且减少了和数据库服务器的连接次数,提高了效率
创建语法
create procedure 存储过程名(参数列表)begin存储过程体(一组合法的sql语句)end参数列包含三部分参数模式参数名参数类型eg:  IN stuname VARCHAR(20)参数模式:IN*(该参数可以作为输入,即是该参数需要调用方法传入值)OUT(该参数可以作为输出,也就是该参数可以作为返回值) INOUT(该参数既可以输入又可以输出,也就是该参数既需要传入值,又可以返回值)
如果存储过程体仅仅只有一句话,BEGIN   END  可以省略,存储过程体中的每条SQL语句要求必须加分号,存储过程体结尾可以使用DELIMITER 重新设置 语法: DELIMITER    结束标记     eg:  DELIMITER $ 调用语法 CALL 存储过程名(实参列表);
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/877287
推荐阅读
相关标签
  

闽ICP备14008679号