mysql编写insertOrUpdate记录违反唯一约束时更新否则插入新纪录
可以使用MySQL的ON DUPLICATE KEY UPDATE语句来实现insertOrUpdate操作。具体步骤如下:
- 创建表并添加唯一约束
首先需要创建一个表,并添加唯一约束,例如:
CREATE TABLE user (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(50) NOT NULL,
email varchar(50) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY uniq_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
其中UNIQUE KEY uniq_email (email)表示email列为唯一约束。
- 编写insertOrUpdate语句
接下来可以编写insertOrUpdate语句,例如:
INSERT INTO user (name, email) VALUES ('Tom', 'tom@example.com')
ON DUPLICATE KEY UPDATE name = VALUES(name);
这条语句的意思是:如果插入的数据违反了唯一约束,即email已经存在,则更新name列的值为插入数据中name列的值;否则插入一条新记录。
还可以在UPDATE子句中添加多个字段的更新,例如:
INSERT INTO user (name, email) VALUES ('Tom', 'tom@example.com')
ON DUPLICATE KEY UPDATE name = VALUES(name), email = VALUES(email);
这样在插入数据时,如果email已经存在,则同时更新name和email列的值。
这里使用了MySQL的VALUES函数,它可以获取插入数据中指定列的值。例如VALUES(name)表示获取插入数据中name列的值。
- 测试insertOrUpdate语句
最后可以测试一下insertOrUpdate语句的效果,例如:
INSERT INTO user (name, email) VALUES ('Tom', 'tom@example.com')
ON DUPLICATE KEY UPDATE name = VALUES(name);
INSERT INTO user (name, email) VALUES ('Jerry', 'tom@example.com')
ON DUPLICATE KEY UPDATE name = VALUES(name);
第一条语句会插入一条新记录,第二条语句会更新email为tom@example.com的记录的name列的值为Jerry
原文地址: http://www.cveoy.top/t/topic/hcH9 著作权归作者所有。请勿转载和采集!