1:只要已经存在表结构的
第一种方式:
CREATE TABLE T1 SELECT * FROM mysql.user WHERE 1=2;
第二种方式:
CREATE TABLE T2 LIKE mysql.user;
mysql> CREATE TABLE t1 -> LIKE mysql.user; Query OK, 0 rows affected (0.01 sec) mysql> CREATE TABLE t2 -> SELECT * FROM mysql.user -> WHERE 1=2; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0
2:表结构和数据都要的
CREATE TABLE T1 SELECT * FROM mysql.user
3:需要100W的数据量
DROP TABLE IF EXISTS testdata; CREATE TABLE testdata (id int,name varchar(10)); DROP PROCEDURE IF EXISTS pro_testdata; DELIMITER && CREATE PROCEDURE pro_testdata(IN inr int) BEGIN DECLARE i INT DEFAULT 0; START TRANSACTION; WHILE i<inr DO INSERT INTO testdata(id,name) values(i,'gechong'); SET i=i+1; END WHILE; COMMIT; END && DELIMITER ;
call pro_testdata(1000000);
mysql> SELECT COUNT(1) FROM testdata; +----------+ | COUNT(1) | +----------+ | 0 | +----------+ 1 row in set (0.00 sec) mysql> CALL pro_testdata(10000); Query OK, 0 rows affected (0.24 sec) mysql> SELECT COUNT(1) FROM testdata; +----------+ | COUNT(1) | +----------+ | 10000 | +----------+ 1 row in set (0.00 sec)
如果表结构不满足要求做简单修改即可。
参数类型:in、out、inout
in表示:调用者传给存储过程
out表示:存储过程返回给调用者的
inout:MySQL 存储过程 inout 参数跟 out 类似,都可以从存储过程内部传值给调用者。不同的是:调用者还可以通过 inout 参数传递值给存储过程。
DROP PROCEDURE IF EXISTS proinout; DELIMITER && CREATE PROCEDURE proinout (in id1 int,out id2 int) BEGIN SELECT id INTO id2 FROM t WHERE id = id1; END && DELIMITER ;
调用
call proinout(100,@id_num);
SELECT @id_num;