建立測試用 流水號Table
這個存儲過程名為 createNumberTable,用於創建一個包含數字的記憶體表(sequence_number),以便生成假數據或進行測試。
以下是對這個存儲過程的註解和方法說明:
# Create a number table for generating fake or test data.
DROP PROCEDURE IF EXISTS createNumberTable;
DELIMITER //
CREATE PROCEDURE createNumberTable()
BEGIN
DROP TABLE if exists local_test.sequence_number;
CREATE TABLE local_test.sequence_number
(
id INT UNSIGNED NOT NULL PRIMARY KEY
) ENGINE = Memory;
# add id 0 ~ 100 row data
INSERT INTO sequence_number(id)
SELECT @num := @num + 1
FROM information_schema.INNODB_BUFFER_PAGE a
, (SELECT @num := 0) b
LIMIT 100;
# add id 100 ~ 10000 row data
INSERT INTO sequence_number(id)
SELECT @num := @num + 1
FROM sequence_number a
, (SELECT id
FROM sequence_number
LIMIT 99) b
, (SELECT @num := 100) c;
# check sequence_number data info
SELECT COUNT(1)
, MIN(id)
, MAX(id)
FROM sequence_number;
END //
DELIMITER ;
-- call procedure
CALL createNumberTable();
# According to the 'sequence_number' table, its maximum number of records is 10,000.
# So, if the limit is set to 10, the maximum number of inserted records is 100,000.
# If it's set to 20, the maximum number of inserted records is 200,000, and so forth(on).
INSERT INTO t_big_data_practise(name, content_m, content_t, create_date, type)
SELECT HEX(RAND() * 0xFFFFFFFF),
concat(HEX(RAND() * 0xFFFFFFFF), HEX(RAND() * 0xFFFFFFFF)),
HEX(RAND() * 0xFFFFFFFF),
DATE_ADD('2023-01-01', INTERVAL RAND() * 364 DAY),
LEFT(HEX(RAND() * 0xFFFFFFFF), 2)
FROM local_test.sequence_number a
JOIN (SELECT id
FROM local_test.sequence_number
LIMIT 2000) b;
-- check result
SELECT FORMAT(COUNT(1), 0) AS cnt
, MIN(create_date)
, MAX(create_date)
FROM t_big_data_practise;
這個存儲過程的主要功能是創建 sequence_number
表,並填充一系列數字值,包括從 0 到 100 和從 100 到 10,000 的數字。最後,它通過查詢返回了表中的總行數、最小值和最大值。這個表可以用於測試和生成數據,特別是在需要一個包含連續整數的表時。
而外補充 Postgres 寫法
目前還在熟悉寫法,很多地方還不是很完善,暫時先這樣吧....
DROP PROCEDURE IF EXISTS local_test.createNumberTable;
CREATE OR REPLACE PROCEDURE local_test.createNumberTable()
AS $$
BEGIN
DROP TABLE IF EXISTS local_test.sequence_number;
CREATE TABLE local_test.sequence_number
(
id integer NOT NULL PRIMARY KEY
);
INSERT INTO local_test.sequence_number(id)
SELECT generate_series(1, 10000);
RAISE NOTICE 'Number of rows: %', (SELECT COUNT(1) FROM local_test.sequence_number);
RAISE NOTICE 'Minimum id: %', (SELECT MIN(id) FROM local_test.sequence_number);
RAISE NOTICE 'Maximum id: %', (SELECT MAX(id) FROM local_test.sequence_number);
END;
$$ LANGUAGE plpgsql;
-- call procedure
call local_test.createNumberTable();
Last updated