我在存儲過程中遇到了一些麻煩。我如何從其他多個表中填充範圍和隨機名稱的自動增量表
我想寫一個「創建腳本」,並帶有一個「存儲過程」,在0-100000的時間間隔內輸入「n」。
用戶輸入後,我想要所有的信息進入一個名爲「T」的新表。
SELECT * FROM T;
我希望它打印:
+----+------------+----------+---------------+---+----+-----+
| Id | First Namne| Last Name| Street Address| No| Zip| City|
+----+------------+----------+---------------+---+----+-----+
門牌號碼應在1-300的範圍內。
郵編應該是5個數字,不能以0
每一行開始必須是唯一的,即使我刪除ID列。
I've made 3 files:
1. Contains 500 unique First Names
2. Contains 500 unique Last Names
3. Contains 335 unique Adresses
我的意思是讓新表「t」取一個隨機的名字和隨機的姓氏。這將需要1次地址300次,並使地址不再上升300次,然後繼續到下一個地址,這樣我的所有行都將是唯一的。 enter code here
這是我多遠,來到我的大腦前墜毀:
/*
* Sets database to users
*/
USE users;
/*
* Removes tables if exists
*/
DROP TABLE IF EXISTS t;
DROP TABLE IF EXISTS first_names;
DROP TABLE IF EXISTS last_names;
DROP TABLE IF EXISTS street_names;
/*
* Creating new tables
*/
-- Create table t
CREATE TABLE t(
player_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(20) NOT NULL,
last_name VARCHAR (20) NOT NULL,
street_name VARCHAR (30) NOT NULL,
street_number SMALLINT(3) NOT NULL,
zip MEDIUMINT(5) NOT NULL,
city VARCHAR(20) NOT NULL
);
-- Create table first_names
CREATE TABLE first_names (
first_name_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(20) NOT NULL
);
Source C:\Database\Inlamning\first_names.txt
-- Create table last_names
CREATE TABLE last_names (
last_name_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
last_name VARCHAR(20) NOT NULL
);
Source C:\Database\Inlamning\last_names.txt
-- Create table street_names
CREATE TABLE street_names (
street_name_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
street_name VARCHAR(30) NOT NULL
);
Source C:\Database\Inlamning\street_names.txt
/*
* Create PRECEDURE "generate_adress"
*/
DROP PROCEDURE IF EXISTS generate_adress;
DELIMITER $$
CREATE PROCEDURE generate_adress(x INT, fn VARCHAR(20), ln VARCHAR(20), sn VARCHAR (30), snno SMALLINT(3), zi MEDIUMINT(5), ci VARCHAR(20))
BEGIN
SELECT (SELECT CONCAT("generate_adress", NOW())) as "Start";
IF (x > 100000) THEN
SELECT ("Max allowed adresser are 100000, value set to 100000") AS "Number of address:";
SET x = 100000;
END IF;
INSERT INTO "t" (first_name, last_name, street_name, street_number, zip, city)
END$$
DELIMITER ;
CALL generate_adress(1000);
SELECT * FROM t;
幫助,將不勝感激!
嗯,這不'真的看起來很有效。首先我並不需要獨特的名字。我只想調用我的方法,如「CALL generate(5)」,它會生成5行數據。如果我刪除列的ID,數據應該仍然是唯一的,並且通過街道和交叉連接實現。 此外,我不想交叉連接100500街道和名稱每次執行創建腳本,所以我需要一個解決方案,以更新我在CALL(N)中放置的N值。 我真的很新,所以難以翻譯僞代碼,找不到任何相關的問題 –
你不需要通過250000的100500地址,你只需要從每個表中選擇N行然後加入行號或者在N次迭代的一個while循環中選擇其中的一個。名稱(500x500)和地址(335x300)的交叉連接應該很快。 – Jayvee
他們需要一些時間,但這可能是它應該如何。如何爲此編寫while循環? –