基本语法
DDL
Data Definition Language 数据定义语言,用来定义数据库对象(数据库,表,字段)
DML
Data Manipulation Language 数据操作语言,用来对数据库表中的数据进行增删改
DQL
Data Query Language 数据查询语言,用来查询数据库中表的记录
DCL
Data Control Language 数据控制语言,用来创建数据库用户、控制数据库的访问权限
其他
通用建表语句
CREATE TABLE `table_name` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',`create_id` bigint(20) DEFAULT NULL COMMENT '创建人id',`update_id` bigint(20) DEFAULT NULL COMMENT '修改人id',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',`is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除(1 表示已删除,0 表示未删除)',PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通用数据表';
计算时间差
SELECT TIME_TO_SEC(SYSDATE()) - TIME_TO_SEC('2014-05-20 12:20:10')
#会得到两个时间相差的秒数
SELECT TO_DAYS(SYSDATE()) - TO_DAYS('2014-05-20 09:10:10')
#会得到两个时间相差的天数
select datediff(SYSDATE(), '2014-05-20 09:10:10')
#会得到两个时间相差的天数
使用示例:
查询处理时间与告警时间相差1分钟的记录数
select count(*) from iot_meter_alarm where TIME_TO_SEC(handling_time) - TIME_TO_SEC(alarm_time) < 60
使用MySQL求和
SELECT 列1+ 列2 + 列3 …… + 列N AS Total FROM 表
SELECT sum(列1+ 列2 + 列3 …… + 列N) AS Total FROM 表
生成假数据
统计类SQL
- 准备测试数据
``sql DROP TABLE IF EXISTSscores_tb; CREATE TABLEscores_tb(idint NOT NULL AUTO_INCREMENT,xuehaoint NOT NULL,scoreint NOT NULL, PRIMARY KEY (id`) ) ENGINE = InnoDB CHARACTER SET = utf8;
INSERT INTO scores_tb VALUES (1, 1001, 89);
INSERT INTO scores_tb VALUES (2, 1002, 99);
INSERT INTO scores_tb VALUES (3, 1003, 96);
INSERT INTO scores_tb VALUES (4, 1004, 96);
INSERT INTO scores_tb VALUES (5, 1005, 92);
INSERT INTO scores_tb VALUES (6, 1006, 90);
INSERT INTO scores_tb VALUES (7, 1007, 90);
INSERT INTO scores_tb VALUES (8, 1008, 94);
```
问题记录
- count(*)、count(1)、count(col) 的区别
count(*)和count(1)都会统计值为 NULL 的记录,效率一样,不存在性能差异count(列名)不会统计此列为 NULL 值的记录 阿里开发规范中推荐使用count(*)来统计行数
