标签: on-duplicate-key

On Duplicate Key Update与insert相同

我已经四处搜索,但没有找到是否可能.

我有这个MySQL查询:

INSERT INTO table (id,a,b,c,d,e,f,g) VALUES (1,2,3,4,5,6,7,8)
Run Code Online (Sandbox Code Playgroud)

字段ID具有"唯一索引",因此不能有两个.现在,如果数据库中已存在相同的ID,我想更新它.但是我真的必须再次指定所有这些字段,例如:

INSERT INTO table (id,a,b,c,d,e,f,g) VALUES (1,2,3,4,5,6,7,8) 
ON DUPLICATE KEY UPDATE a=2,b=3,c=4,d=5,e=6,f=7,g=8
Run Code Online (Sandbox Code Playgroud)

要么:

INSERT INTO table (id,a,b,c,d,e,f,g) VALUES (1,2,3,4,5,6,7,8) 
ON DUPLICATE KEY UPDATE a=VALUES(a),b=VALUES(b),c=VALUES(c),d=VALUES(d),e=VALUES(e),f=VALUES(f),g=VALUES(g)
Run Code Online (Sandbox Code Playgroud)

我已经在插入中指定了所有内容......

一个额外的说明,我想使用工作来获取ID!

id=LAST_INSERT_ID(id)
Run Code Online (Sandbox Code Playgroud)

我希望有人能告诉我最有效的方法是什么.

mysql on-duplicate-key

147
推荐指数
7
解决办法
24万
查看次数

有没有办法使用ON DUPLICATE KEY更新我要插入的所有内容?

我知道ON DUPLICATE KEY UPDATE如果已经存在该密钥的记录,您可以使用更新某个值,

我可以做这个:

INSERT INTO `tableName` (`a`,`b`,`c`) VALUES (1, 2, 3)
ON DUPLICATE KEY UPDATE `a`=1, `b`=2, `c`=3
Run Code Online (Sandbox Code Playgroud)

但是,如何在不必写出两次列和值的情况下执行此操作?

mysql insert on-duplicate-key

68
推荐指数
4
解决办法
5万
查看次数

带有ON DUPLICATE KEY UPDATE的MySQL LOAD DATA INFILE

为了将大量数据加载到MySQL中,LOAD DATA INFILE是迄今为止最快的选择.不幸的是,虽然这可以以INSERT IGNORE或REPLACE的方式使用,但目前不支持ON DUPLICATE KEY UPDATE.

但是,ON DUPLICATE KEY UPDATE有优势REPLACE.当存在重复时,后者执行删除和插入.这为密钥管理带来了开销.此外,自动增量ID在替换时不会保持不变.

ON DUPLICATE KEY UPDATE使用LOAD DATA INFILE时如何模拟?

mysql load-data-infile on-duplicate-key

42
推荐指数
2
解决办法
4万
查看次数

ON DUPLICATE KEY UPDATE的自动增量太多

我有一个带有列的基本表:

  • id(主要用于AI)
  • 名称(唯一)
  • 等等

如果唯一列不存在,则INSERT该行,否则更新行....

INSERT INTO pages (name, etc)
VALUES
  'bob',
  'randomness'
ON DUPLICATE KEY UPDATE
 name = VALUES(name),
 etc = VALUES(etc)
Run Code Online (Sandbox Code Playgroud)

问题是如果它执行UPDATE,id列上的auto_increment值会上升.因此,如果执行了大量UPDATES,则id auto_increment会通过屋顶.

显然这是一个错误:http://bugs.mysql.com/bug.php?id = 28871

...但我在mySQL 5.5.8上使用InnoDB共享主机.

其他几年前没有解决问题的人: 防止MYSQL重复插入时的自动增量以及 为什么MySQL自动增量会因失败的插入而增加?

关于修复的想法?我是否可能以某种方式错误地构建了数据库?

******编辑****:似乎在你的my.ini文件中添加innodb_autoinc_lock_mode = 0修复了问题,但我对共享主机有什么选择?

******编辑2******:好的,我认为我唯一的选择是改为MyISAM作为存储引擎.作为一个超级mySQL新手,我希望这不会导致很多问题.是吗?

mysql auto-increment on-duplicate-key

17
推荐指数
1
解决办法
1万
查看次数

学说:重复主题更新

如何INSERT用选项编写学说查询ON DUPLICATE KEY UPDATE

mysql pdo doctrine on-duplicate-key

13
推荐指数
3
解决办法
2万
查看次数

EF6 CodeFirst我的[Key] Id列不会像标识列那样自动递增

我有几个类需要从一个包含Id的公共基类派生.暂时忽略除了其中一个之外的其他所有内容,让我们说:

