MySQL的存储过程的参数不能与操作的数据库表的字段相同,而且还是不区分大小写的。
2016-12-04 11:48
691 查看
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)
结果正确。
例如表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)
结果正确。
相关文章推荐
- mysql存储过程的参数名不能和表字段名一样,否则不执行条件
- 利用反射传输存储过程参数,在mssql和mysql两种数据库中存在的问题
- mysql存储过程,获取指定数据库的某个表的字段信息
- MySQL存储过程详解 mysql 存储过程mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored
- mysql存储过程repeat循环给多个表名相似的表添加相同字段
- 关于对MYSQL存储过程传递参数是纯数字还是字符串的判断
- 为表名不同但属性相同的多个表添加字段的mysql存储过程示例
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- MySql 数据库部分字段区分大小写
- MySQL第五天---存储过程、查询区分大小写、事务(MySQL及Java实现的简单模板)
- 项目问题-------传入存储过程中的参数的长度一定要和数据库表的字段长度保持一直
- 存储过程传入参数与表字段名相同时产生的问题
- 关于对MYSQL存储过程传递参数是纯数字还是字符串的判断
- MySQL存储过程跨数据库操作同步数据
- 【转】MYSQL 存储过程定时操作数据库
- SQL Server 的恢复系统存储过程操作似乎是区分大小写的
- MySql存储过程中limit不能动态参数问题的解决
- 程序中操作数据库的事物和存储过程中的事物不能并用
- mysql存储过程的参数名不要跟字段名一样 (血淋淋的代价)
- MSSQL根据数据库字段类型判断存储过程参数类型