mysql主键记录存在更新某字段

1.以一个表的数据为基准向另外的表中插入数据,如果主键记录存在更新某字段
insert into role(player_id,hp,mp) select player_id,0,0 from player on duplicate key update hp=3; 
*update hp=3 表示如果是主键存在的情况下执行
INSERT INTO t_player(player_id,carrier_operator) SELECT a.player_id,b.pt from t_player a JOIN t_z_temp b ON (a.login_name = b.`name` OR a.guest_key = b.phone_id)  on DUPLICATE key UPDATE carrier_operator=b.pt; 
 
2.找出不存在的记录插入到表中
insert into role(player_id,hp,mp) select player_id,0,0 from player WHERE not exists (SELECT * from role where role.player_id=player.player_id); 
### MySQL 使用主键更新字段的 SQL 语句 在 MySQL 中,如果需要通过主键更新字段值,可以使用 `INSERT ... ON DUPLICATE KEY UPDATE` 语句。此语句的功能是:当插入的数据违反了主键或唯一索引约束时,会触发更新操作[^1]。 以下是一个示例 SQL 语句,展示如何通过主键更新字段值: ```sql INSERT INTO table_name (id, column1, column2) VALUES (1, 'value1', 'value2') ON DUPLICATE KEY UPDATE column1 = VALUES(column1), column2 = VALUES(column2); ``` 在这个例子中: - `id` 是表中的主键。 - 如果 `id=1` 的记录已经存在,则会执行 `ON DUPLICATE KEY UPDATE` 部分的逻辑,将 `column1` 和 `column2` 的值更新为新插入的值。 - 如果 `id=1` 的记录存在,则会插入一条新记录[^3]。 需要注意的是,从 MySQL 8.0.20 开始,当 `INSERT ... SELECT ... ON DUPLICATE KEY UPDATE` 语句中使用 `VALUES()` 函数时,可能会生成警告信息[^1]。此外,如果表中包含多个主键或唯一索引,此类语句可能被认为是不安全的,因为其行为依赖于存储引擎检查键的顺序,而这种顺序是非确定性的[^2]。 ### 示例代码 假设有一个名为 `users` 的表,结构如下: | id | name | age | |------|----------|-----| | INT | VARCHAR | INT | 可以通过以下 SQL 语句实现基于主键更新字段的操作: ```sql INSERT INTO users (id, name, age) VALUES (1, 'John Doe', 30) ON DUPLICATE KEY UPDATE name = VALUES(name), age = VALUES(age); ``` 如果 `id=1` 的记录存在,则会更新 `name` 和 `age` 字段;如果记录存在,则会插入一条新记录。 --- ### 注意事项 1. 确保目标表的主键或唯一索引已被正确定义,否则 `ON DUPLICATE KEY UPDATE` 不会生效[^3]。 2. 在多主键或多唯一索引的情况下,需谨慎使用该语句,以避免非预期的行为[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值