MySQL如果数据不存在在插入,存在则跳过

只插入新数据

	insert into drug(DrugID) 
select '000211' from drug where not exists(select DrugID from drug where DrugID='000211')  limit 1

如果数据不存在则插入,否则更新数据 

INSERT INTO drug (DrugID,DrugName) VALUES ('abc','abc'),('abc1','abc1') ON DUPLICATE KEY UPDATE Remark =Remark+ '1';

在 SQL 中,如果希望实现“根据 ID 是否存在来决定是否新增记录”的功能,可以在插入数据使用 `INSERT ... ON DUPLICATE KEY UPDATE` 语句。这种方法允许在插入数据检查主键或唯一索引的冲突。如果指定的列(如 `ID`)已经存在,则可以选择跳过插入操作或者进行更新。 ### 实现方式 假设有一个表 `users`,其结构如下: ```sql CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(100), email VARCHAR(100) UNIQUE ); ``` #### 情况:ID 存在跳过插入 如果希望当 `id` 已经存在跳过插入操作,可以使用 `ON DUPLICATE KEY UPDATE`,并且在更新部分做任何更改。例如: ```sql INSERT INTO users (id, name, email) VALUES (1, 'Alice', 'alice@example.com') ON DUPLICATE KEY UPDATE name = name; ``` 在这个例子中,如果 `id` 为 `1` 的记录已经存在,则会执行插入操作,而是触发 `ON DUPLICATE KEY UPDATE` 部分。由于 `name = name` 会改变任何值,因此相当于跳过插入操作[^1]。 #### 使用 `IGNORE` 关键字 另一种方法是使用 `INSERT IGNORE` 语句,它会在遇到主键或唯一约束冲突忽略错误并跳过插入操作: ```sql INSERT IGNORE INTO users (id, name, email) VALUES (1, 'Alice', 'alice@example.com'); ``` 在这种情况下,如果 `id` 或 `email` 已经存在,则 MySQL 插入新行,并且会抛出错误[^1]。 ### 示例代码 以下是一个 Python 脚本示例,用于通过 `pymysql` 库执行插入操作,并利用 `ON DUPLICATE KEY UPDATE` 来避免重复插入: ```python import pymysql # 连接到MySQL数据库 connection = pymysql.connect( host='localhost', user='root', password='password', database='test_db' ) try: with connection.cursor() as cursor: # 插入数据并处理重复键 sql = """ INSERT INTO users (id, name, email) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE name = name """ values = (1, 'Alice', 'alice@example.com') cursor.execute(sql, values) connection.commit() finally: connection.close() ``` ### 注意事项 - 在使用 `ON DUPLICATE KEY UPDATE` ,确保对主键或唯一索引进行了定义,否则无法检测到重复值。 - 如果需要更复杂的逻辑(如仅在某些条件下更新),可以在 `UPDATE` 子句中添加条件表达式。 - 使用 `INSERT IGNORE` 需要注意,它会静默忽略所有错误,而仅仅是重复键错误,这可能导致意外行为。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值