MySQL使用命令行窗口创建存储过程报错ERROR 1064 (42000)原因及解决方案

本文详细介绍了在MySQL中创建存储过程的方法,特别是针对在命令行界面创建存储过程时遇到的语法错误问题,并提供了具体的解决步骤。

MySQL在创建存储过程的时候,如创建productpricing存储过程,如果使用的是Navicat等程序创建,代码是

CREATE PROCEDURE productpricing()

BEGIN

         selectavg(prod_price) as priceaverage

         fromproducts;

END;

 

但是,如果是在命令行界面,上述语句在from products;输入之后会报错

 

ERROR 1064 (42000): You have an error inyour SQL syntax; check the manual that

corresponds to your MySQL server versionfor the right syntax to use near '' at

line 4

 

原因在于,默认的MySQL语句分隔符为' ; ',在输入' ; '的时候,“以为”语句已经结束了,但实际上语句还没有结束。

解决方案:使用DELIMITER临时改变命令行的语句分隔符,在存储过程创建之后再修改分隔符为原来的" ;

mysql> DELIMITER //

mysql> CREATE PROCEDURE productpricing()

   -> BEGIN

   ->  select avg(prod_price) aspriceaverage

   ->  from products;

-> END//
mysql> DELIMITER ;


 

运行正常

Query OK, 0 rows affected (0.08 sec)


