mysql - 如果mysql中不存在则插入记录

标签 mysql sql-insert

可能这个问题被问了很多次,但在我的情况下不起作用。

表架构

CREATE TABLE `tasks_taskstatus` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(40) NOT NULL,
  `video_status` tinyint(1) NOT NULL,
  `creative_status` tinyint(1) NOT NULL DEFAULT '0',
  `missing_asset` tinyint(1) NOT NULL,
  `is_finished` tinyint(1) NOT NULL,
  `share_with_am` tinyint(1) NOT NULL,
  `ordering` smallint(6) NOT NULL,
  `ready_to_begin` tinyint(1) NOT NULL,
  `in_progress` tinyint(1) NOT NULL,
  `is_conformed` tinyint(1) NOT NULL,
  `order_item_equivalent` varchar(60) DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=122 DEFAULT CHARSET=latin1;

如果一条记录尚不存在,我需要在 mysql 数据库中插入一条记录,下面是我尝试使用的查询。

    INSERT IGNORE INTO `tasks_taskstatus` 
SET `name`='Saveout - In Progress', 
`video_status`=1, 
`creative_status`=0, 
`missing_asset`=0, 
`is_finished`=0, 
`share_with_am`=0, 
`ordering`=4, 
`ready_to_begin`=0, 
`in_progress`=1, 
`is_conformed`=0, 
`order_item_equivalent`='';

但是每次我运行此查询时都会创建一条新记录,那么上面的语句有什么问题以及如何修改上面的查询以便仅在不存在时插入数据/记录?

最佳答案

您没有INSERT id(这是您的主键),因此 AUTO_INCRMENT 启动并生成一个新的 id 并插入一条新记录。

问问自己:MySQL 如何知道要更新哪条记录?如果您知道这一点(示例答案可能是“按名称”),那么您可以更改 key ,这应该可行。

如果 namevideo_status 的组合必须是唯一的,请创建一个额外的键:

ALTER TABLE `tasks_taskstatus` ADD UNIQUE(`name`, `video_status`);

关于mysql - 如果mysql中不存在则插入记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35079532/

相关文章:

PHP 数据库 SQL 插入

MySQL:我可以索引日期时间字段吗? MySQL不会这样做

mysql - 在一对多关联的 CREATE 期间出现 Sequelize 错误 "Unknown column in ' 字段列表'"

mysql - 警告代码 : 1264 Out of range value for column for datetime column value

sql-server - SQL 服务器 : How to automatically adjust an out-of-range value for a column when insert/update?

sql - 删除 "NOT IN"子句并优化查询

php - 将包含数组的表单数据安全插入 mysql 数据库

mysql - 顺丰 : query to retrieve duplicates

c++ - VS2013 c++ 连接 mysql --- Libmysql.dll 中的错误

postgresql - oracle plsql WITH语句结合INSERT