1. MySQL的前置知识
- MySQL 采用的是不那么高效的
select+线程池
。原因是磁盘IO费时间。磁盘IO也在后续的问题中频繁出现。 - MySQL最早遇到性能瓶颈的是磁盘IO,所以在用数据库时尽量只让数据库做CRUD,在这之上的逻辑如“外键”交给客户端去做。
- 范式设计。一般而言满足到第三范式就OK了。每一列保持原子性;对于联合主键,属性完全依赖于主键;属性不依赖于其它非主属性。总结一下,和“高内聚低耦合”理念很像。
- 三大操作。定义(create/drop/alter);操纵(select/insert/delete/update);控制(grant/revoke)
2. 单表常用操作
2.1. 库操作
查询数据库
show databases;
创建数据库
create database ChatDB;
删除数据库
drop database ChatDB;
选择数据库
use ChatDB;
2.2. 表操作
查看表
show tables;
创建表
create table user(id int unsigned primary key not null auto_increment,
name varchar(50) not null,
age tinyint not null,
sex enum('M','W') not null)engine=INNODB default charset=utf8;
查看表结构
desc user;
查看建表sql
show create table user\G
删除表
drop table user;
3. CRUD操作
insert增加
insert into user(nickname, name, age, sex) values('fixbug', 'zhang san', 22,
'M');
insert into user(nickname, name, age, sex) values('666', 'li si', 21, 'W'),
('888', 'gao yang', 20, 'M');
下面的性能比上面的好。原因是命令行是发到的服务端,有三握四挥。(引入线程池)
update修改
update user set age=23 where name='zhang san';
update user set age=age+1 where id=3;
delete删除
delete from user where age=23;
delete from user where age between 20 and 22;
delete from user;
select查询
select * from user;
select id,nickname,name,age,sex from user;
select id,name from user;
select id,nickname,name,age,sex from user where sex='M' and age>=20 and age<=25;
select id,nickname,name,age,sex from user where sex='M' and age between 20 and
25;
select id,nickname,name,age,sex from user where sex='W' or age>=22;
id这样的写实,以后可能修改,减少代码维修成本。
去重distinct
select distinct name from user;
空值查询
is [not] null
select * from user where name is null;
union合并查询
UNION [ALL | DISTINCT] # 注意:union默认去重,不用修饰distinct,all表示显示所有重复值
SELECT country FROM Websites UNION ALL SELECT country FROM apps ORDER BY
country;
or可以被解析成union。有一种说法是or不能用索引,这种说法不严谨,两个union可以用索引。
带in子查询
[NOT] IN(元素1,元素2,...,元素3)
select * from user where id in(10, 20, 30, 40, 50)
select * from user where id not in(10, 20, 30, 40, 50)
select * from user where id in(select stu_id from grade where average>=60.0)
截止到这里就是我了解或者用过的MySQL了:joy:
还有一堆课没看。淦,加油:muscle: