mysql数据库006

1、 ACID

atomicity原子性
consistency一致性
isolation隔离性
durability持久性
隐式事务,
显式事务:先关闭自动提交
set autocommit = 0;
start transaction;

结束事务:
commit; // 提交
rollback;//回滚

操作事务的时候是在内存,结束事务才写到磁盘。
delete是在内存中删除,通过使用rollback可实现回滚,
而truncate删除直接删除了磁盘的,回滚不回去了。也就是说内存中的操作可以回滚,落盘之后的数据就不能回滚了。

1.1事务并发问题

多个事务,同时,操作,同一个数据库的相同数据时候。

脏读,读取了其他事务还没有提交的数据,“更新”时候
不可重复读,前后两次读取不一致。
幻读,读取还没有提交的事务,“插入”时候

解决:
设置隔离级别

1.2事务隔离级别

查看:select @@tx_isolation;

设置:
set autocommit=0;
set session transaction isolation level repeatable read;

幻读,针对插入时候出现
最高隔离级别可以避免幻读:serializable(串行化,不过性能低)
会给事务加锁,只有完成了前一个事务,才解锁。

保存点:为了回滚做标记。
savepoit a;
rollback a;

2、视图(虚拟表)

动态临时
多个地方用到同样的查询结果
该查询结果使用的sql语句比较复杂
保护数据,提高安全性

2.1 创建视图

create
as

2.2 修改视图

create or replace view 名字
as

方式2、
alter view 名字
as

2.3 删除视图

drop view 视图名1,视图名2,,,

2.4 查看视图

desc myv3;
show create view myv3;

视图可以插入、修改、删除,也会更改原始表,。

2.5、具备以下特点的视图,不允许更新

1、包含如下关键字的sql语句:
group by,分组
distinct
having
union
union all

2、常量视图。
3、select 中包含子查询。
4、join
5、 from一个不能更新的视图
6、where子句的子查询引用了一个from子句中的表

2.6】、视图和表的比较

创建关键字:create view create table
占用内存:表保存数据,视图保存sql逻辑
使用:视图尽量只用查
表:增删改查

主键和唯一
区别:只有一个主键,很多唯一。主键不能为空,唯一可以。
相同点:都具有唯一性。都支持组合键,但不推荐。

外键:
1、用于限制两个表的关系。从表字段引用了主表的某个字段值
2、外键和主表的被引用列要求类型一致,意义一样,名称无要求。
3、主表的被引用列要求是一个key,(一般是主键)

3、变量

系统变量:全局变量、会话变量
自定义变量:用户变量、局部变量

查看系统变量

show session variables;  // session可以省略
show global variables;

//查看满足某些条件的变量
show global varibales like '%char%';

// 查看指定的系统变量的值
select @@系统变量名;  // 默认回话变量
select @@global.系统变量名;

// 赋值:
set global 系统变量名 =;
set @@global.系统变量名 =;

修改全局变量,对所有的会话都有效,但是不能夸重启,
修改配置文件可以跨重启

会话:当前连接

查看当前会话变量:

mysql> select @@transaction_isolation;
+-------------------------+
| @@transaction_isolation |
+-------------------------+
| REPEATABLE-READ         |
+-------------------------+
1 row in set (0.00 sec)

修改当前会话变量的值:

mysql> set @@session.transaction_isolation = 'read-uncommitted';
Query OK, 0 rows affected (0.00 sec)

mysql> select @@transaction_isolation;
+-------------------------+
| @@transaction_isolation |
+-------------------------+
| READ-UNCOMMITTED        |
+-------------------------+

3.2.用户变量

声明,赋值,使用
1.用户变量 :作用域,只对当前会话(当前连接)有效

1、赋值并初始化,=,或者:=
=搞不清是赋值,还是比较所以:=

set @用户自定义变量 =set @用户自定义变量 :=select @用户自定义变量 :=

2、赋值
和刚才的一样

