一个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 '
'
;
(
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