首页 新闻 赞助 找找看

MySQL的更新插入语句问题

0
悬赏园豆:10 [已解决问题] 解决于 2020-12-22 11:13

表如上,我不把ID作为唯一判断是否重复,因为我需要新增的时候会自动生成ID(一个ID生成器给的ID值,就不能拿它作为唯一键判断是否重复),我要拿STUDENT_ID作为唯一判断

IF EXISTS(SELECT * FROM `student` WHERE STUDENT_ID='20200001') THEN
BEGIN
	UPDATE `student` SET `ID`='1', `NAME`='王五', `STUDENT_ID`='20200001' WHERE `student_id`='20200001';
END;
ELSE
BEGIN
	INSERT INTO `student`(`ID`, `NAME`, `STUDENT_ID`) VALUES('1', '王五', '20200001');
END;
END IF;

以上是我自己写的但是有报错

IF EXISTS(SELECT * FROM `student` WHERE STUDENT_ID='20200001') THEN
BEGIN
	UPDATE `student` SET `ID`='1', `NAME`='王五', `STUDENT_ID`='20200001' WHERE `student_id`='20200001'
> 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS(SELECT * FROM `student` WHERE STUDENT_ID='20200001') THEN
BEGIN
	UPD' at line 1
> 时间: 0s

请问应该怎么写?

问题补充:

MySQL版本:8.0.21

实际上我需要做的操作是一个更新插入的功能,我需要选一列作为一个是否重复的依据来进行更新插入,ID是肯定在数据里面是没有的,我不可能拿ID作为依据来插入,我目前就只能想到这种方法进行更新插入了

养鼠的猫的主页 养鼠的猫 | 菜鸟二级 | 园豆:250
提问于:2020-11-21 15:13
< >
分享
最佳答案
1

mysql if else 格式是
IF EXISTS(SELECT * FROM student WHERE STUDENT_ID='20200001') THEN
UPDATE student SET ID='1', NAME='王五', STUDENT_ID='20200001' WHERE student_id='20200001';
ELSE
INSERT INTO student(ID, NAME, STUDENT_ID) VALUES('1', '王五', '20200001');
END IF;

收获园豆:10
geass.. | 小虾三级 |园豆:1821 | 2020-11-23 15:58

养鼠的猫 | 园豆:250 (菜鸟二级) | 2020-11-24 09:03

@养鼠的猫: 语句没问题的,if else 只能 在存储过程,函数这些里执行。不能单独执行

geass.. | 园豆:1821 (小虾三级) | 2020-11-25 09:00
其他回答(5)
0

参考这个试一下。

https://stackoverflow.com/questions/27627825/select-if-exists-then-else-on-mysql

 

小小高 | 园豆:1095 (小虾三级) | 2020-11-21 17:23

试过里面列举出的写法还是不行,是不是因为我mysql版本问题?

支持(0) 反对(0) 养鼠的猫 | 园豆:250 (菜鸟二级) | 2020-11-23 08:57
0

语法有问题,中间多了几个分号

   IF *** THEN
        BEGIN         
          
        END
    ELSE
        BEGIN
            
        END
    END IF;
E行者 | 园豆:1761 (小虾三级) | 2020-11-21 17:45
IF EXISTS(SELECT * FROM `student` WHERE STUDENT_ID='20200001') THEN
BEGIN
	UPDATE `student` SET `ID`='1', `NAME`='王五', `STUDENT_ID`='20200001' WHERE `student_id`='20200001'
END
ELSE
BEGIN
	INSERT INTO `student`(`ID`, `NAME`, `STUDENT_ID`) VALUES('1', '王五', '20200001')
END
END IF;

还是报错

IF EXISTS(SELECT * FROM `student` WHERE STUDENT_ID='20200001')
BEGIN
	UPDATE `student` SET `ID`='1', `NAME`='王五', `STUDENT_ID`='20200001' WHERE `student_id`='20200001'
END
ELSE
BEGIN
	INSERT INTO `student`(`ID`, `NAME`, `STUDENT_ID`) VALUES('1', '王五', '20200001')
END
END IF
> 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS(SELECT * FROM `student` WHERE STUDENT_ID='20200001')
BEGIN
	UPDATE `s' at line 1
> 时间: 0s
支持(0) 反对(0) 养鼠的猫 | 园豆:250 (菜鸟二级) | 2020-11-23 08:47

@养鼠的猫: 是我搞错了,update和insert语句后面需要加分号

	IF EXISTS(SELECT * FROM `student` WHERE STUDENT_ID='20200001') THEN
BEGIN
	UPDATE `student` SET `ID`='1', `NAME`='王五', `STUDENT_ID`='20200001' WHERE `student_id`='20200001';
END;
ELSE
BEGIN
	INSERT INTO `student`(`ID`, `NAME`, `STUDENT_ID`) VALUES('1', '王五', '20200001');
END;
END IF;
支持(0) 反对(0) E行者 | 园豆:1761 (小虾三级) | 2020-11-23 11:56

@E行者: 是不是因为我的版本问题,还是报错的

支持(0) 反对(0) 养鼠的猫 | 园豆:250 (菜鸟二级) | 2020-11-24 09:00

@养鼠的猫: 我用的是版本5.7

支持(0) 反对(0) E行者 | 园豆:1761 (小虾三级) | 2020-11-24 11:34
0

我觉得你搞错了,Id肯定是唯一的阿,为什么不能把Id作为判断是否重复的标准?如果这个Id是可重复的,那这个Id是起什么作用的?

会长 | 园豆:12401 (专家六级) | 2020-11-23 10:02

id是唯一的,但我要插入的数据没有id这个号,我其实实际上数据和操作要比这个简单的表复杂,但我只能是以这种简单的方法阐述我的问题。

支持(0) 反对(0) 养鼠的猫 | 园豆:250 (菜鸟二级) | 2020-11-24 08:54
0

先把STUDENT_ID设置为唯一索引。
INSERT INTO tableName(STUDENT_ID,NAME) VALUE("value1","value2") ON DUPLICATE KEY UPDATE STUDENT_ID="value1", NAME="value2"

我恰芙蓉王 | 园豆:190 (初学一级) | 2020-11-24 11:03

嗯嗯 我知道有这个方法的,但实际的表是很多字段的,到时候是用户选择以哪一列为唯一,那我不能用C#操作设置唯一列对数据库改来改去的

支持(0) 反对(0) 养鼠的猫 | 园豆:250 (菜鸟二级) | 2020-11-24 13:09
0

同学: mysql 扩展语法 replace 了解下。
https://dev.mysql.com/doc/refman/8.0/en/replace.html

jinzhenshui | 园豆:383 (菜鸟二级) | 2020-11-25 15:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册