代码改变世界

mysql生成随机测试数据

2014-02-26 11:58  youxin  阅读(1449)  评论(0编辑  收藏  举报

一个demo:

 CREATE TABLE dept_InnoDB(
  deptno MEDIUMINT NOT NULL DEFAULT 0 ,
  dname VARCHAR(20) NOT NULL DEFAULT "" ,
  loc VARCHAR(13) NOT NULL DEFAULT ""
  )ENGINE = InnoDB DEFAULT CHARSET = utf8;

创建2个function.

CREATE DEFINER = `root`@`localhost` FUNCTION rand_string (n int)
 RETURNS varchar(255)
BEGIN
declare  chars_str varchar(100) default 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
declare  return_str varchar(255) default "";
declare i int default 0;
while i<n do
  set return_str=concat(return_str,substring(chars_str,floor(1+rand()*52),1));
    set i=i+1;
end while;
return return_str;
END;

while do

end while; 语法

 

CREATE DEFINER = `root`@`localhost` FUNCTION `rand_loc`()
 RETURNS varchar(10)
BEGIN
declare return_str varchar(10) default 'Shanghai';
declare n int default 0;
set n=floor(rand()*10);
case n
    when 0 then set return_str='Shanghai';
    WHEN 1 THEN SET return_str = 'Beijing';
  WHEN 2 THEN SET return_str = 'Shenzhen';
  WHEN 3 THEN SET return_str = 'Guangzhou';
  WHEN 4 THEN SET return_str = 'Tianjin';
  WHEN 5 THEN SET return_str = 'Chongqing';
  WHEN 6 THEN SET return_str = 'Chengdu';
  WHEN 7 THEN SET return_str = 'Wuhan';
  WHEN 8 THEN SET return_str = 'Changcha';
  WHEN 9 THEN SET return_str = 'Shenyang';
  ELSE SET return_str = 'Dalian';
 end CASE;
 
  return return_str;
end;

case x

     when 0 then set x='''

 .

end case 语法

一个存储过程:

CREATE DEFINER = `root`@`localhost` PROCEDURE insert_dept(IN start int(10),IN max int(10))
BEGIN
declare i int default 0;
set autocommit=0;
REPEAT 
  set i=i+1;
  insert into dept_innodb values((start+i),rand_string(6),rand_loc());
until i=max
end repeat;
commit;
END;

保存到文件中:

select * from dept_innodb into outfile "C:/users/table1.csv"
fields TERMINATED by ','
lines TERMINATED by '\r\n'
;

 InnoDB 事务模式与锁定

在 InnoDB 事务处理模式中, the goal has been to combine the best properties of a multiversioning database to traditional two-phase locking. InnoDB 进行行级的锁定,并以与 Oracle 非锁定读取(non-locking)类似的方式读取数据。 InnoDB 中的锁定表的存储是如此(space-efficiently)而不再需要扩大锁定: 典型特色是一些用户可能锁定数据库中的任意行或任意行的子集,而不会引起 InnoDB 内存运行溢出。

在 InnoDB 中,所有的用户操作均是以事务方式处理的。如果 MySQL 使用了自动提交(autocommit)方式,每个 SQL 语句将以一个单独的事务来处理。MySQL 通常是以自动提交方式建立一个服务连接的。

如果使用 SET AUTOCOMMIT = 0 关闭自动提交模式,就认为用户总是以事务方式操作。如果发出一个 COMMIT 或 ROLLBACK 的 SQL 语句,它将停止当前的事务而重新开始新事务。两个语句将会释放所有在当前事务中设置的 InnoDB 锁定。COMMIT 意味着永久改变在当前事务中的更改并为其它用户可见。ROLLBACK 正好相反,它是取消当前事务的所有更改。

如果以 AUTOCOMMIT = 1 建立一个连接,那么用户仍然可以通过以 BEGIN 开始和 COMMIT 或 ROLLBACK 为语句结束的方式来执行一个多语句的事务处理。

php生成随机数据:http://www.haogongju.net/art/1414203

http://www.jb51.net/article/19470.htm