2016-02-07 64 views
2

我想用一條語句(查詢)創建多個表。如何在mysql的循環中創建create table語句

Loop 
    start 
    (
     create table a 
    ) 
    a =a +1 
end loop 

所以說它創造標註爲TABLE1TABLE2 100桌,...

+0

你可能想解釋一點...... –

+0

做編輯的幫助? – akshay

+0

100個表相同的列名和數據類型? –

回答

0

請嘗試以下步驟。

DROP PROCEDURE IF EXISTS `createTableProcTest`; 
delimiter // 
CREATE PROCEDURE `createTableProcTest`() 
BEGIN 
    DECLARE count INT Default 0; 
     simple_loop: LOOP 
     SET @a := count + 1; 
     SET @statement = CONCAT('Create table Table',@a,' (name VARCHAR(70), age int);'); 
     PREPARE stmt FROM @statement; 
       EXECUTE stmt; 
       DEALLOCATE PREPARE stmt; 
       SET count = count + 1; 
     IF count=100 THEN 
      LEAVE simple_loop; 
     END IF; 
END LOOP simple_loop; 
END// 

爲了執行只需做到以下幾點:

Call createTableProcTest();

通過執行上述步驟100個表格將一個具有名稱表1,...,table100創建。 而表結構將類似於以下內容:

enter image description here

N:B:程序執行可能需要幾秒鐘。不要急躁。

-1

您需要給我們更多的細節,但我認爲在循環內調用存儲過程來創建過程更容易。

您需要創建一個過程來創建您需要的表並在循環內調用此過程。

例:

CREATE PROCEDURE SP_Create_Table(IN TABLENAME VARCHAR(50))BEGIN SET @sql = CONCAT( 'CREATE TABLE',表名, '(列1 INT(11))');
準備從@sql發送; EXECUTE stmt; DEALLOCATE PREPARE stmt; END

現在,調用創建循環內表過程

DELIMITER //創建功能CalcIncome(starting_value INT)RETURNS INT BEGIN

DECLARE收入INT; SET收入= 0; label1:WHILE income < = 50 DO call SP_Create_Table(CONVERT(VARCHAR(50),starting_value)); END WHILE label1;返回收入;結束; // DELIMITER;

希望我HALP你,

相關問題