是否可以在其create语句之前定义mysql表注解?

zpqajqem  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(352)

为了以更线性的方式记录sql代码,我想在creation语句之前显示将要创建的表的描述。所以我的第一个想法是把它放在一个用户定义的变量中,我可以用它来填充注解指令,但它似乎不受支持(至少在我必须处理的5.6版本中):

set @description = 'The following table is a useless dummy test.';
drop table if exists `test`;
create table `test` (dummy int) comment @test; -- syntax error
show table status where name='test';

有没有其他方法可以达到最初的目标?当然,使用 -- 在creation语句之前添加sql注解,但是这样它就不会出现在记录的数据库结构中,或者以可怕的重复为代价。

g6baxovj

g6baxovj1#

尽管它与问题不匹配,但这里有一个解决其根本问题的方法:将表的描述直接放在它的creation语句旁边。
mysql语法要求将附加到表的注解放在末尾,但是如果表有许多字段,每个字段在一行或几行上声明,那么可以在看到其声明开始时快速发送表注解。
现在,您可以轻松地创建一个表,将其注解作为唯一的附加语句,然后将其修改为包含它应该包含的字段。

CREATE TALBE `test` COMMENT 'Informative description';
ALTER TABLE test
  ADD id
    INT UNSIGNED NOT NULL AUTO_INCREMENT
    COMMENT 'Description of the id field',
  ADD data
    BLOB
    COMMENT 'Description of the data field',
  ;
x33g5p2x

x33g5p2x2#

我们可以使用动态sql来实现这一点:

SET @description = 'The following table is a useless dummy test.';
SET @sql = CONCAT('CREATE TABLE test (dummy int) COMMENT=''', @description, '''');
PREPARE stmt FROM @sql;
EXECUTE stmt;

请注意,每个准备好的语句正是这样的;一句话。因此,要从命令行执行此操作,您可能需要3条语句来涵盖要运行的完整逻辑。

相关问题