set @用户自定义变量 =set @用户自定义变量 :=select @用户自定义变量 :=

赋值方式二:
select into

select 字段 into 变量名
from;

是弱类型的
所以:

set @name = "join"
set @name = 100
这样是对的

局部变量
作用于实在begin和end之间的,且在第一句话中写出来
声明的时候指定类型

declare  变量名 类型;
declare 变量名 类型 default 值;

2、赋值
方式1:通过set或者select
set 局部变量名 = 值,
set 局部变量名:= 值
select @局部变量名:=值
from 表;

3、使用
select 局部变量名;

declare m int default 1;
declare n int default 2;
declare sum int;
set sum = m + n;
select sum;

4.存储过程函数

含义:一组预先编译好的sql语句的集合,理解成批处理语句
相当于java中的方法,
1 提高代码的重用性
2 简单操作
3 减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

使用:
一、创建:
类似java中的方法

create procedure 存储过程名(参数列表)
begin
	存储过程体(一组合法的sql语句)
end

notes
1、参数列表有3部分:参数模式,参数名,参数类型
举例
in stuname varchar(20)
参数模式:
in 传入类型参数
out 传出类型参数
inout 传入传出参数

2、如果存储过程体只有一句话,begin,end可以省略
3.存储过程的结尾可以使用delimiter 重新设置

二、调用
call 存储过程名(参数列表);
eg

# 1、编写存储过程函数
mysql> delimiter $  # 这句话之后,所有的结束都是这个$符号作为结尾了
mysql> create procedure myp1()
    -> begin
    -> insert into stuinfo(id,name) values(3,'xiaoming');
    -> insert into stuinfo(id,name) values(4,'dongfang');
    -> insert into stuinfo(id,name) values(5,'linghucong');
    -> insert into stuinfo(id,name) values(6,'huawuque');
    -> end $
Query OK, 0 rows affected (0.27 sec)

# 2、调用
mysql> call myp1() $

# 3、查询,
mysql> select * from stuinfo $
+------+-------------+
| id   | name        |
+------+-------------+
|    1 | join        |
|    2 | yangyanmeng |
|    3 | xiaoming    |
|    4 | dongfang    |
|    5 | linghucong  |
|    6 | huawuque    |
+------+-------------+
6 rows in set (0.00 sec)

如果报字符集错误:就:
set names gbk;

eg1、根据传入的女神名,给出对应的男神名
eg2、判断能否登陆成功
查找表中的用户名和密码,如果存在就判定为成功

4.2、存储过程的删除

drop procedure 存储过程名
一次只能删除一个存储过程

4 .3、查看存储过程的信息

show create procedure myp2;

5、函数

和存储过程类似,
都是一组预先编译好的sql语句的集合,理解成批处理语句
1.提高代码重用性
2.简化操作
3.减少编译次数并减少了和数据库副武器的连接次数,提高了效率

区别
存储过程可以有0个和多个返回。适用于增删改查,批量插入,批量更新
函数只能有一个返回。处理数据后,返回一个结果。适合用来查询一个值、

5.1、创建语法

create function 函数名(参数列表)returns 返回类型
begin
	函数体
end

注意:
参数列表只有两部分,参数名 、类型
函数体:有return语句
只有一个语句的时候可以省略begin,end
使用delimiter语句作为设置结束标记

5.2.调用语法

select 函数名(参数列表)
案例:
返回公司的员工个数

create function myfun() return int
begin 
	declare c int default 0;
	select count(*) into c
	from employees;
	return c;
end $

//调用
select myfun()$

5.3.查看删除函数

show create function mfun3;
drop function myf3;

6、流程控制结构

顺序结构
分支结构
循环结构

分支结构:
if函数

if(表达式1,表达式2,表达式3)
如果表达式1成立,执行表达式2,否则执行3

2.case结构
case变量、表达式,用于等值判断
when 要判断的值,then返回的值1
when要判断的值,then返回的值2
多重if,实现区间判断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值