Skip to the content.

[TOC]

Mysql

一、简介

事务

未提交读(READ UNCOMMITTED ):最低隔离级别,一个事务能读取到别的事务未提交的更新数据,很不安全,可能出现丢失更新、脏读、不可重复读、幻读;

提交读(READ COMMITTED):一个事务能读取到别的事务提交的更新数据,不能看到未提交的更新数据,不会出现丢失更新、脏读,但可能出现不可重复读、幻读;

可重复读(REPEATABLE READ):保证同一事务中先后执行的多次查询将返回同一结果,不受其他事务影响,不可能出现丢失更新、脏读、不可重复读,但可能出现幻读;

序列化(SERIALIZABLE):最高隔离级别,不允许事务并发执行,而必须串行化执行,最安全,不可能出现更新、脏读、不可重复读、幻读,但是效率最低。

MySQL支持这四种事务等级,默认事务隔离级别是REPEATABLE READ。

二、使用

用户及权限

# 创建用户
create user 'user01'@'127.0.0.1' identified by '666666';

# 赋予全部权限
grant all privileges on *.* to 'user01'@'127.0.0.1' identified by '666666';

# 赋于指定权限
grant select,insert on <database>.<table> to '<user>'@'<ip>' identified by '<password>';

远程

select host from user  where user ='root'

update user set host = '%' where user = 'root';

flush privileges;

存储过程

基本语法

-- 创建存储过程
delimiter $$
create procedure proc01()
begin
	select empno,ename from emp;
end $$
delimiter ;
-- 调用存储过程
call proc01();

插入测试数据

delimiter $$ 
create procedure proc_batch_insert()
begin  
  declare pre_name bigint;  
  declare ageval int;
  declare i int;
  set pre_name = 187635267;
  set ageval = 100;
  set i = 1;
  while i < 10000000 do
    insert into t_user(name,age, create_time, update_time) 
    values(concat(pre_name,'@test.com'), (ageval+1)%30, now(), now());
    set pre_name = pre_name + 1;
    set i = i + 1;
	end while;
end $$
delimiter ;

-- 调用存储过程
call proc_batch_insert();

三、常见问题

A、mysql 区分表名字大小写

问题具体描述:linux下mysql区分表名大小写,window下表明不区分大小写

可以通过show global variables like ‘%lower_case%’; 查看该值设置

解决

非Docker部署

1、停止mysql

mysqladmin -u root -p shutdown      

2、查找文件

sudo find / -name my.cnf

3、修改my.cnf,增加 lower_case_table_names=1

[mysqld]
lower_case_table_names=1

4、启动mysql

/etc/init.d/mysql start       

Docker部署

mysql.cnf的路径 /etc/mysql/mysql.conf.d/mysqld.cnf

1、进入容器

docker exec -it mysql /bin/bash

2、修改文件

vim  /etc/mysql/mysql.conf.d/mysqld.cnf

2、修改mysqld.cnf,增加 lower_case_table_names=1

[mysqld]
lower_case_table_names=1

3、退出容器重启

docker restart mysql