これは純粋なMySQL SQLコードでのみ可能です。
これは私が
CREATE TABLE car_transaction
(
transaction_id INTEGER NOT NULL AUTO_INCREMENT, # included AUTO_INCREMENT HERE
customer_id INTEGER,
staff_id INTEGER,
car_ID INTEGER,
QTY INTEGER,
date_ordered DATE, # made DATE type
date_returned DATE, # made DATE type
PRIMARY KEY (transaction_id)
)を使用しました表です。 CUSTOMER_IDため
は、我々は1-1000を持って、staff_id我々は1-5のスタッフを持って、car_idは1〜10,000の間 で、数量は1-3
これらのフィールドがある範囲の使用について明確な要件を持っていますしたがって、例えば、顧客IDの式
であり、この式は
SELECT ROUND((RAND() * (MAX - MIN)) + MIN)
あるこれらの範囲を生成する式との組み合わせでのMySQLのrand()関数を使用することができ日付の
SELECT ROUND((RAND() * (1000 - 1)) + 1)
最初の試行結果
ROUND((RAND() * (1000 - 1)) + 1)
----------------------------------
648
2回目の試行結果
ROUND((RAND() * (1000 - 1)) + 1)
----------------------------------
486
DATE_ORDEREDは1975年から2017年までで、1975年から2017年までであるdate_returned、 date_orderedとdate_returnedの差は で、2〜3日間である必要がありますs。
日付の式は少し複雑です。 しかし、それはまだ今、私たちはすべて結合するデータオフ1つのレコードを生成しますROUND((RAND() * (MAX - MIN)) + MIN)
式
SELECT DATE(FROM_UNIXTIME(ROUND((RAND() * (UNIX_TIMESTAMP('2017-12-31') - UNIX_TIMESTAMP('1975-01-01'))) + UNIX_TIMESTAMP('1975-01-01'))))
最初の試行結果
DATE(FROM_UNIXTIME(ROUND((RAND() * (UNIX_TIMESTAMP('2017-12-31') - UNIX_TIMESTAMP('1975-01-01'))) + UNIX_TIMESTAMP('1975-01-01'))))
-------------------------------------------------------------------------------------------------------------------------------------
2005-08-04
2回目の試行結果
DATE(FROM_UNIXTIME(ROUND((RAND() * (UNIX_TIMESTAMP('2017-12-31') - UNIX_TIMESTAMP('1975-01-01'))) + UNIX_TIMESTAMP('1975-01-01'))))
-------------------------------------------------------------------------------------------------------------------------------------
1998-07-22
を使用しています最後のステップ。
クエリ
SELECT
record.customer_id
, record.staff_id
, record.car_id
, record.qty
, record.date_ordered
, record.date_ordered + INTERVAL record.random_day DAY AS date_returned
FROM (
SELECT
(SELECT ROUND((RAND() * (1000 - 1)) + 1)) AS customer_id
, (SELECT ROUND((RAND() * (5 - 1)) + 1)) AS staff_id
, (SELECT ROUND((RAND() * (10000 - 1)) + 1)) AS car_id
, (SELECT ROUND((RAND() * (3 - 1)) + 1)) AS qty
, (DATE(FROM_UNIXTIME(FLOOR((RAND() * (UNIX_TIMESTAMP('2017-12-31') - UNIX_TIMESTAMP('1975-01-01'))) + UNIX_TIMESTAMP('1975-01-01'))))) AS date_ordered
, (SELECT ROUND((RAND() * (3 - 2)) + 2)) AS random_day
FROM
DUAL
)
record
最初の試行結果
customer_id staff_id car_id qty date_ordered date_returned
----------- -------- ------ ------ ------------ ---------------
633 2 5553 3 2011-11-21 2011-11-24
2回目の試行結果
customer_id staff_id car_id qty date_ordered date_returned
----------- -------- ------ ------ ------------ ---------------
300 4 2380 2 2010-08-21 2010-08-23
手順
DELIMITER $$
CREATE
PROCEDURE generate_random_data_car_transaction(IN numberOfRows INT)
BEGIN
DECLARE counter INT;
SET counter = 1;
WHILE (counter <= numberOfRows) DO
INSERT INTO
car_transaction
(
customer_id
, staff_id
, car_id
, qty
, date_ordered
, date_returned
)
SELECT
record.customer_id
, record.staff_id
, record.car_id
, record.qty
, record.date_ordered
, record.date_ordered + INTERVAL record.random_day DAY AS date_returned
FROM (
SELECT
(SELECT ROUND((RAND() * (1000 - 1)) + 1)) AS customer_id
, (SELECT ROUND((RAND() * (5 - 1)) + 1)) AS staff_id
, (SELECT ROUND((RAND() * (10000 - 1)) + 1)) AS car_id
, (SELECT ROUND((RAND() * (3 - 1)) + 1)) AS qty
, (DATE(FROM_UNIXTIME(FLOOR((RAND() * (UNIX_TIMESTAMP('2017-12-31') - UNIX_TIMESTAMP('1975-01-01'))) + UNIX_TIMESTAMP('1975-01-01'))))) AS date_ordered
, (SELECT ROUND((RAND() * (3 - 2)) + 2)) AS random_day
FROM
DUAL
)
record;
SET counter = counter + 1;
END WHILE;
END$$
DELIMITER ;
CALLプロシージャ
CALL generate_random_data_car_transaction(500000);
クエリ
SELECT * FROM car_transaction
結果
transaction_id customer_id staff_id car_ID QTY date_ordered date_returned
-------------- ----------- -------- ------ ------ ------------ ---------------
1 757 2 2621 2 1982-03-10 1982-03-13
2 818 1 368 3 1989-06-06 1989-06-08
3 47 2 8538 2 2009-09-30 2009-10-02
4 670 2 4597 2 2005-03-20 2005-03-22
5 216 2 7651 3 2000-10-08 2000-10-10
6 502 2 1364 2 1978-03-28 1978-03-30
7 204 2 1910 2 2009-03-17 2009-03-20
8 398 2 3934 1 2013-07-02 2013-07-04
9 474 1 9286 2 1991-08-06 1991-08-09
10 976 1 724 2 2000-05-09 2000-05-12
...
...
...
499990 20 5 6595 2 1990-05-01 1990-05-03
499991 839 1 7315 2 1989-12-05 1989-12-07
499992 14 3 1274 2 1987-11-12 1987-11-14
499993 539 2 5422 1 1994-06-24 1994-06-26
499994 728 5 7441 3 2000-05-12 2000-05-15
499995 512 3 4039 2 1978-02-03 1978-02-06
499996 732 5 2599 2 1990-01-11 1990-01-14
499997 304 5 6098 2 2011-11-25 2011-11-27
499998 818 2 8196 2 1984-01-14 1984-01-16
499999 617 5 8160 2 2016-03-15 2016-03-18
500000 864 3 7837 2 1980-01-13 1980-01-15
ランダムなデータをテーブルに入れたいですか? –
私はええ、ちょうどデータをテストする!ありがとう! – Keith
* ...する方法...:* 1)使用するプログラミング言語を選択してください。 2)ジョブを完了させるコードを書く。 3)2)で問題が発生した場合は、戻ってコードを投稿して質問してください。 – Binarus