MySql批量插入与唯一索引问题
发表于:2024-11-25 作者:千家信息网编辑
千家信息网最后更新 2024年11月25日,MySQL批量插入问题在开发项目时,因为有一些旧系统的基础数据需要提前导入,所以我在导入时做了批量导入操作 ,但是因为MySQL中的一次可接受的SQL语句大小受限制所以我每次批量虽然只有500条,但依
千家信息网最后更新 2024年11月25日MySql批量插入与唯一索引问题
MySQL批量插入问题
在开发项目时,因为有一些旧系统的基础数据需要提前导入,所以我在导入时做了批量导入操作 ,但是因为MySQL中的一次可接受的SQL语句大小受限制所以我每次批量虽然只有500条,但依然无法插入,这个时候代码报错如下:
nested exception is com.mysql.jdbc.PacketTooBigException: Packet for query is too large (5677854 > 1048576).You can change this value on the server by setting the max_allowed_packet' variable.
根据报错我们很快就可以知道,是SQL语句数据包太大导致,我们可以设置MySQL服务器参数max_allowed_packet来解决这个问题。
解决办法
1.添加【mysqld】下max_allowed_packet参数,设置的尽量大一些。
#找到my.cnf文件#whereis my.cnf#vim my.cnf----------------------------[mysqld]max_connections =3000max_allowed_packet=1024M#保存后重启mysql服务,即可生效#service mysqld restart
2.临时设置max_allowed_packet,通过语句设置
myslq>set global max_allowed_packet = 1024*1024*1024 该种方式重启后就max_allowed_packet失效了
默认情况下Mysql参数max_allowed_packet值是1M.
MySQL索引不区分大小写问题
当在MySQL数据库中,创建索引默认是不区分大小写的,比如说如下语句:
CREATE TABLE `location` ( `id` int(11) NOT NULL AUTO_INCREMENT, `rc` varchar(2) DEFAULT NULL COMMENT 'R/C', `location_code` varchar(4) DEFAULT NULL COMMENT '地点编码', `location_name` varchar(30) DEFAULT NULL COMMENT '地点名称', `zip_code` varchar(6) DEFAULT NULL COMMENT '邮编', `address` varchar(50) DEFAULT NULL COMMENT '地址', `link_man` varchar(15) DEFAULT NULL COMMENT '联系人', `link_phone` varchar(30) DEFAULT NULL COMMENT '联系电话', `fax` varchar(30) DEFAULT NULL COMMENT '传真', `can_accept_car_time` varchar(40) DEFAULT NULL COMMENT '可接车时间', `type` varchar(1) DEFAULT NULL COMMENT '分类', `maintenance_type` varchar(1) DEFAULT NULL COMMENT '维护类型', `brand` varchar(4) DEFAULT NULL COMMENT '品牌', `reservation` varchar(40) DEFAULT NULL COMMENT '预留', `enable` int(1) DEFAULT '1', `msg_code` varchar(64) NOT NULL COMMENT '消息编码', `receive_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '接收日期', `create_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建日期', `modified_on` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改日期', PRIMARY KEY (`id`), UNIQUE KEY `unique_msg_code` (`msg_code`) USING BTREE, UNIQUE KEY `unique_location_code` (`location_code`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=16325 DEFAULT CHARSET=utf8 COMMENT='地址表';
但当我插入地址编码分别为H12C与h22C时,就报错了,抛出异常:Duplicate entry 'H12C' for key 'normal_localtion_code',这里则说明不区分大小写,所以这个地方需要解决这个问题。
解决方法
1.设置字段为Binary,那么索引就可以区分大小写了。
CREATE TABLE `location` ( `id` int(11) NOT NULL AUTO_INCREMENT, `rc` char(2) DEFAULT NULL COMMENT 'R/C', `location_code` varchar(4) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '地点编码', `location_name` varchar(26) DEFAULT NULL COMMENT '地点名称', `zip_code` varchar(6) DEFAULT NULL COMMENT '邮编', `address` varchar(50) DEFAULT NULL COMMENT '地址', `link_man` varchar(16) DEFAULT NULL COMMENT '联系人', `link_phone` varchar(30) DEFAULT NULL COMMENT '联系电话', `fax` varchar(30) DEFAULT NULL COMMENT '传真', `can_accept_car_time` varchar(40) DEFAULT NULL COMMENT '可接车时间', `type` varchar(1) DEFAULT NULL COMMENT '分类', `maintenance_type` varchar(1) DEFAULT NULL COMMENT '维护类型', `brand` varchar(4) DEFAULT NULL COMMENT '品牌', `reservation` varchar(40) DEFAULT NULL COMMENT '预留', `enable` int(1) DEFAULT '1', `msg_code` varchar(64) NOT NULL COMMENT '消息编码', `receive_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '接收日期', `create_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建日期', `modified_on` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改日期', PRIMARY KEY (`id`), UNIQUE KEY `unique_msg_code` (`msg_code`) USING BTREE, UNIQUE KEY `unique_location_code` (`location_code`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=4092 DEFAULT CHARSET=utf8 COMMENT='地点表';// 修改原表字典属性:ALTER TABLE `location`CHANGE COLUMN `location_code` `location_code` VARCHAR(4) CHARACTER SET 'utf8' BINARY NOT NULL DEFAULT '' ;
上面方法就解决了。
查询时不区分大小写问题
解决方法
1.查询语句加binary
2.与索引解决方案一致,设置字段属性为binary即可。
大小
日期
问题
地点
编码
语句
索引
地址
联系
参数
数据
方法
传真
名称
品牌
字段
属性
时间
消息
电话
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器电源线三根什么规格
上海云上匹配服务器
软件开发与该行业的巨头竞争
服务器要怎么做防护
自学数据库编程
金山区购买网络技术开发材料
数据库系统基础教程 京东
龙师兄谈互联网科技
松滋市网络安全卫士
智能停车场的网络技术
伟航互联网科技
智能家居数据库
女生读计算机网络技术行吗
DE下载软件开发
软件开发公司的理念
高校网络安全监测预警通报制度
申通数据库
子域名是挂一个服务器上的吗
中配互联网科技有限公司
校园网络安全案例分析
seer数据库使用方法
初中学生网络安全教育课
东软医疗服务器需求
边界网络安全公司
网络安全大赛近期
linux下载服务器文件
网站服务器解析
数据库与数据库直连
公司设置服务器检测的目的
审计应收集哪些数据库