【问题标题】:php mysql insert select multiple with where clausephp mysql insert select multiple with where子句
【发布时间】:2012-02-10 13:21:19
【问题描述】:

我有一个追随者

Table1 : userid, who, share, date  :: id is auto increment and primary key

我想建立一个查询来检查记录是否存在,如果为空则插入新记录。 如何在单个查询中构建它并使用单个查询插入多条记录

data to inser ('a1','a2','a3','a4'), ('b1','b2','b3','b4'), ('c1','c2','c3','c4'), .......

【问题讨论】:

  • 是否有任何唯一键?如果有冲突的记录怎么办?它应该被忽略吗?有这样的插入结构:insert ignore into <table> values(),(),();

标签: php mysql insert-select


【解决方案1】:
  1. 在您希望唯一的列上创建 UNIQUE 索引
  2. 使用INSERT IGNORE 插入唯一数据并忽略非唯一数据

【讨论】:

    【解决方案2】:

    您可以使用类似于 INSERT 的 REPLACE 语句,但如果该行已经存在,则它不会执行任何操作:

    REPLACE INTO table ...
    

    http://dev.mysql.com/doc/refman/5.0/en/replace.html

    【讨论】:

      【解决方案3】:

      你应该仔细看看mysql INSERT INTO documentation

      如何插入“不存在”很简单。假设您希望 user,who,share 的组合是唯一的并使用最新日期。更新您的表格并在这些字段上创建 UNIQUE KEY

      ALTER TABLE Table1 ADD UNIQUE KEY (user, who, share);
      

      通常插入相同的组合会导致错误,但使用INSERT IGNORE(上面的链接)会默默地忽略错误:

      INSERT IGNORE INTO Table1 (user,who,share,date) VALUES ( 1, 2, 3, NOW());
      

      您也可以在插入时force key to update

      INSERT IGNORE INTO Table1 (user,who,share,date) VALUES ( 1, 2, 3, NOW())
             ON DUPLICATE KEY UPDATE date = VALUES(date);
      

      并一次插入多个值,再次是第一个链接:

      INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
      

      【讨论】:

        猜你喜欢
        • 2021-02-15
        • 2011-04-06
        • 1970-01-01
        • 2013-05-01
        • 2021-10-19
        • 2010-11-16
        • 1970-01-01
        • 2021-07-02
        • 1970-01-01
        相关资源
        最近更新 更多