Mysql MSQ can';t从选择的同一选项卡中删除-需要有关“删除触发器”中解决方法的帮助吗
我不想让触发器删除ID最低的行,如果它是重复出现的。重复出现的意思是数字和用户名在两行中是相同的 比如说 第1行:ID:1、Nr:1、UN:MVJ和 第2行:ID:2,Nr:1,UN:MVJ 这些都是重复出现的,但如果“Nr”或“UN”不同,它们就不会不同 但正如标题所解释的,MYSQL无法做到这一点,至少以我编写SQL语句的方式是如此。 我愿意用一种完全不同的方式来解决这个问题Mysql MSQ can';t从选择的同一选项卡中删除-需要有关“删除触发器”中解决方法的帮助吗,mysql,sql,triggers,delete-row,Mysql,Sql,Triggers,Delete Row,我不想让触发器删除ID最低的行,如果它是重复出现的。重复出现的意思是数字和用户名在两行中是相同的 比如说 第1行:ID:1、Nr:1、UN:MVJ和 第2行:ID:2,Nr:1,UN:MVJ 这些都是重复出现的,但如果“Nr”或“UN”不同,它们就不会不同 但正如标题所解释的,MYSQL无法做到这一点,至少以我编写SQL语句的方式是如此。 我愿意用一种完全不同的方式来解决这个问题 Drop trigger no_double_reservations; DELIMITER !!
Drop trigger no_double_reservations;
DELIMITER !!
CREATE TRIGGER no_double_reservations
AFTER INSERT ON tilmeldte
FOR EACH ROW BEGIN
IF(
SELECT COUNT(*)
FROM tilmeldte
WHERE (kursus_nr, username)
IN (
SELECT kursus_nr, username
FROM tilmeldte
GROUP BY kursus_nr, username
HAVING COUNT(*) = 2
) = 2
)
THEN
DELETE FROM tilmeldte
Where tilmeldingsid = (
Select MIN(`tilmeldingsid`)
FROM tilmeldte
WHERE (kursus_nr, username)
IN (
SELECT MIN(kursus_nr), username
FROM tilmeldte
GROUP BY kursus_nr, username
HAVING COUNT(*) = 2
)
);
END IF;
END!!
DELIMITER ;
我希望您能提供帮助。因为您没有给出任何表定义,下面是如何在MySQL中完成此操作的逻辑 创建使用用户名和kursus_id的存储过程 检查用户名是否已存在 如果是>删除并插入新id 如果否>只需插入新记录并将消息发送回即可 在代码中是这样的
CREATE PROCEDURE `SP_NEW_RESERVATION` (in iUsername varchar(50), in iKursus_id int)
BEGIN
DECLARE EXIT HANDLER for sqlexception
BEGIN
rollback;
SELECT 'False' as Result, 'Some error description or diagnose description from mysql' as `Description`;
END;
Start Transaction;
SET @mExists := (SELECT ID from tbl_yourTable where ((kursus_id = iKursus_id) and (username like iUsername)));
if (length(coalesce(@mExists,'')) <> 0) then
-- username does not exists so you can continue with insert a new reservation
insert into tbl_yourTable and continue here
-- send back message
SELECT 'True' as Result, 'New record inserted') as `Description`;
ELSE
-- username exists already and the id would be saved in mExists so delete the id and continue with your insert_method
Delete from Tbl_yourtable where id = @mExists something ligke that;
insert into tbl_yourtable .....
-- you can send back a message like
SELECT 'True' as Result, concat('Old record(', @mExists, ') Deleted and new record inserted') as `Description`;
end if;
Commit;
END
如果用户名“KrishKm”已存在,您将收到类似以下内容的消息:
True,删除旧记录(10)并插入新记录
如果没有,您将收到回复信息:
True, New record inserted.
如果出现任何问题,您将收到以下信息:
False, 'Some error description or diagnose description from mysql'
祝你好运。你为什么不主动一点,从一开始就防止重复预订呢?插入前进行检查,并拒绝保存已存在错误消息的数据?此问题可能重复?这不是您以前问过的问题吗?@BerndLinde不是重复,他正在询问另一种方法,因为他知道自上一个问题以来该方法不起作用。@krishKM不确定如何在SQL中执行此操作。问题是,我必须在我的学校项目中触发一个触发点,所以整个无双重保留的处理必须在SQL中进行。Purhabs实际的错误消息可能在JAVA中。
False, 'Some error description or diagnose description from mysql'