基本语法

DDL

Data Definition Language 数据定义语言,用来定义数据库对象(数据库,表,字段)

DML

Data Manipulation Language 数据操作语言,用来对数据库表中的数据进行增删改

DQL

Data Query Language 数据查询语言,用来查询数据库中表的记录

DCL

Data Control Language 数据控制语言,用来创建数据库用户、控制数据库的访问权限

其他

通用建表语句

  1. CREATE TABLE `table_name` (
  2. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  3. `create_id` bigint(20) DEFAULT NULL COMMENT '创建人id',
  4. `update_id` bigint(20) DEFAULT NULL COMMENT '修改人id',
  5. `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  6. `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  7. `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除(1 表示已删除,0 表示未删除)',
  8. PRIMARY KEY (`id`)
  9. ) 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   表

生成假数据

http://filldb.info/

统计类SQL

  1. 准备测试数据 ``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(*)来统计行数