库操作
- 查看库 ---------- show databases;
- 使用库 ---------- use 数据库名;
- 创建库 ---------- create database 数据库名 charset = utf-8;
- 删除库 ---------- drop database 数据库名;
表操作
- 查看表 ---------- show tables;
- 查看表结构 ---------- desc 表名;
- 查看表创建语句 ---------- show create table 表名;
- 创建表 ---------- create table 表名();
- 修改表 ---------- alert table 表名 add/change/modify/drop 表字段名(原名/新名) 类型及约束;
- 删除表 ---------- drop table 表名;
数据操作
-
查询数据
条件查询 ---------- select * from 表名 where 运算符 条件 ; -------- 运算符:= > < >= <= != and or not like % _ in between…and… is
排序查询 ---------- select * from 表名 where … order by 字段名 desc(降)/ asc(升,默认);
聚合函数 ---------- count(*)/max(*)/min(*)/sun(*)/avg(*)
分组查询 ---------- select * from 表名 by 字段名 having 条件 排序查询
分页查询 ---------- select * from 表名 limit 开始(不包含),数量 -------- 数据库id从1开始,limit 开始不包含
连接查询 ---------- select * from 表1 inner/left/right join 表2 条件查询; -------- as
自关联 ---------- select * from 表名 as A == inner join== 表名 as B on A.字段1 = B.字段2;
子查询 ---------- select * from 表1 where 字段1 运算符 (select 查询语句) -------- 即条件查询中存在select查询语句,可提高查询效率
注意:
on ---------- inner/left/right join 时,临时表未创建完成时的条件用词;
having ---------- 分组查询,在group by 之后使用的条件用词;
where ---------- 对常规表的条件用词;
综合模板
select distinct *
from 表名
where …
group by … having …
order by …
limit start,count -
增加数据 -------- insert into 表名 values(…);
-
更新数据 --------- update 表名 set 字段1=值1,字段2=值2,… where 条件;
-
删除数据 ---------- delete from 表名 where 条件;
表设计
- 第一范式 ---------- 原子性,字段不可再分 -------- 错误:info “张三”,“138xxx321”,18
- 第二范式 ---------- 必须有主键,其他字段必须完全依赖主键,不能有依赖外键的字段 -------- 错误:订单ID(主) 产品ID(外) 产品名称
- 第三范式 -------- 不能传递依赖,和第二范式意思差不多
- 少于500个表
- 每张表少于30个字段
- 主键数据类型要短,提高索引效率
- 尽量不用外键
表对应关系
- 一对一 ---------- 主表中有从表的id -------- 学生信息表(主)-- 学生信息详情表(从)
- 一对多 ---------- 从表中有主表的id -------- 班级表(主)-- 学生表(从)
- 多对多 ---------- 中间表关联 -------- 一个人有多张不同的优惠券,一个相同的优惠券很多人都有 – 中间表只有两个字段,每个字段的值都有重复
外键问题
优点:
- 保证数据一致性和完整性
- 在设计时可以增加ER图的可读性
- 表现业务逻辑
缺点:
- 高并发容易死锁
- 不用外键,在insert, update, delete 数据的时候更快
- 外键等于把数据的一致性事务实现,全部交给数据库服务器完成,增大压力
问题,请教大家?
order表中有gid,goods表中有gname,order表中gid不设置外键约束,使用以下语句关联查询
order表
- orderid 主键 自增
- gid 无外键约束
goods表
-
goodid 主键 自增
-
gname
SELECT gname FROM goods WHERE goodid IN (SELECT gid FROM `order`);
请问,若设置外键约束,查询语句会有什么不同?