一、事务
要么都成功,要么都失败
ACID原则:原子性、一致性、隔离性、持久性(脏读、幻读)
mysql是默认开启事务自动提交的
-- 开启/关闭 自动提交
SET autocommit = 1;
SET autocommit = 0;
-- 开启事务
START TRANSACTION;
-- 提交
COMMIT;
-- 回滚
ROLLBACK;
二、索引
1、索引的分类
- 主键索引(PRIMARY KEY)
唯一标识 - 唯一索引(UNIQUE KEY)
避免重复列出现,但可以重复,只是提示性的唯一 - 常规索引(KEY/INDEX)
- 全文索引(FullText)
显示所有索引信息
SHOW INDEX FROM `student`;
添加一个索引
ALTER TABLE 表名 ADD 索引类型 INDEX 索引名(列名);
分析sql语句执行的情况
EXPLAIN sql语句;
2、索引原则
- 索引不是越多越好
- 不要对经常变动的数据加索引
- 小数据量的表不需要加索引
- 索引一般加载常被查询的字段上
三、权限管理和备份
权限管理
创建用户
-- CREATE USER 用户名 IDENTIFIED BY '密码';
CREATE USER aaa IDENTIFIED BY '123';
修改密码
修改当前用户
SET PASSWORD = PASSWORD('123456');
修改指定用户
SET PASSWORD FOR 用户名 = PASSWORD('123456');
重命名
-- RENAME USER 原名 TO 新名;
RENAME USER aaa TO bbb;
权限
-- 授权
-- GRANT ALL PRIVILEGES ON 库.表 TO 用户名;
GRANT ALL PRIVILEGES ON *.* TO aaa;
-- 撤销权限
REVOKE ALL PRIVILEGES ON *.* FROM aaa;
备份
- 保存重要数据,以免丢失
- 数据转移
方式:
- 拷贝物理文件
- 利用可视化工具手动导出
- 在命令行用 mysqldump 命令
# 命令行导出数据
# mysqldump -h主机名 -u用户名 -p密码 数据库名 表名 目标路径
mysqldump -hlocalhost -uroot -p123456 school student >D:/a.sql
# 命令行导入数据
# source 路径
source d:/a.sql # 登陆状态
# source -u用户名 -p密码 库名<路径
source -uroot -p123456 school<d:/a.sql # 未登录状态
四、三大范式
为什么需要数据规范化?
- 信息重复
- 更新异常
- 插入异常
- 删除异常
第一范式(1NF)
数据库的每一列都是不可再分的原子数据项
第二范式(2NF)
前提:满足第一范式
确保数据库的每一列和逐渐相关,而不能之和主键一部分相关。(每张表本质上只描述同一件事)
第三范式(3NF)
前提:满足第一范式和第二范式
确保数据库中每一列数据和主键直接相关,而不能间接相关。
规范性和性能问题
- 关联查询的表不能超过三张
- 可以故意增加一些冗余字段和计算列,以提高在高数据量的情况下查询的效率