mysql语句批量插入大量数据时重复key的一些操作汇总

当我们需要插入大量数据时,可能会遇到重复key的一些问题,在Java中,我们可以在程序中循环去排除重复的key的插入操作,但是!如果数据量很大时,那么就非常的消耗时间,那么我们可以直接交给sql去操作。如下几种方案:

1、insert......select....where not exist 通过not exist去排除重复项

INSERT INTO table1 (userCode) SELECT 'person1' FROM dual WHERE NOT EXISTS (SELECT id FROM table1 WHERE id = 1 )

2、replace into插入前删除重复key项

REPLACE INTO test2 ( id,parent_id, NAME )
VALUES('3','12', '测试1');

 3、insert ignore into存在相同key则忽略

INSERT IGNORE INTO test2 ( id,parent_id, NAME )
VALUES('9','123', '测试1');

4、insert into... on duplicate key update...存在相同的key则更新,否则插入。

INSERT INTO test2 ( id, NAME )
VALUES
	( '12', '测试1' ) 
	ON DUPLICATE KEY UPDATE id = '12',
	NAME = '测试'

### MySQL 常用 SQL 语句汇总 #### 数据库操作 - 创建数据库: ```sql CREATE DATABASE db_name; ``` - 删除数据库: ```sql DROP DATABASE db_name; ``` - 使用指定数据库: ```sql USE db_name; ``` #### 表的操作 - 创建表: ```sql CREATE TABLE table_name ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), age INT ); ``` - 修改表结构: ```sql ALTER TABLE table_name ADD COLUMN new_column DATATYPE; ``` - 删除表: ```sql DROP TABLE table_name; ``` #### 插入数据 - 向表中插入单条记录: ```sql INSERT INTO table_name (column_list) VALUES (value_list); ``` - 批量插入多条记录: ```sql INSERT INTO table_name (column_list) VALUES (value_list_1), (value_list_2); ``` #### 查询数据 - 简单查询: ```sql SELECT * FROM table_name; ``` - 条件查询: ```sql SELECT * FROM table_name WHERE condition; ``` - 排序查询: ```sql SELECT * FROM table_name ORDER BY column ASC|DESC; ``` - 范围查询: ```sql SELECT * FROM table_name WHERE column BETWEEN value1 AND value2; ``` - 模糊匹配查询[^2]: ```sql SELECT * FROM table_name WHERE column LIKE 'pattern'; ``` #### 更新数据 - 更新特定条件的数据: ```sql UPDATE table_name SET column1=value, column2=value WHERE condition; ``` #### 删除数据 - 删除符合条件的记录: ```sql DELETE FROM table_name WHERE condition; ``` #### 备份与恢复 - 导出整个数据库备份文件: ```bash mysqldump -u username -p database_name > backup_file.sql ``` - 还原数据库备份文件[^3]: ```bash mysql -u username -p database_name < backup_file.sql ``` #### 用户管理 - 添加新用户并授权: ```sql CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'new_user'@'localhost'; FLUSH PRIVILEGES; ``` - 删除用户: ```sql DROP USER 'user_name'@'host_name'; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值