我在这里看到了这个问题/答案:插入到mysql表或更新(如果存在),但我很困惑。我有这张table(顾客):
cus_id | driver_id | name | age
1 | 1234 | Bob | 20
2 | 987 | James | 21
3 | 5000 | Jane | 23
sql语句
CREATE TABLE customers(
cus_id int(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
driver_id int(4) NOT NULL,
name varchar(32),
age int(3)
);
我总是通过 driver_id
. cus_id
是主键 AUTO_INCREMENT
的。而且总是更新 name
以及 age
.
所以我会用这句话
INSERT INTO customers (driver_id, name, age) VALUES(1234, "Bobby", 21) ON DUPLICATE KEY UPDATE
name="Bobby", age=21
现在的问题是,什么是复制密钥?我不是通过 cus_id
. 我在寻找我的复制品 driver_id
.
所以在上面的语句中,它将用 cus_id=1
,不插入行,因为
driver_id 1234
已经存在。
所以这张table看起来像:
cus_id | driver_id | name | age
1 | 1234 | Bobby | 21
2 | 987 | James | 21
3 | 5000 | Jane | 23
2条答案
按热度按时间fnx2tebb1#
这是您的样品:
创建表
现在插入数据
观察数据
添加唯一键
也可以使用createtable语句直接添加键
插入具有重复驱动程序id的记录
查看更改的数据
yks3o0rb2#
现在的问题是,什么是复制密钥?
表定义只有一个键,
cus_id
. 而且它是自动递增的,所以它永远不能被复制——毕竟insert
语句应该让数据库选择下一个值。如果你愿意的话
driver_id
为了唯一,您需要对该列设置唯一的约束或索引。最简单的方法是创建表时:但是,您也可以在事件之后将其添加为唯一约束或索引:
或者:
不幸的是,mysql不允许您“选择”处理哪个重复密钥。任何重复的键都会触发
ON DUPLICATE KEY UPDATE
逻辑。