- 有這樣的機會嗎?假設我們有一個整數范圍。我們遍歷它們并發現它們不超過 65535。所以,現在我們知道這
SMALLINT將是一個合適的型別,并將創建一個包含適當型別列的表!我們應該怎么做?
- 我嘗試了各種組合,例如:
但他們都失敗了,最終抱怨SET @ty := "INT"; CREATE TABLE tab ( id @ty );@ty。那么,另一個問題是我們是否可以保存在服務器腳本中@variable(asINT或 as"INT")?
非常感謝您的寶貴時間!
uj5u.com熱心網友回復:
通過回圈它們并發現它們不超過 65535,如果您的意思是最大值不超過 65535,那么我們可以使用 max() 函式來獲取最大值。如果您指的是范圍內的值的數量,則應使用 count() 函式。接下來我們可以執行條件檢查來確定應該使用哪種數字型別。剩下的就是使用 PREPARED STATEMENT 根據條件檢查的結果創建想要的表。為了說明,我們創建一個表并插入值來模擬數字范圍。然后使用一個程序來動態創建預期的表。
create table numbers (n int);
insert numbers values(1),(2),(70000);
delimiter //
drop procedure if exists create_table //
create procedure create_table()
begin
declare num_range int;
select max(n) from numbers into num_range; -- supposing you mean the highest values does not exceed 65535
If num_range<65536 then
set @create_tb_stmt=concat('create table `tab` (id smallint);');
else
set @create_tb_stmt=concat('create table `tab` (id int);');
end if;
drop table if exists `tab` ;
PREPARE stmt FROM @create_tb_stmt;
EXECUTE stmt;
end//
call create_table // -- call the procedure to make it happen
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/460288.html
