一、基本命令
mysql -uroot -proot 连接数据库
show databases; 查看所有数据库
use test;切换表
show tables;查看数据库中所有的表
create database pkb;创建表
drop pkb;删除数据库
exit: 退出连接
show create database pkb 查看创建数据库的语句
show create table user 查看创建表的语句
desc table 显示表的结构
alter table user rename as user1 修改表名
alter table user add age INT(11) 增加表字段
alter table user MODIFY age VARCHAR(11) 修改字段类型
alter table user CHANGE age age1 INT(1) 字段重命名 修改字段类型
alter table user DROP age 删除表字段
DROP table IF exists user 删除表
TRUNCATE table user 清空表数据 自增归零
二、数据表类型
MYISAM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间大小 | 较小 | 较大(约为2倍) |
MYISAM 节省空间,速度较快 | ||
INNODB 安全性高,事务处理,多表多用户操作 |
三、DDL
2.1、去重distinct
2.2、joinOn
四、常用函数
4.1、常用函数
ceiling 向上取整
floor 向下取整
rand 返回0-1的随机数
char_length 字符串长度
concat("i","love","you") 字符串拼接
lower 转小写
upper 转大写
instr 返回字符串的长度
replace 替换出现的字符串
substr 字符串截取
---时间和日期函数(重点)--
current date 获取当前日期
curdate 获取当前日期
now 获取当前时间
localtime 本地时间
sysdate 系统时间
4.2、聚合函数
count 计数
sum 求和
avg 平均
max 最高
min 最低
五、事务
5.1、ACID原则
原子性:要么提交成功,要么提交失败
一致性:事务前后的数据完整性要保持一致
隔离性:多用户并发访问数据库,会为每个用户开启事务,事务之间操作得数据相互隔离,不会被干扰。
持久性:事务一旦提交不可逆,被持久化到数据库中
5.2、隔离级别
5.2.1、read uncommitted(读取未提交)
可以读取事务为提交的数据,会导致脏读。
5.2.2、read committed(读取提交)
一般数据库默认事务的隔离级别(mysql除外),
只读取已提交事务的数据。会导致不可重复读
(针对的是同一条数据,有新的commit的事务操作,导致查询结果不一样)。
5.2.3、Repeatable read(可重复读)
mysql的默认事务隔离级别,会有幻读现象
(针对的是一个范围的数据,有新的事务插入
或删除数据,导致查询结果或多或少)。
*mysql innodb引擎通过MVCC机制解决该问题。*
5.2.4、serialiable(可串行化)
最高隔离级别,强制事务排序,加入共享锁,导致锁竞争和超时现场,效率低。
5.3、MVCC
多版本控制: 指的是一种提高并发的技术。最早的数据库系统,只有读读之间可以并发,读写,写读,写写都要阻塞。引入多版本之后,只有写写之间相互阻塞,其他三种操作都可以并行,这样大幅度提高了InnoDB的并发度。
InnoDB 实现MVCC,是通过ReadView+ Undo Log 实现的,Undo Log 保存了历史快照,ReadView可见性规则帮助判断当前版本的数据是否可见。**在RC隔离级别下,每个快照读都会生成并获取最新的RedaView;而在RR隔离级别下,则是同一个事务中的第一个快照读才会创建ReadView,之后快照读取的都是同一个ReadView。*
5.3.1 当前读
select * from xx for update;update|insert|delete (排他锁)这些操作都是当前读,
就是读取最新的版本。读取时,其他并发事务不能修改当前记录。
5.3.2 快照读
不加锁的select操作为快照读。是基于提高并发性能的考虑。即MVCC。
六、索引
6.1、索引的分类
主键索引 (PRIMAR KEY):唯一标识,主键不可重复,只能有一个列作为主键
唯一索引(UNIQUE KEY):避免重复的列出现,唯一索可以重复
常规索引(KEY/INDEX): 普通索引(create INDEX 索引名 on 表(字段))
全文索引(FULLTEXT):
6.2、索引原则
索引不是越多越好
不要对经常变动数据加索引
小数据量表不需要索引
索引一般加在常用来查询的字段上
七、数据库设计(三大范式)
注:三大范式只做参考,具体表设计要
考虑实际业务需求、性能(关联查询表越多,查询效率越差)、成本等。
7.1、第一范式
要求数据库每一列都是不可分割的原子数据
(例如:一个列不同同时存省市县。要分开)
7.2、第二范式
前提:遵循第一范式
每张表只描述一件事情(例如:产品表要和订单表分开)
7.2、第三范式
前提:遵循第一、二范式
表中的每一列要与主键直接相关,而非间接相关
(例如:student表不能有teacher的信息字段)