赞
踩
场景:在日常的CURD中一定会用到批量新增。在我们的项目中,使用的数据库是Orcal,由于之前基本都是使用Mysql的,使用的sql语句也基本都是用mysql的。但是在这次的接口编写时用mysql的批量新增出了问题,刚开始我还以为是写的动态sql有问题,在后续的问题修改也主要是对动态sql修改,因此也浪费了大量的时间,在后续把sql搬到数据库运行一下后才发现是sql的问题,同时也了解到了mysql和orcal 也是有很多地方是不同的。
MySQL和Oracle在批量新增数据时存在一些不同点,主要体现在语法、性能、事务处理等方面。以下是一些关键区别:
1. 语法
MySQL:
在MySQL中,可以使用INSERT INTO ... VALUES
语句一次插入多行数据。示例如下:
- INSERT INTO table_name (column1, column2, column3)
- VALUES
- (value1, value2, value3),
- (value4, value5, value6),
- (value7, value8, value9);
Oracle:
在Oracle中,批量插入通常使用INSERT ALL
语句或使用多行的INSERT INTO ... SELECT
语句。示例如下:
- INSERT ALL
- INTO table_name (column1, column2, column3) VALUES (value1, value2, value3)
- INTO table_name (column1, column2, column3) VALUES (value4, value5, value6)
- INTO table_name (column1, column2, column3) VALUES (value7, value8, value9)
- SELECT * FROM dual;
或者使用INSERT INTO ... SELECT
语句:
- INSERT INTO table_name (column1, column2, column3)
- SELECT value1, value2, value3 FROM dual
- UNION ALL
- SELECT value4, value5, value6 FROM dual
- UNION ALL
- SELECT value7, value8, value9 FROM dual;
INSERT ALL
语句时,因为它可以在一次操作中插入多行数据。LOAD DATA INFILE
命令,用于从文件中快速批量插入数据,这是一个非常高效的方法。最后附上当时编写的sql代码和动态sql:
- INSERT ALL
- INTO PROD CONFIG GROUP(SERIAL NO,CONFIG GROUP ID,PRODUCT ID)
- VALUES (12312',NULL,NULL)
- INTO PROD CONFIG GROUP(SERIAL NO,CONFIG GROUP ID,PRODUCT ID)
- VALUES ('1234',NULL,NULL)
- SELECT I FROM DUAL ;
动态sql:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。