# This is mysql notes

# sql_mode设置的坑

在配置生产环境时,遇到后端代码报错,但是测试环境运行正常,我立刻猜想是否为数据库配置的问题,使用下面SQL,查询数据库模式

select @@sql_mode

查询出的结果为

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

果然,正式环境的mysql数据库,启用了ONLY_FULL_GROUP_BY

修改etc/my.cnf文件,在最后面添加

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

数据库版本若为8.0及以上,数据库重启会报错,去掉NO_AUTO_CREATE_USER字段即可

修改完配置文件后重启mysql即可

service mysqld restart

# 用户创建和授权

1.mysql创建用户命令

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

username:需创建的用户名
host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
password:指定该用户的登录密码

2.mysql授权

GRANT privileges ON databasename.tablename TO 'username'@'host'

privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL
databasename:数据库名
tablename: 数据库表名
username:用户名
host:同上