MySQL学习总结
前言
最近在学MySQL,现在写一下笔记,留作参考。
正文
常用
-
展示全部数据库
show databases; -
选择数据库
use db1; -
展示当前数据库下所有表单
show tables; -
展示建表指令
SHOW CREATE TABLE t; -
展示表单详情
desc t; -
日期和时间
-
DATETIME
8字节,日期范围"1000-01-01 00:00:00"到"9999-12-31 23:59:59" -
DATE
3字节,日期范围"1000-01-01"到"9999-12-31" -
TIMESTAMP
4字节,日期范围为"1970-01-01 00:00:00"UTC到"2038-01-19 03:14"07"UTC。 -
YEAR
1字节,对于YEAR(4),日期范围为"1901-2155";对于YEAR(2)日期范围为"1970-2070",其中"00-69"表示"2000-2069" -
TIME
3字节,显示的范围为"-838:59:59"~"838:59:59"
函数
-
HEX(x) 将x转成十六进制
select HEX(123) #7b
select HEX("123") #313233(0x313233) -
获取当前时间
NOW()和CURRTENT_TIMESTAMP()都是表示当前SQL指令执行时的时间; SYSDATE()表示系统当前时间
select NOW(), CURRENT_TIMESTAMP(), SYSDATE();
select SLEEP(3), NOW(), CURRENT_TIMESTAMP(), SYSDATE(); -
睡眠
select SLEEP(3); # 睡眠3s -
时间加
DATE_ADD(date, INTERVAL expr unit
select DATE_ADD(now(), INTERVAL 1 DAY); #明天
select DATE_ADD(now(), INTERVAL -1 DAY); #昨天
其中,unit可为 YEAR/MONTH/DAY/HOUR/MINUTE/SECOND/MICROSECOND -
时间减
select DATE_SUB(date, INTERVAL expr unit);
select DATE_SUB(now(), INTERVAL 1 DAY); -
最大值
找出id号最大的一行数据
select * from tst where id=(select max(id) from tst); -
统计匹配指定条件的行数
select count(*) from tst; #返回表tst记录的行数
select count(1) as a from tst where aaa='123';
问题总结
- 查询报错"sql_mode=ONLY_FULL_GROUP_BY"
这个好像是mysql 5.7常出现的问题
(1). 执行
SELECT @@GLOBAL.sql_mode;
数据库会返回一个@@GLOBAL.sql_mode列表,其中会有ONLY_FULL_GROUP_BY,复制这个列表。
(我的是:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION)
(2). 修改mysql配置文件
在 /etc/my.conf 中寻找 sql_mode= 这个配置。
如果有,可以把ONLY_FULL_GROUP_BY去掉;
如果没有,在[mysqld]下添加一行,这一行是(1)中查到的字段去掉ONLY_FULL_GROUP_BY,比如:
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
(3). 重启 mysqld 服务
service mysqld restart
查看 mysqld 服务状态
service mysqld status
(4). 查看 mysql 最大连接数
show variables like "%max_connections%";
修改最大连接数:
临时: set global max_connections = 1000;
长久:修改 my.cnf: max_connections=1000
参考:mysql数据库最大链接_MySQL 查看最大连接数和修改最大连接数