MySQL: 我们如何动态地选择合适的类型?

MySQL: How can we dynamically choose an appropriate type?

  1. 有这样的机会吗?比方说,我们有一个整数范围。我们遍历它们并发现它们不超过 65535。所以,现在我们知道 SMALLINT 将是一个 suitable 类型并且将创建一个带有列的 table合适的类型!我们该怎么做?
  1. 我尝试过各种组合,例如:
    SET @ty := "INT";
    
    CREATE TABLE tab (
      id @ty
    );
    
    但他们都失败了,并最终在 @ty 上抱怨。 所以,另一个问题是我们是否可以在服务器脚本中保留 @variable(如 INT"INT")?

非常感谢您的宝贵时间!

通过遍历它们,发现它们不超过65535,如果你的意思是最高值不超过65535 , 然后我们可以使用 max() 函数来获取最大值。如果您指的是范围内值的数量,则应改用 count() 函数。接下来我们可以执行条件检查以确定应使用哪种数字类型。剩下的就是使用 PREPARED STATEMENT 根据条件检查的结果创建想要的 table。为了说明,我们创建一个 table 并插入值来模拟数字范围。然后使用程序动态创建预期的 table。

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