<think>我们正在解决MySQL登录时报错1045且忘记root密码的问题。下面将提供详细的解决步骤。 关键点:需要跳过权限验证重置root密码。 步骤: 1. 停止MySQL服务 2. 以跳过权限表的方式启动MySQL 3. 登录MySQL并修改root密码 4. 重启MySQL服务 详细步骤: ### 1. 停止MySQL服务 以管理员身份运行命令提示符(CMD)或PowerShell,执行: ```shell net stop mysql ``` 如果服务名不是mysql,请使用实际的服务名(如MySQL80、MySQL57等)。可以通过以下命令查看服务名: ```shell sc query type= service state= all | findstr /i "mysql" ``` ### 2. 以跳过权限表的方式启动MySQL 执行以下命令(注意:此操作会跳过权限验证,存在安全风险,操作完成后务必恢复): ```shell mysqld --console --skip-grant-tables --shared-memory ``` 此时MySQL服务器会以跳过权限表的方式启动,并保持在前台运行(不要关闭这个窗口)。 ### 3. 新开一个管理员命令提示窗口,连接到MySQL 由于跳过了权限表,现在可以不输入密码登录: ```shell mysql -u root ``` 进入MySQL命令行后,执行以下SQL语句重置root密码(以MySQL 5.7及以上版本为例,因为user表结构变化): ```sql -- 先刷新权限 FLUSH PRIVILEGES; -- 更新root用户的密码(注意:MySQL 5.7以上版本,密码存储在authentication_string字段) -- 假设我们要设置的新密码为'new_password',这里使用明文密码不安全,推荐使用PASSWORD函数加密,但MySQL 8.0后移除了PASSWORD函数,所以需要不同的处理。 -- 根据版本选择: -- MySQL 5.7: UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User='root' AND Host='localhost'; -- MySQL 8.0+: ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; ``` 注意:如果执行UPDATE语句,执行后需要刷新权限: ```sql FLUSH PRIVILEGES; ``` 如果使用UPDATE语句修改密码后,仍然无法登录,可能是因为MySQL 8.0使用了新的身份验证插件。在MySQL 8.0中,建议使用ALTER USER命令重置密码。 ### 4. 重启MySQL服务 关闭跳过权限表的MySQL服务窗口(按Ctrl+C),然后重新启动MySQL服务: ```shell net start mysql ``` 现在尝试用新密码登录: ```shell mysql -u root -p ``` 如果仍然遇到问题,可以参考以下额外步骤: ### 额外步骤:重置root密码的其他方法 如果在跳过权限表后执行UPDATE或ALTER USER失败,可以尝试以下步骤: 1. 在跳过权限表启动MySQL后,登录MySQL,然后删除root用户并重建(谨慎操作): ```sql FLUSH PRIVILEGES; DROP USER 'root'@'localhost'; CREATE USER 'root'@'localhost' IDENTIFIED BY 'new_password'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES; ``` 2. 如果使用MySQL 8.0,且忘记密码时,可以使用以下命令重置: ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'; ``` 注意:以上操作均在无密码登录的情况下执行。 ### 常见问题 - **执行`net stop mysql`提示服务名无效**:请确认MySQL服务的实际名称,可以在服务管理器中查看,或使用`sc query`命令查找。 - **跳过权限表启动后,无法连接**:确保启动命令正确,且没有其他MySQL实例在运行。 - **修改密码后仍然无法登录**:检查密码是否包含特殊字符,可能需要用引号括起来。同时确认MySQL版本,使用正确的密码修改命令。 参考引用: [^1]: 1045错误通常是由于密码错误或权限问题导致。 [^2]: 在跳过权限表修改密码后,需要重启MySQL服务以正常模式运行。 [^3]: 重置密码的SQL语句在不同MySQL版本中有所不同。 如果问题仍未解决,建议查看MySQL错误日志以获取更多信息。 ### 相关问题 1. 如何查看MySQL服务的名称? 2. MySQL 8.0与5.7在密码管理上有哪些区别? 3. 跳过权限表启动MySQL的安全风险有哪些? 4. 如何避免忘记MySQL root密码? 5. 修改MySQL密码时有哪些需要注意的事项? </think>以下是解决 MySQL 连接报错 ERROR 1045 且忘记 root 密码的完整步骤,适用于 Windows 系统: ### 🔒 密码重置流程(无需旧密码) #### 第一步:停止 MySQL 服务 ```powershell # 管理员身份运行 PowerShell net stop MySQL80 # 服务名可能为 MySQL57/MySQL80 ``` #### 第二步:创建初始化文件 1. 新建文本文件 `C:\mysql-init.txt`,添加以下内容: ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; FLUSH PRIVILEGES; ``` #### 第三步:跳过权限启动 ```powershell # 注意路径需替换为你的 MySQL 安装路径 cd "C:\Program Files\MySQL\MySQL Server 8.0\bin" .\mysqld.exe --init-file=C:\\mysql-init.txt --console --skip-grant-tables ``` > 💡 此过程会重置密码并显示实时日志[^2] #### 第四步:重启服务 1. 按 `Ctrl+C` 停止进程 2. 正常启动服务: ```powershell net start MySQL80 ``` ### 🔄 验证新密码 ```powershell mysql -u root -p # 输入新密码 ``` ```sql mysql> SHOW DATABASES; -- 确认能正常访问 ``` ### ⚠️ 常见问题解决 1. **服务名错误** ```powershell Get-Service -Name *mysql* # 查询正确服务名 ``` 2. **端口冲突** 检查 `my.ini` 配置文件(默认在 `C:\ProgramData\MySQL`): ```ini [mysqld] port=3306 # 确保未被占用 ``` 3. **密码策略问题**(MySQL 8.0+) ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY 'SimplePwd123' PASSWORD EXPIRE NEVER; ``` ### 📝 关键要点 | 操作环节 | 注意事项 | |----------|----------| | **服务停止** | 必须管理员权限执行 `net stop` [^2] | | **密码文件** | 路径使用双反斜杠 `C:\\` 格式 | | **密码强度** | MySQL 8.0 默认需包含大小写+数字+符号 | | **日志诊断** | 启动时添加 `--console` 查看错误细节 | ### 🔍 深度处理(极端情况) 若上述失效,尝试直接修改权限表: ```sql UPDATE mysql.user SET authentication_string = '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' -- 对应密码'abc123' WHERE user='root'; ``` > ⚠️ 执行后需重启服务并立即运行 `FLUSH PRIVILEGES;`[^3] --- ### ❓ 相关问题 1. 如何检查 MySQL 服务的准确名称? 2. 修改 `my.ini` 配置文件有哪些注意事项? 3. MySQL 8.0 的密码策略有哪些强制要求? 4. 跳过权限启动模式的安全风险如何规避? 5. 如何通过错误日志诊断 MySQL 连接问题? > 引用验证: > [^1]: 1045错误核心是身份验证失败 > [^2]: 服务重启是密码重置的关键环节 > [^3]: 直接修改权限表是终极解决方案
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值