mysql 改错user表无法登录

不小心把user表host从%改成#了,无法登录,单机也无法登录。
解决办法
开一个cmd窗口
mysqld --console --skip-grant-tables --shared-memory
再开一个cmd窗口
mysql -uroot -p
两下回车OK

参考来源
https://blog.csdn.net/weixin_56328832/article/details/129369466
参考来源
https://blog.csdn.net/q283614346/article/details/90732968#:~:text=Mysql%208.X%E7%9A%84%E6%96%B9%E6%B3%95%E6%98%AF%E5%9C%A8%E5%91%BD%E4%BB%A4%E8%A1%8C%E4%B8%AD%E4%BD%BF%E7%94%A8%20mysqld%20–console%20–skip-grant-tables%20–shared-memory%20%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%84%B6%E5%90%8Eroot%E5%B0%B1%E5%8F%AF%E4%BB%A5%E5%85%8D%E5%AF%86%E7%99%BB%E5%BD%95%E4%BA%86%EF%BC%88%E9%9C%80%E8%A6%81%E5%BC%802%E4%B8%AACMD%E7%AA%97%E5%8F%A3%EF%BC%89%E3%80%82%20%E8%AF%A5%E7%AA%97%E5%8F%A3%E4%BD%BF%E7%94%A8,–skip-grant-tables%20–shared-memory%20%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%20%E8%AF%A5%E7%AA%97%E5%8F%A3%E4%BD%BF%E7%94%A8%20mysql%20-uroot%20-p%20%E5%9B%9E%E8%BD%A6%E7%99%BB%E5%BD%95%E5%8D%B3%E5%8F%AF

<think>好的,我现在需要帮用户检查并修正他们提供的SQL语句。首先,我得仔细阅读用户的问题和他们提供的SQL代码,确保理解每个细节。用户给出的SQL是创建`sys_user`的语句,他们希望找出其中的错误并得到正确的版本。 首先,我会回顾用户之前提供的参考引用,特别是引用[2]中的示例,那里有一个类似的用户结构,并且可能包含一些常见的错误模式。例如,在引用[2]中,用户遇到了创建失败的问题,可能与字段定义或语法有关。 接下来,我会逐行检查用户提供的SQL语句,寻找可能的错误点。第一个要注意的是字段的数据类型和默认值是否正确。例如,`DEFAULT 'NULL'`在这里看起来有问题,因为通常默认值应该是NULL关键字,而是字符串'NULL'。在引用[1]中,其他的字段如`address`使用的是`DEFAULT NULL`,所以这里可能是一个错误。 然后,检查主键定义部分。用户使用了`PRIMARY KEY (`user_id`) USING BTREE`,但根据引用[2]中的正确示例,主键定义需要指定`USING BTREE`,因为InnoDB默认使用的是B树索引,所以这里可能存在冗余的语法。 接下来,查看字符集和排序规则。用户指定的是`CHARSET=utf8`,但引用[2]中使用了`utf8mb4`,并且推荐使用`COLLATE`来指定排序规则。考虑到MySQL的utf8是旧版,utf8mb4支持更全面的字符,尤其是情符号,所以建议将字符集为utf8mb4,并添加相应的排序规则。 另外,检查是否有字段定义的语法错误,例如是否每个字段后面都有正确的逗号分隔,最后一个字段后面应该有逗号。用户提供的SQL在`PRIMARY KEY`前没有多余的逗号,这点是正确的。 还需要确认AUTO_INCREMENT的使用是否正确。用户将`user_id`设置为BIGINT(20)并自增,这在引用[2]的示例中是合理的,没有问题。 此外,用户可能忽略了COLLATE子句,这在引用[2]的正确示例中是存在的,例如`COLLATE utf8mb4_general_ci`,所以修正后的SQL应该包括这一点。 最后,检查引擎和行格式是否正确。用户使用的是`ENGINE=INNODB`,正确写法是`InnoDB`,首字母大写。`ROW_FORMAT=DYNAMIC`是正确的,但需要确认是否与MySQL版本兼容,但通常会有问题。 总结所有可能的错误点后,生成修正后的SQL语句,并逐一说明每个修正的原因,确保用户理解每个动的重要性,并能够应用到其他类似的场景中。同时,根据用户之前的问题,生成相关问题,帮助他们进一步学习和解决可能遇到的类似问题。</think>### SQL语句错误分析与修正 #### 错误诊断 1. **DEFAULT 'NULL'语法错误** - ❌ `DEFAULT 'NULL'`(单引号包裹NULL) - ✅ `DEFAULT NULL` 引用说明:默认值`NULL`是关键字,需要单引号包裹[^2]。 2. **字符集兼容性问题** - ❌ `CHARSET=utf8` - ✅ `CHARSET=utf8mb4` 引用说明:`utf8mb4`支持完整的Unicode字符集(如emoji),推荐替代`utf8`[^2]。 3. **主键索引冗余声明** - ❌ `PRIMARY KEY (`user_id`) USING BTREE` - ✅ `PRIMARY KEY (`user_id`)` 引用说明:InnoDB引擎默认使用B+树索引,无需显式声明`USING BTREE`[^1][^2]。 4. **缺少COLLATE定义** - ❌ `DEFAULT CHARSET=utf8` - ✅ `DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci` 引用说明:完整的字符集定义应包含`COLLATE`子句[^2]。 5. **字段注释单引号统一** - ❌ `DEFAULT '0' COMMENT '帐号状态(0正常 1停用)'` - ✅ `DEFAULT '0' COMMENT '帐号状态(0正常 1停用)'`(无实际错误,但建议保持注释符号统一) #### 修正后完整SQL ```sql CREATE TABLE `sys_user` ( `user_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID', `user_name` VARCHAR(64) NOT NULL DEFAULT NULL COMMENT '用户名', `nick_name` VARCHAR(30) NOT NULL COMMENT '用户昵称', `password` VARCHAR(100) DEFAULT '' COMMENT '密码', `phonenumber` VARCHAR(11) DEFAULT '' COMMENT '手机号码', `sex` CHAR(1) DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)', `status` CHAR(1) DEFAULT '0' COMMENT '帐号状态(0正常 1停用)', PRIMARY KEY (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='用户信息'; ``` --- ### 相关问题 1. **如何为现有添加索引?** ```sql ALTER TABLE `sys_user` ADD INDEX idx_user_name (`user_name`); ``` 2. **AUTO_INCREMENT字段的起始值如何设置?** ```sql ALTER TABLE `sys_user` AUTO_INCREMENT=1000; ``` 3. **CHAR和VARCHAR类型的选择依据是什么?** - `CHAR`适合定长数据(如性别字段),`VARCHAR`适合变长数据(如用户名)[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值