MySQL基础篇
数据库三范式
第一范式
确保每列的原子性
第二范式
确保表中的每列都与主键相关。也可理解为其他列直接依赖主键。
第三范式
确保表中的每列都与主键直接相关,而不是间接相关。也可理解为不能有传递性依赖。
SQL常用语句
SQL类型
DDL语句
数据库操作
查询
- 查询所有数据库
SHOW DATABASES;
- 查询当前数据库
SELECT DATABASE();
创建 - 创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
,默认字符集推荐使用utf8mb4
,该字符集使用4字节保存数据。utf8
是3字节,一些字符表情或者中文会乱码。
删除 - 删除数据库
DROP DATABASE [IF EXISTS] 数据库名;
使用 USE 数据库名;
表操作
- 查询当前数据库所有表
SHOW TABLES;
- 查询表结构
DESC 表名;
- 查询建表语句
SHOW CREATE TABLE 表名;
- 创建表
CREATE TABLE 表名(
字段1 字段1类型 [COMMENT 字段1注释],
字段2 字段2类型 [COMMENT 字段2注释],
...
字段n 字段n类型 [COMMENT 字段n注释]
)[COMMENT 表注释];
数据库事务
事务的定义
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
默认Mysql的事务是自动提交的,也就是说,当执行一条DML语句,Mysql会立即隐式的提交事务。
事务操作
事务提交方式
- 查看
SELECT @@autocommit;
- 设置手动提交
SET @@autocommit = 0
开启事务
START TRANSACTION;
或BEGIN;
提交事务
- 执行
COMMIT;
命令
事务回滚
- 执行
ROLLBACK;
命令
事务的四大特性ACID
- 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败
- 一致性(Consistency):事务完成时,必须使所有的数据状态保持一致
- 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
- 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变是永久的
并发事务问题
- 脏读:一个事务读到另外一个事务未提交的数据
- 不可重复读:一个事务先后读取同一条记录,但两次读到的数据不同,称为不可重复读
- 幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,就好像出现了“幻影”
事务隔离级别
Mysql默认的隔离级别为Repeatable Read,SqlServer 默认的是Read committed。
- 查询事务隔离级别
SELECT @@TRANSACTION_ISOLATION;
- 设置事务隔离级别
SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE]
事务的隔离级别越高,数据越安全,但是性能越低。