MySQL数据库查缺补漏-基础篇
基础篇
net start mysql80[服务名]
net stop mysql80
create database pshdhx default charset utf8mb4;
为什么不使用utf8?因为其字符占用三个字节,有四个字节的字符,所有需要设置为utf8mb4;
数值类型:
字符串类型:
日期类型:
用户管理
use mysql;
create user ‘pshdhx’@‘localhost’ identified by ‘123456’
alter user ‘pshdhx’@‘%’ identified with mysql_native_password by ‘123456789’;
用户权限控制:
查询权限:
show grants for ‘pshdhx’@‘localhost’;
授予权限
grant all on db1.* to ‘pshdhx’@‘localhost’
撤销权限:
revoke all on db1.* from ‘pshdhx’@‘localhost’
MySQL函数
字符串函数:
数值函数:
日期函数:
流程函数:
MySQL约束
alter table emp add constraint fk_emp_detp_id foreign key (dept_id) references dept(id);
alter table emp drop foreign key fk_emp_dept_id;
cascade:级联删除外键。
alter table emp add constraint fk_emp_detp_id foreign key (dept_id) references dept(id) on update cascasd on delete cascade;
set null:设置 null
多表查询
内连接
SELECT * FROM emp ,dept where emp.emp_id = dept.dept_id and dept.dept_id = 2;
SELECT * FROM emp INNER JOIN dept on emp.emp_id = dept.dept_id;
注意:如果emp的id为空,则该条记录不展示,取的是交集。
外连接
左外连接
右外连接
通常,右外连接可以调换顺序可以改成左外连接
自连接
注意都要起别名
联合查询
union 【合并后去重】,union all 【不去重】
子查询
单行子查询:=
select * from emp where (salary,managerid) = (12500,1);
select * from emp where (salary,managerid) = (select salary,managerid from emp where name=‘pshdhx’);
多行多列子查询:in
事务
操作的集合。
查看事务的提交方式:
select @@autocommit; 为1就是自动提交。为0就是手动提交。
set @@autocommit=0; 设置手动提交。
事务操作:
开启事务:start transaction 或者是begin
提交事务:commit
回滚事务:rollback
事务四大特性:
1、原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全失败。
2、 一致性(Consistence):事务完成时,必须使所有的数据都保持一致。
3、隔离性(Isolation):数据库提供的隔离机制,保证事务不受外部并发操作影响的独立环境下运行。
4、持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变是永久的。【持久化到data目录下】
并发事务问题:
1、脏读:一个事务读取到另外一个事务没有提交的数据。
2、不可重复度【修改】:一个事务先后读取同一条记录,但是两次读取的数据不同。
3、幻读【新增】:一个事务按照条件查询数据时,没有对应的数据行。但是在插入数据时,又发现这行数据已经存在。
事务隔离级别:
脏读 | 不可重复度 | 幻读 | |
---|---|---|---|
读未提交 | 有 | 有 | 有 |
读已提交[Oracle默认] | 无 | 有 | 有 |
可重复度[Mysql默认] | 无 | 无 | 有 |
串行化【加锁】 | 无 | 无 | 无 |
select @@Transactoin_isolation
set [session | global] transaction isolation level {read uncommitted | read committed | repeatable read| serializable}