有机会出笔试题的时候,下面是备用方案。
题:向数据库中插入100W条记录,表自定义,数据可重复。
delimiter $$
drop procedure if exists insertRecords $$
create procedure insertRecords(num int)
begin
declare mi tinyint default 0;
drop table if exists recursive;
create table recursive(id int auto_increment, name varchar(20),primary key(id));
insert into recursive(name) values('anna');
while(power(2,mi)<num) do
set mi=mi+1;
insert into recursive(name) select name from recursive;
end while;
delete from recursive where id > num;
end
$$ delimiter ;
MySQL 存储过程是从 MySQL 5.0 开始增加的新功能。使用delimiter $$ 来定义语句结束符,创建完成后,还原;因为MySQL默认以";"为分隔符,过程体的每一句都被MySQL以存储过程编译,则编译过程会报错。drop procedure if exists...在此已经执行了。
上述代码的第13行,可以使用带参数的limit来改进,如下,
delimiter $$
drop procedure if exists insertRecords $$
create procedure insertRecords(num int)
begin
declare mi tinyint default 1;
declare more int default 0;
drop table if exists recursive;
create table recursive(id int auto_increment, name varchar(20),primary key(id));
insert into recursive(name) values('anna');
while(power(2,mi)<num) do
set mi=mi+1;
insert into recursive(name) select name from recursive;
end while;
set more=num-power(2,(mi-1));
set @stmt='insert into recursive(name) select name from recursive limit ?';
prepare newSql from @stmt;
set @arg=more;
execute newSql using @arg;
deallocate prepare newSql;
end
$$ delimiter ;
To deallocate a prepared statement produced with PREPARE, use a DEALLOCATE PREPARE statement that refers to the prepared statement name. Attempting to execute a prepared statement after deallocating it results in an error.看得懂,不会翻译...执行存储过程后才开始关于表的DDL&DML。
call insertRecords(1000000);
最后查看记录条数。
select count(id) num from recursive;
--------下面给出Oracle版-------------------------------
先创建序列用于自增,如下。
create sequence auto_increment;
然后创建表,blabla...
create table recursive(id number(10) primary key, name varchar2(20));
接着整个触发器,作用:向表中插入数据时实现自动自增功能。
create or replace trigger insert_recursive_trigger
before insert on recursive
for each row
begin
select auto_increment.nextval into :new.id from dual;
end;
/
插入一条记录,以备后用。
insert into recursive(name) values('anna');
后面写个存储过程,用于插入数据,下面13行后面的 :1是占位符 。
create or replace procedure insertRecords(num number)
is
mi number(2) default 1;
more number(10) default 0;
dml_insert varchar2(100);
begin
dml_insert :='insert into recursive(name) select name from recursive';
while(power(2,mi)<num) loop
mi :=mi+1;
execute immediate dml_insert ;
end loop;
more :=num-power(2,(mi-1));
dml_insert :='insert into recursive(name) select name from recursive where rownum<=:1';
execute immediate dml_insert using more;
end ;
/
最后测试下,只用了10w条,有点慢,是由于用了触发器的缘故。
exec insertRecords(100000);
select count(id) num from recursive;
select count(distinct(id)) from recursive;
之前也是把所有Orable语句集成到insertRecords存储过程里,发现有关于execute immediate的权限问题,没深入探索,就拆开了。感兴趣的童鞋给加个MS SqlServer(刚卸载不久,暂不想再装)版的。
1.若总分为10分,写出 insert into .. select ..即可得5分。
2.若之用for循环100w次插入数据,得3分。
[注]:程序实用性不大,主要考察能力。
上述代码通过了MySql5.0、Oracle10g_r1编译和运行。
分享到:
相关推荐
一、编写测试案例向MySQL数据库中插入百万条数据。测试数据表建表脚本如下:use db_xk; drop table if exists tb_test2; create table tb_test2 ( id int primary key auto_increment, subject varchar(50) ...
在DB2数据库,创建视图后,查询创建的视图如果报-1585则表明临时表空间不足,需要根据资源内容解决此问题。
插入时间集群表(ITC,Insert Time Clustering)是 DB2 LUW v10.1 版本中引入的新功能,并在 v10.5 中做了进一步的改进。本文将通过具体的实验引导读者深入理解 ITC 表的内部原理,更准确的理解其在轻松管理空间使用...
实验3、数据更新 3.1 实验目的 熟悉数据库的数据更新操作,能够使用SQL语句对数据库进行数据的插入...(1) 使用SQL语句向Students表中插入元组(Sno:S78; Sname:李迪; Semail:LD@zjut.edu.cn; Scredit:0;Ssex:男)。
批量插入数据库
简单的计算工具,W与dB互算工具!简单易用,体积小巧,便于携带。这下行了吧,够二十个字了吧!
向db插入短信及彩信数据,并且能够在收件箱中查看
用于表情识别的rafdb数据集
(3)向score表中插入一条数据,其中数据中的课程编号是课程表中没有的,验证参照完整性约束; (4)修改score表中一条数据的课程编号,该编号是课程表中没有的,验证参照完整性约束; (5)删除student表中的一条...
DB9 DB15 DB25 DB37 DB50 直型弯型针型孔型封装大全Altium库 PCB封装库90个合集(AD库): 封装型号列表: Component Count : 90 Component Name ----------------------------------------------- DB9 DB9 公 90° ...
两个java程序,一个是以嵌入式访问javadb,一个以网络模式访问javadb。 两个程序均已实际调通并运行成功。...向表内插入了两条数据; 然后,查询数据并将结果打印在控制台上; 最后,删除表和数据库,释放资源。
Labview 使用INSERT INTO(用于向SQL Server表格中插入新的行),该视频用于指导初学者写数据库。
db数据库表
DB9 DB15 DB25 DB37 D型公头母头连接器3D封装库(STEP后缀)文件: Connector - d-sub.STEP DB-Female.STEP DB-Male.STEP DB15RA_F.STEP DB15RA_M.STEP DB15_F.STEP DB15_M.STEP DB25 .STEP DB25-F.STEP DB25-M.STEP...
但万能数据库查询分析器却给你提供了这样的便利,它可以向DBMS一次提交多条SQL语句,并且它还会向你返回每条SQL语句执行所需要的时间、受影响的记录(或者返回的记录)条数。如果其中某些SQL语句有错误,它还会给你返回...
cs80 gaussDb100驱动下载
dBm是一个表示功率绝对值的值(也可以认为是以1mW功率为基准的一个比值),计算公式为:10log(功率值/1mw)。
在VC++2010用ADO方法在ACCESS2010数据库中删除一条记录。【要在机器中安装Microsoft.ACE.OLEDB.12.0引擎,网上有下载的】。 本实例参照清华大学出版社的《Visual C++范例开发大全》,ISBN: 978-7-302-22624-6,作者:...
此版本为hedhat7.X以上版本,解压文件夹,里面包含了GaussDB_100_1.0.1-DATABASE-REDHAT-64bit.tar.gz,华为高斯数据库认证HCIA-GaussDB_V1.0实验手册.pdf,华为GaussDB 客户端工具—Data Studio 安装教程,照着文档...
将step7 db块中变量快速导入到wincc中