MySQL用隨機資料填充表
先建立數字輔助表
http://blog.itpub.net/29254281/viewspace-1362897/
然後建立一個生成隨機字元的函式
然後執行如下命令
其中
@table_schema是資料庫名
@table_name是目標表名
@row_count是生成的行數
這個不支援boolean型別,因為mysql在內部作為tinyint儲存.
也有一些業務要求,比如State只有0,1兩個取值.
可以在生成資料之後,再批次修改一下。
update test set c2=round(rand());
-
create table nums(id int not null primary key);
-
-
delimiter $$
-
create procedure pCreateNums(cnt int)
-
begin
-
declare s int default 1;
-
truncate table nums;
-
while s<=cnt do
-
insert into nums select s;
-
set s=s+1;
-
end while;
-
end $$
-
delimiter ;
-
-
delimiter $$
-
create procedure pFastCreateNums(cnt int)
-
begin
-
declare s int default 1;
-
truncate table nums;
-
insert into nums select s;
-
while s*2<=cnt do
-
insert into nums select id+s from nums;
-
set s=s*2;
-
end while;
-
end $$
- delimiter ;
http://blog.itpub.net/29254281/viewspace-1362897/
然後建立一個生成隨機字元的函式
-
DROP FUNCTION IF EXISTS rand_string;
-
delimiter //
-
CREATE FUNCTION rand_string(l_num int UNSIGNED,l_type tinyint UNSIGNED)
-
RETURNS varchar(2000)
-
BEGIN
-
-- Function : rand_string
-
-- Author : dbachina#dbachina.com
-
-- Date : 2010/5/30
-
-- l_num : The length of random string
-
-- l_type: The string type
-
-- 1.0-9
-
-- 2.a-z
-
-- 3.A-Z
-
-- 4.a-zA-Z
-
-- 5.0-9a-zA-Z
-
--
:
-
-- mysql> select rand_string(12,5) random_string;
-
-- +---------------+
-
-- | random_string |
-
-- +---------------+
-
-- | 3KzGJCUJUplw |
-
-- +---------------+
-
-- 1 row in set (0.00 sec)
-
DECLARE i int UNSIGNED DEFAULT 0;
-
DECLARE v_chars varchar(64) DEFAULT '0123456789';
-
DECLARE result varchar (2000) DEFAULT '';
-
-
IF l_type = 1 THEN
-
SET v_chars = '0123456789';
-
ELSEIF l_type = 2 THEN
-
SET v_chars = 'abcdefghijklmnopqrstuvwxyz';
-
ELSEIF l_type = 3 THEN
-
SET v_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
-
ELSEIF l_type = 4 THEN
-
SET v_chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
-
ELSEIF l_type = 5 THEN
-
SET v_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
-
ELSE
-
SET v_chars = '0123456789';
-
END IF;
-
-
WHILE i < l_num DO
-
SET result = concat( result,substr(v_chars,ceil(rand()*(length(v_chars)-1)),1) );
-
SET i = i + 1;
-
END WHILE;
-
RETURN result;
-
END;
-
//
- delimiter ;
-
set @table_schema='songod';
-
set @table_name='test';
-
set @row_count=10;
-
set @sql=concat('insert into ',@table_schema,'.',@table_name,' select ');
-
select
-
nullif ('please stand by...',
-
@sql:=concat(@sql,
-
case
-
when data_type='int' then 'round(rand()*2147483647),'
-
when data_type='bigint' then 'round(rand()*9223372036854775807),'
-
when data_type='smallint' then 'round(rand()*32767),'
-
when data_type='tinyint' then 'round(rand()*127 ),'
-
when data_type='varchar' then concat('rand_string(',CHARACTER_MAXIMUM_LENGTH,',5),')
-
when data_type='date' then 'now()-interval round(90*rand()) day,'
-
when data_type='datetime' then 'now()-interval round(90*rand()) day,'
-
when data_type='timestamp' then 'now()-interval round(90*rand()) day,'
-
end
-
)
-
) info
-
from information_schema.columns where table_schema=@table_schema and table_name=@table_name;
-
set @sql=left(@sql,char_length(@sql)-1);
-
select nullif ('please stand by...',@sql:=concat(@sql,' from nums where id<=',@row_count,';')) info;
-
prepare statement from @sql;
-
execute statement;
- commit;
@table_schema是資料庫名
@table_name是目標表名
@row_count是生成的行數
這個不支援boolean型別,因為mysql在內部作為tinyint儲存.
也有一些業務要求,比如State只有0,1兩個取值.
可以在生成資料之後,再批次修改一下。
update test set c2=round(rand());
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29734436/viewspace-1710655/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 用隨機資料填充外來鍵表MySql隨機
- MySQL 隨機查詢資料與隨機更新資料實現程式碼MySql隨機
- Faker資料填充
- MySQL 資料表操作MySql
- mysql迴圈插入資料、生成隨機數及CONCAT函式MySql隨機函式
- 【資料庫】MySQL鎖機制、熱備、分表資料庫MySql
- MySQL 千萬級資料表 partition 實戰應用MySql
- MYSQL造資料佔用臨時表空間MySql
- SpreadJS 在資料填充時的公式填充方案JS公式
- MySQL刪除資料表MySql
- 用Python寫一個向資料庫填充資料的小工具Python資料庫
- excel模板資料填充 :tablefillExcel
- 配置化資料填充框架框架
- SAP CRM訂單資料庫表CRMD_SHIPPING的填充原理資料庫
- MySQL 資料庫技巧:批次更新隨機生成的時間戳欄位MySql資料庫隨機時間戳
- MySQL資料表的基本操作MySql
- mysql 快清表中的資料MySql
- faker 資料填充常用指令收集
- Laravel模型工廠填充資料Laravel模型
- Laravel 優雅填充 SQL 資料LaravelSQL
- 查詢MySQL資料庫,MySQL表的大小MySql資料庫
- MySQL系列教程小白資料庫基礎暨隨MySql資料庫
- mysql 隨機查詢記錄MySql隨機
- 集合中隨機取出幾個資料隨機
- 隨筆:MySQL 普通3表join順序MySql
- mysql 資料表的複製案例MySql
- MySQL資料表分割槽手記MySql
- 分享一個批量產生隨機測試資料的MySQL儲存過程隨機MySql儲存過程
- 假資料填充錯誤記錄
- MySQL資料庫delete資料時,不支援表別名MySql資料庫delete
- mysql複製表結構和資料MySql
- MySQL超大表刪除資料過程MySql
- MySQL資料庫之分庫分表方案MySql資料庫
- MySql 表資料的增、刪、改、查MySql
- mysql怎麼清空表中的資料MySql
- 運用JS 實現隨機點名 (隨機點名)JS隨機
- 怎樣快速搞定laravel資料填充與資料遷移Laravel
- 2-ES6資料位數填充
- 從資料集中隨機抽取一定數量的資料隨機