基本使用类 自增属性AUTOINCREMENT为何未在表结构中显示 场景描述 创建表时,添加了自增属性AUTOINCREMENT,执行 show create table ,自增属性未在表结构中显示。 创建表: 执行show create table xxx ,未显示自增属性AUTOINCREMENT: 原因分析 经过排查,是因为参数“sqlmode”设置了NOFIELDOPTIONS属性。 sqlmode相关属性介绍: NOFIELDOPTIONS:不要在SHOW CREATE TABLE的输出中打印MySQL专用列选项。 NOKEYOPTIONS:不要在SHOW CREATE TABLE的输出中打印MySQL专用索引选项。 NOTABLEOPTIONS:不要在SHOW CREATE TABLE的输出中打印MySQL专用表选项(例如ENGINE)。 解决方案 将sqlmode的NOFIELDOPTIONS属性去掉即可。 空用户的危害 MySQL中是允许用户名为 '' 的用户存在,本章节介绍数据库中存在这种空用户时的危害。 MySQL中使用空用户时,它将可以匹配任何用户名。这一特性也会带来多种安全性、功能性危害。所以,在实际使用过程中应避免使用空用户。 安全性危害 当存在空用户时,连接时可以使用任意用户名进行登录。 如果空用户有密码,则使用任意用户名和空用户的密码即可登录数据库,并获得空用户所拥有的所有权限。示例: 没有空用户时,使用非法用户名‘abcd’,连接失败 mysql> select user,host from mysql.user; ++ user host ++ root % mysql.infoschema localhost mysql.session localhost mysql.sys localhost ++ mysql uabcd h127.0.0.1 P3306 pTest1234 mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 1045 (28000): Access denied for user 'abcd'@'localhost' (using password: YES)