首页 文章

MySQL:如果table1中的行存在,则在table2上插入行

提问于
浏览
1

我正在尝试设置一个MySQL查询,如果table1中的一行已经存在,将在table2中插入一行,否则它只会将行插入table1 .

我需要找到一种方法来调整以下查询,使用现有行的id将行插入table2 .

INSERT INTO表1(主机,路径)VALUES( 'youtube.com', '/ Watch ')IF NOT EXISTS(SELECT * FROM表1 WHERE主机= 'youtube.com' AND路径= '/ Watch ' LIMIT 1);

有点像这样:

INSERT ...如果不是EXISTS(..)ELSE INSERT INTO table2(table1_id)VALUES(row.id);

除了我不知道这个的语法 .

3 回答

  • 0

    您可以在table1上使用触发器,唯一键或主键,以及INSERT IGNORE .

    如果在table1中插入已存在的值,INSERT IGNORE将不会返回重复键错误 . 触发器将仅检查table1中是否已存在该值并将其插入table2 . 如果需要,还可以在table2上添加唯一键,并在触发器中使用INSERT IGNORE .

    天啊!

    CREATE TABLE `table1` (
      `id` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ;
    
    CREATE TABLE `table2` (
      `id` int(11) DEFAULT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    
    DELIMITER $$
    CREATE
        DEFINER = CURRENT_USER
        TRIGGER `table1_insert` BEFORE INSERT
        ON table1
        FOR EACH ROW BEGIN
        if exists (select * from table1 where id = new.id) then
            insert into table2 (id) values (new.id);
        end if;
        END$$
    DELIMITER ;
    
    insert ignore into table1(id) values(1);
    select * from table1;
    select * from table2;
    
  • 0

    你可以用_1365279实现这个目标 . 我相信 .

    INSERT INTO
        table1 (host, path)
    SELECT
        table2.host, table2.path
    FROM
        table2
    WHERE
        table2.host='youtube.com' AND path='/watch'
    LIMIT 1;
    

    免责声明:未经测试 .

  • 1

    这是我提出的解决方案:

    CREATE TRIGGER onUpdate BEFORE UPDATE ON table1 FOR EACH ROW INSERT INTO table2 SET t1_row = OLD.id
    

相关问题