public class MyBase {
   [Key]
   public int Id { get; set; } 
}
public class MyName : MyBase {
   public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的上下文(DataContext)看起来像这样:

public DbSet<MyName>MyNames { get; set; }

// to avoid having EF make a MyBases table and instead map 
// MyBase.Id into MyNames and my other derived classes I do this ...

protected override void OnModelCreating((DbModelBuilder modelBuilder) {
   modelBuilder.Entity<MyBase>()
            .Property(c => c.Id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

   modelBuilder.Entity<MyName>()
            .Map(m => {
                    m.MapInheritedProperties();
                    m.ToTable("MyNames");
                });
}
Run Code Online (Sandbox Code Playgroud)

生成的数据库,当我启用迁移,添加迁移初始化和更新数据库时,我得不到名为MyBases的表,而是在MyNames中获取Id列 …

c# sql entity-framework code-first on-duplicate-key

12
推荐指数
1
解决办法
3万
查看次数

PDO为INSERT和ON DUPLICATE KEY UPDATE准备了带有命名占位符的语句

我想将PDO INSERT和UPDATE准备好的语句切换到INSERT和ON DUPLICATE KEY UPDATE,因为我认为它比我目前正在做的更有效率,但是我在找出正确的语法时遇到了麻烦.与命名占位符和bindParam一起使用.

我在SO上发现了几个类似的问题,但我是PDO的新手,无法根据我的标准成功调整代码.这是我尝试过的,但它不起作用(它不插入或更新):

try { 
  $stmt = $conn->prepare('INSERT INTO customer_info (user_id, fname, lname) VALUES(:user_id, :fname, :lname)'          
 'ON DUPLICATE KEY UPDATE customer_info SET fname= :fname, 
                                            lname= :lname   
                                            WHERE user_id = :user_id'); 
  $stmt->bindParam(':user_id', $user_id);  
  $stmt->bindParam(':fname', $_POST['fname'], PDO::PARAM_STR);
  $stmt->bindParam(':lname', $_POST['lname'], PDO::PARAM_STR);      
  $stmt->execute();
}
Run Code Online (Sandbox Code Playgroud)

这是我的代码的简化版本(我有几个查询,每个查询有20-50个字段).我当前正在更新并检查更新的行数是否大于0,如果没有则运行Insert,并且每个查询都有自己的bindParam语句集.

php pdo prepared-statement sqlbindparameter on-duplicate-key

10
推荐指数
2
解决办法
2万
查看次数

MySql - ON DUPLICATE KEY INSERT

我明白存在INSERT IGNOREINSERT ... ON DUPLICATE KEY UPDATE.但是,当存在重复键时,我想对INSERT临时表执行操作以保留已违反的唯一键的记录,以便我可以将其输出给用户.

有什么方法可以ON DUPLICATE INSERT吗?如果它有帮助,我正在尝试进行批量插入.

mysql sql insert on-duplicate-key

8
推荐指数
1
解决办法
6282
查看次数

Yii INSERT ...重复更新

我正在开发一个Yii项目.在Yii模型上执行save()时,如何使用MySQL的ON DUPLICATE功能(http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html)?

我的MySQL如下:

CREATE TABLE `ck_space_calendar_cache` (
  `space_id` int(11) NOT NULL,
  `day` date NOT NULL,
  `available` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `price` decimal(12,2) DEFAULT NULL,
  `offer` varchar(45) DEFAULT NULL,
  `presale_date` date DEFAULT NULL,
  `presale_price` decimal(12,2) DEFAULT NULL,
  `value_x` int(11) DEFAULT NULL,
  `value_y` int(11) DEFAULT NULL,
  PRIMARY KEY (`space_id`,`day`),
  KEY `space` (`space_id`),
  CONSTRAINT `space` FOREIGN KEY (`space_id`) REFERENCES `ck_space` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

我的PHP是如下:

$cache = new SpaceCalendarCache();
$cache->attributes = …
Run Code Online (Sandbox Code Playgroud)

php mysql yii on-duplicate-key yii-cmodel

7
推荐指数
3
解决办法
3万
查看次数

在JOOQ中的ON DUPLICATE KEY中返回id

我真正想要的是在JOOQ中编写以下查询:

stmt = connection.prepareStatement(
    "INSERT INTO `tbl` (`name`, `service_id`, `device_id`) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE `id` = LAST_INSERT_ID(`id`)", 
    Statement.RETURN_GENERATED_KEYS
);
Run Code Online (Sandbox Code Playgroud)

我无法在JOOQ中找到一种方法.可能吗?

java mysql jooq on-duplicate-key

7
推荐指数
1
解决办法
1060
查看次数