MySQL
一 表规范
每一个表都必须存在以下五个字段
id 主键
version 版本(乐观锁)
is_delete 伪删除
gmt_create 创建时间
gmt_update 修改时间
二 数据库引擎InnoDB和MyISAM
MyISAM | InnoDB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大,约为2倍 |
MyISAM :节约空间,速度快
InnoDB :安全性高,支持事务,多表多用户操作
delete删除,重启数据库 :
InnoDB:自增列会从1开始(存在内存中,断电即使)
MyISAM:继续从上一个自增量开始(存在文件中)
三 查询
distinct关键字去重
select distinct ‘字段名’ from 表名 [where子句]
连表查询(join on)
三种连接比较
操作 | 描述 |
---|---|
Inner join | 如果表中至少有一个匹配,就返回行 |
left join | 以左表为准,会从左表中返回所有的值,即使在右表中没有匹配 |
right join | 以右表为准,会从右表中返回所有的值,即使在左表中没有匹配 |
子查询
语法
-- select 字段s from 表名1 where 字段1=(select 字段1 from 表名2 where 字段2 = '值')
select score from score where s_id = (select id from student where name='小明')
自连接
category表
select p.`name` '父栏目',s.`name` '子栏目'
from `category` s,`category` p
where s.`pid` = p.`id`
结果
注意点
一般id从2开始,将顶级分类的pid设为1
四 分页和排序
排序
-- select 字段 from 表名 order by 字段名(要根据这个排序) desc(降序)|asc(升序)
SELECT * from score
ORDER BY score ASC
分页