有机会出笔试题的时候,下面是备用方案。
题:向数据库中插入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编译和运行。
分享到:
相关推荐
例如,向 tt 表中插入两行数据。 ### 13. 创建表的副本 - **创建表的副本**: - `CREATE TABLE <新表名> AS SELECT * FROM <源表名>`:创建一个表的副本。DB2 不支持直接使用这种方式创建表副本,但可以通过 `...
在这个场景中,它包含了300万条记录,这对于测试数据库性能、查询优化、并发处理能力等提供了充足的数据基础。 1. **数据库性能测试**:百万级别的数据量可以模拟实际生产环境,测试数据库在高负载下的性能。这包括...
例如,一个包含一百万行记录的表在运行 RUNSTATS 之后插入了额外的记录。表的 CARD(卡片计数,即记录数量)显示为 1,100,000,但主键索引的 FIRSTKEYCARD 显示为 1,110,000。这种不一致性可能导致优化器做出错误的...
- **SQL0040N:** 表示表中没有满足条件的行。 - **SQL0041N:** 表示没有为表定义索引。 - **SQL0051N:** 表示SQL目标值溢出。 - **SQL0053W:** 表示未执行SQL语句。 - **SQL0055N:** 表示源表为空。 - **SQL0056N:**...
- 用户可以使用`SQL `-w 和`53`-w等命令执行SQL查询,如创建表、插入数据、更新记录和删除记录等。 - 特殊的Informix扩展,如SPL(SQL过程语言),提供更高级的功能,如用户自定义函数和存储过程。 4. **示例和...
而 "test_db-master" 可能是一个包含数据库结构、表定义和初始数据的文件夹,或者是一个压缩的SQL文件,用于一次性导入到MySQL数据库中。 导入大量数据时,可以采用以下几种常见方法: 1. **使用SQL命令行工具**:...
标题与描述概述的知识点是关于如何在QTP(QuickTest Professional)中插入各种数据库检查点,这涉及到在自动化测试脚本中验证数据的正确性,确保应用程序与后端数据库交互时的功能正常。以下是对该主题的详细解释: ...
// 插入一条新记录 public long insertTitle(String isbn, String title, String publisher) { ContentValues initialValues = new ContentValues(); initialValues.put(KEY_ISBN, isbn); initialValues.put(KEY_...
`Rows`方法返回满足条件的所有记录,而`Row`方法则只返回第一条记录。 #### 结论 `zhgo/db`是一个强大且易于使用的Golang ORM库,它极大地简化了与关系型数据库交互的过程。无论是简单的CRUD操作还是更复杂的...
14. 关键字:在关系模式W中,根据给定的数据依赖,{(T,S)}能够唯一确定一条记录,因此它是关键字。 15. 最高范式(NF):如果关系模式的所有属性都是主属性,那么它至少达到了3NF,因为没有非主属性,从而避免了...
此外,事务管理也是数据库操作中不可或缺的一部分,特别是在涉及多条记录修改时,以确保数据的一致性和完整性。 总的来说,“Java_DB_Book”项目揭示了Java语言如何与数据库进行深度集成,提供了从数据库读取、写入...
`Zend_Db_Table_Row`还支持其他操作,比如插入新记录(通过`insert()`方法创建新行并返回新行对象)、删除记录(使用`delete()`方法)以及检查数据是否已更改(`isModified()`方法)。此外,你可以通过`...
- **插入新记录**:使用`INSERT`语句向表中添加新记录。 - 示例:`INSERT INTO wj2 (userid, usrname, password) VALUES (NULL, 'w', 'w');` - **创建新表**:使用`CREATE TABLE`语句创建一个新的表,并定义表的...
8. 在应用中建立主窗口w_main,主窗口中应包含四个数据窗口控件、八个命令按钮控件、一个静态文本控件和一个单行编辑器控件。 9. 在应用各对象中书写脚本,使该应用具有浏览、插入、修改和删除等功能。 本资源摘要...
这条语句的作用是将`DB01.iemis.temp_mt_code`表中的所有数据复制到新表`DB031.iemis.temp_mt_code`中。 - `SELECT * FROM iemt03h; SELECT * FROM iemt03d1a;` 这两条语句分别用于查询表`iemt03h`和`iemt03d1a...
10. 插入数据到S表中,应使用INSERT INTO语句,并确保数值类型的数据不带引号。 11. 关系模式W的关键字是(T,S),因为它能唯一确定一行数据。 12. 函数依赖集下的无损连接分解,分解III是无损的。 13. “为哪些...
- 右外连接会保留右表(S)的所有记录,即使在左表(R)中没有匹配项。 9. SQL语句创建表SC的插入行规则: - 可以插入的行:B - 只有B选项满足所有非空约束,S#和C#都不能为NULL。 10. SQL查询条件: - 正确...