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

时间:2010-05-05 01:14:26

标签: mysql

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

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

  

INSERT INTO table1(主机,路径)VALUES('youtube.com','/ watch')如果不是
   EXISTS(SELECT * FROM table1 WHERE host ='youtube.com'AND path ='/ watch'LIMIT 1);

有点像这样:

  

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

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

3 个答案:

答案 0 :(得分:1)

您可以在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;

答案 1 :(得分:0)

你可以用INSERT INTO SELECT来实现这一目标。我相信。

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

免责声明:未经测试。

答案 2 :(得分:0)

这是我提出的解决方案:

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