Mysql MSQ can';t从选择的同一选项卡中删除-需要有关“删除触发器”中解决方法的帮助吗

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 !!

我不想让触发器删除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 !!
    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'