1,事务的属性(ACID)
1.1,原子性(A):事务是一个不可分割的单位,事务中的操作要么全部执行,要么全部不执行.
1.2,一致性(C):事务必须使数据库从一个一致性状态变换到另一个一致性状态
1.3,隔离性(I):多个事务之间互不干扰
1.4,持久性(D):事务一旦提交,就会永久性的改变数据库的数据
2,事务例子
SET autocommit = 0;#关闭自动提交
START TRANSACTION;#开启事务
SELECT 1;#语句1
SELECT 2;#语句2
COMMIT;#提交事务
ROLLBACK;#回滚事务
3,事务隔离级别
3.1,读未提交:允许事务读取未被提交的事务,会出现脏读,不可重复读,幻读
3.2,读已提交:只允许读取提交的事务,可以避免脏读,但会出现不可重复读和幻读
3.3,可重复读:确保事务多次从一个字段中读取相同的值,但事务期间不允许修改,避免脏读和不可重复读,但依然会幻读
3.4,串行化:确保事务从一个表中读取相同的行,在这个事务之间,禁止其他事务对这个表进行更新操作,没有并发问题,但性能较低
4,视图
4.1,创建或修改
create or replace view 视图名
as
查询语句;
4.2,操作和表大致相同,增删改会更新原始表的数据
4.3,不能更新的视图
4.3.1,分组函数:distinct,group,by,having,union,union all
4.3.2,常量视图
4.3.3,select中包含子查询
4.3.4,包含join或者from后面有多个表
4.3.5,from加上一个不可更新的视图
4.3.6,where子查询引用了from子句中的表
5,变量
全局变量对所有连接有效,重启之后恢复默认;
会话变量只对本次连接有效;
用户变量是对当前连接有效的自定义变量;
局部变量仅仅在定义它的begin end块中有效(放在第一句)
5.1,查看所有系统变量:SHOW GLOBAL(SESSION) VARIABLES;
5.2,查看满足条件系统变量:SHOW GLOBAL(SESSION) VARIABLES LIKE '%char%'
5.3,精确查看系统变量:select @@GLOBAL(SESSION)系统变量名
5.4,为系统变量赋值:set GLOBAL(SESSION) 系统变量名 = 值;或set @@GLOBAL(SESSION).系统变量名 = 值
5.5,自定义变量[用户变量]:
5.5.1,申明:set @变量名=值|set @变量名:=值|select @变量名:=值
5.5.2,赋值:select 字段 into @变量名 from 表
5.5.3,查看:select @变量名
5.6,自定义变量[局部变量]:
5.6.1,申明:DECLARE 变量名 类型 | DECLARE 变量名 类型 DEFAULT 值
5.6.2,赋值:set 变量名=值 | set 变量名 := 值 | select @变量名:=值 | select 字段 into 变量名 from 表
5.6.3,查看:select 变量名
6.存储过程:一组预先编译好的sql语句的集合,类似于java中的方法
6.1,好处:代码重用;简化操作;减少连接数据库;提高效率
6.2,创建:
DELIMITER $
CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
存储过程体
END $
参数列表(参数模式 参数名 参数类型)
参数模式
in:入参
out:出参
inout:入出参数
结束符:DELIMITER 符号
调用
call 存储过程名(参数列表)
6.3,删除:drop PROCEDURE 存储过程名;
6.4,查看:show create procedure 存储过程名
7,函数
7.1,创建:
DELIMITER $
CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
BEGIN
函数体
END $
DELIMITER ;
参数列表(参数名 参数类型)
函数体包含return语句
调用select 函数名(参数列表)
8,case结构
case 字段|变量|表达式
when 值1 then 返回值1(语句)
when 值2 then 返回值2(语句)
else 默认值(语句)
end [case]
case
when 条件1 then 返回值1(语句)
when 条件2 then 返回值2(语句)
else 默认值(语句)
end [case]
语句只能放在函数或存储过程中
9,if结构
if 条件1 then 语句1;
elseif 条件2 then 语句2;
else 语句n;
end if;
10,循环结构
分类:while, loop, repeat
循环控制:
iterate:类似continue
leave:类似break
while循环:
[标签:]while 循环条件 do
循环体;
end while [标签]
loop循环:(搭配leave使用)
[标签:]loop
循环体;
end loop [标签]
repeat循环:
[标签:]repeat
循环体;
until 条件
end repeat[标签]