mysql - 如何使用mysql在同一存储过程中使用插入和更新查询?

标签 mysql stored-procedures

在我的项目中,我使用存储过程。在这里我已经编写了用于插入数据的查询。也就是说,

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_studentdetails`(
in inputStream mediumblob,
in salutation varchar(50),
in fname varchar(50),
in mname varchar(50),
in lname varchar(50),
in dob varchar(50),
in gender varchar(50),
in identify varchar(50),
in nationality varchar(50),
in blood varchar(50),
in physical varchar(50),
in health varchar(50),
in nationalid varchar(50),
in mtongue varchar(50)
)
BEGIN
INSERT INTO 
tbl_student_details(studentpic,salutation,fname,mname,lname,
dob,gender,identify,nationality,blood,physical,health,nationalid,mtongue)
values (inputStream,salutation,fname,mname,lname,
dob,gender,identify,nationality,blood,physical,health,nationalid,mtongue);
END

在这里,我想为同一张表再添加一个更新查询。我不知道该怎么办。

最佳答案

你可以使用

INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;

参见https://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html

当然你必须为你的程序构建它

在你的情况下,这应该看起来像

INSERT INTO 
    tbl_student_details
        (
          studentpic,salutation,fname,mname,lname,
          dob,gender,identify,nationality,blood,physical,
          health,nationalid,mtongue
        )
    values 
        (
          inputStream,salutation,fname,mname,lname,
          dob,gender,identify,nationality,blood,physical,
          health,nationalid,mtongue
        )
ON DUPLICATE KEY UPDATE
        (
          studentpic=inputStream,salutation=salutation,fname=fname,....
          -- go with rest of your variables...
          -- you should consider to use diffrent name or quote them right
        );

在这里,您需要数据库中一些唯一的列来导致重复的效果。您可以添加一个 ID 列作为您的创建的主键。

编辑:根据您的评论

这仍然是您所做的同一件事...您将更新现有数据,包括该行的新数据,或者仅在可以分离它时更新新数据。

例如

insert into tbl(a,b,c) values ('aaa','bbb','ccc') 
ON DUPLICATE KEY UPDATE b='bbb', c='ccc', d='ddd', e='eee', f='fff';

关于mysql - 如何使用mysql在同一存储过程中使用插入和更新查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44965859/

相关文章:

php - 如何从php返回数据到eclipse?

mysql - 检查游标是否返回任何东西

mysql - PDOStatement::execute(): SQLSTATE[42S22]: 未找到列: 'field list' 中的 1054 未知列

sql - sp_MSforeachtable 在每个表上执行过程

用于执行多个准备好的查询更新的 PHP 代码在第二次迭代时失败并出现重复键错误

mysql - 如何在 SQL 查询中获取唯一数据?

javascript - 使用日历库 codeigniter : Issue with Previous Button 显示 3 个月的日历,并在顶部显示上一个和下一个箭头

sql - 通用选择不适用于位类型

mysql - 触发以更新行信息

mysql - SQL统计变量并写入另一个表