mysql存储过程中,delete语句未根据where条件进行筛选,求救了。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql存储过程中,delete语句未根据where条件进行筛选,求救了。相关的知识,希望对你有一定的参考价值。

每次执行时,product_view 这个表里的数据都会被全部清空。
请问这是为什么?还是我没写对?
求解决啦。
CREATE PROCEDURE `product_view_sp`(IN product_id BIGINT)
BEGIN
set @product_id=product_id;

DELETE FROM product_view where `product_id`=@product_id;

INSERT into product_view(`product_id`,
`product_key`,
`product_value`,
`key_name`,
`keyword`,
`category_id`,
`category_name`,
`display`,
`search`,
`serial_number`,
`field_type`,
`default`,
`do_group`,
`cid`) select product.product_id,
product_extend.product_key,
product_extend.product_value,
product_mould.another_name,
product_mould.keyword,
product.category_id,
pcategory.category_name,
product_mould.dispaly,
product_mould.search,
product_mould.serial_number,
product_mould.field_type,
product_mould.defalut,
product_mould.do_group,
pcategory.cid
from product,product_extend,product_mould,pcategory
WHERE product.product_id=product_extend.product_id
and product_mould.id=product_extend.product_key
and product.category_id=pcategory.category_id
and product_mould.isdel=0
and product.product_id=@product_id
ORDER BY product.product_id,product_mould.serial_number;
END
已解决。

删除:set @product_id=product_id;
输入参数改成pid,其它对应的地方都改了,就可以了。具体原因不明,工作太忙,不深究了

in 参数product_id 跟字段product_id 名字可以定义为不一样的试试~ 参考技术A 如果参数名和表的字段名相同的话,系统就不认为那是参数了,造成查询条件变成 字段名=字段名,这个在sql里面跟where 1=1没什么区别。所以改成不同于任何字段名字的参数名称就不会有问题了,pid就不会和任何字段名重复,就没问题了

mysql存储过程

【中文标题】mysql存储过程【英文标题】:mysql stored procedure 【发布时间】:2011-07-01 00:55:09 【问题描述】:

我需要在存储过程中回显一条语句

分隔符 $$ 如果存在 `Edit_table` 则删除过程 $$ 创建过程`Edit_table` (in_db_nm varchar(20),in_tbl_nm varchar(20),in_your_query varchar(200)) 确定性开始 select concat('表',in_tbl_nm, '未找到'); 结束 $$ 分隔符;

这是我在运行它时从控制台得到的,它似乎总是打印第一行,因为那是表列名,有没有办法删除它?

concat('表',in_tbl_nm, '未找到') 未找到表 xxxxx

【问题讨论】:

【参考方案1】:

分隔符 $$

如果存在则删除过程Edit_table $$ 创建过程Edit_table (in_db_nm varchar(20),in_tbl_nm

varchar(20),in_your_query varchar(200))确定性开始

select concat('Table ',in_tbl_nm, 'not found') as DisplayData;

结束$$ 分隔符;

这会将标题更改为“DisplayData”

您也可以使用 --skip-column-names 选项启动 MySQL 以隐藏列名

【讨论】:

以上是关于mysql存储过程中,delete语句未根据where条件进行筛选,求救了。的主要内容,如果未能解决你的问题,请参考以下文章

Mysql数据库的触发器存储引擎和存储过程

MySQL笔记触发器,存储过程和函数

C# 解析 SQL 语句以查找存储过程中使用的所有 INSERT/UPDATE/DELETE 表

触发器,函数,视图,存储过程

简述触发器函数视图存储过程?

DELETE WHERE NOT EXISTS 未正确应用