– 语法大全
SELECT – 从数据库中提取数据
UPDATE – 更新数据库中的数据
DELETE – 从数据库中删除数据
INSERT INTO – 向数据库中插入新数据
CREATE DATABASE – 创建新数据库
ALTER DATABASE – 修改数据库
CREATE TABLE – 创建新表
ALTER TABLE – 变更(改变)数据库表
DROP TABLE – 删除表
CREATE INDEX – 创建索引(搜索键)
DROP INDEX – 删除索引
GROUP BY – 分组
– 查看mysql innodb索引是否开启
SHOW VARIABLES LIKE ‘have_%’
– 自增列
PRIMARY KEY – int类型从一开始依次递增
– 唯一约束
UNIQUE
– 设置当前时间
TIMESTAMP类型设置当前时间
– 重命名表
ALTER TABLE 当前表名 RENAME 新表名;
– 修改列
ALTER TABLE 表名 CHANGE 列名 列新名称 新列数据类型;
– 删除列
ALTER TABLE 表名 DROP 需要删除的列名;
– 添加列默认值是0
ALTER TABLE 表名 ADD 列名 列数据类型 DEFAULT 0;
– 在id的后面新增列
ALTER TABLE 表名 ADD 列名 列数据类型 AFTER id;
#多表连查
– 创建a表
CREATE TABLE
a
(
id INT PRIMARY KEY AUTO_INCREMENT , – 主键自增
name
VARCHAR(20) NOT NULL – 姓名
)
– 创建b表
CREATE TABLE
b
(
id INT PRIMARY KEY AUTO_INCREMENT ,
job INT NOT NULL,
bid INT NOT NULL
)
– a表插入数据
INSERT INTO a VALUES(1,‘张三’),(2,‘李四’),(3,‘王五’);
– b表插入数据
INSERT INTO b VALUES(1,23,1),(2,34,2),(3,45,4);
– 内连接INNER JOIN
SELECT a.,b. FROM a INNER JOIN b ON a.id=b.bid;
– 左连接LEFT JOIN
SELECT a.,b. FROM a LEFT JOIN b ON a.id=b.bid;.
– 右连接RIGHT JOIN
SELECT a.,b. FROM a RIGHT JOIN b ON a.id=b.bid;
– 交叉连接CROSS JOIN
SELECT a.,b. FROM a CROSS JOIN b ON a.id=b.bid;
#函数
AVG ([ALL|DISTINCT]列名) 求指定数字字段的平均值
示例:
SELECT AVG(job) FROM b; – 查询b表中job字段的平均值
SUM ([ALL|DISTINCT]列名) 求指定数字字段的总和
示例:
SELECT SUM(job) FROM b; – 查询b表中job字段的总和
MAX([ALL|DISTINCT]列名) 求指定数字字段中最大值
示例:
SELECT MAX(job) FROM b; – 查询b表中job字段的最大值
MIN ([ALL|DISTINCT]列名) 求指定数字字段中最小值
示例:
SELECT MIN(job) FROM b; – 查询b表中job字段的最小值
COUNT(*) 求所有数据条数
示例:
SELECT COUNT(job) FROM b; – 查询b表中job字段的条数
CONCAT(‘编号:’,id)拼接(可多重拼接)
示例:
SELECT CONCAT(‘编号:’,id) FROM b; – 字符串拼接
DISTINCT(列名) 求所有不重复的数据
示例:
SELECT DISTINCT(job) FROM b; – 查询b表中job字段的条数
– 写的顺序
SELECT … FROM …
WHERE …
GROUP BY … HAVING …
ORDER BY …
LIMIT …
– 执行顺序
FROM …
WHERE …
GROUP BY …
SELECT …
HAVING …
ORDER BY …
LIMIT …
– SQL优化:
1.查询语句中不要使用*;
2.尽量减少子查询,使用关联查询(LEFT JOIN,RIGHT JOIN,INNER JOIN)代替;
3.减少使用 IN 或者 NOT IN ,使用 EXISTS,NOT EXISTS 或者关联查询语句代替;
4.对于多张大数据量(这里几百条就算大了)的表 JOIN,要先分页再 JOIN,否则逻辑度会很高,性能很差;
5.合理的增加冗余的字段(减少表的关联查询);
6.增加中间表进行优化(这个主要是在统计报表的场景,后台开定时任务将数据先统计好,尽量不要在查询的时候去统计);
7.建表的时候能使用数字类型的字段就使用数字类型(TYPE,STATUS …),数字类型的字段作为条件查询比字符串快。
这是因为引擎在处理查询和连接查询时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了;
8.哪些可以过滤掉最大数量记录的条件必须写在where字句的最末尾;
本人小白,本文为个人总结资料。
文章如有问题请大神指出,如有看不懂的地方可以评论私信交流。欢迎大家讨论交流。