MySQL的存储过程的参数不能与操作的数据库表的字段相同,而且还是不区分大小写的。

本文介绍了MySQL中存储过程参数名称与表字段名相同时可能引发的问题,并通过实例演示了如何避免此类错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL的存储过程的参数不能与操作的数据库表的字段相同,而且还是不区分大小写的。否则可能会造成很严重的后果,比如执行删除操作,它能把整个表的记录全删了。

例如表STUDENT结构如下:

mysql> DESC STUDENT;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| ID    | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| NAME  | varchar(50)      | YES  |     | 0       |                |
| AGE   | int(10) unsigned | YES  |     | 0       |                |
+-------+------------------+------+-----+---------+----------------+
3 rows in set (0.03 sec)

当前表内容:

mysql> SELECT * FROM STUDENT;
+----+------+------+
| ID | NAME | AGE  |
+----+------+------+
|  1 | Jhon |   16 |
|  2 | Mike |   15 |
|  3 | Tom  |   17 |
|  4 | Jack |   18 |
|  5 | Jim  |   13 |
+----+------+------+
5 rows in set (0.01 sec)

存储过程procShow的功能是显示参数指定的学生记录:

DELIMITER $
CREATE PROCEDURE procShow(IN id INT(11) UNSIGNED)
BEGIN
SELECT * FROM STUDENT WHERE ID=id;
END$
DELIMITER ;

调用存储过程:

mysql> CALL procShow(1);
+----+------+------+
| ID | NAME | AGE  |
+----+------+------+
|  1 | Jhon |   16 |
|  2 | Mike |   15 |
|  3 | Tom  |   17 |
|  4 | Jack |   18 |
|  5 | Jim  |   13 |
+----+------+------+
5 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

结果显示全部学生记录了,而不是显示指定ID的学生记录。
下面改下存储过程的参数名:
DROP PROCEDURE procShow;
DELIMITER $
CREATE PROCEDURE procShow(IN stuid INT(11) UNSIGNED)
BEGIN
SELECT * FROM STUDENT WHERE ID=stuid;
END$
DELIMITER ;

调用:
mysql> call procShow(1);
+----+------+------+
| ID | NAME | AGE  |
+----+------+------+
|  1 | Jhon |   16 |
+----+------+------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

结果正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值