是否可以在其创建语句之前定义 MySQL table 注释?

Is it possible to have a MySQL table comment defined before its create statement?

为了以更线性的方式记录 SQL 代码,我想在创建语句之前显示将要创建的 table 的描述。所以我的第一个想法是把它放在一个用户定义的变量中,我可以用它来填充注释指令,但它似乎不受支持(至少在我必须处理的 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';

是否有其他方法可以实现最初的目标?当然,在创建语句之前总是可以使用 -- SQL 注释,但是它不会出现在记录的数据库结构中,或者以可怕的重复为代价。

我们也许可以使用动态 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 个语句来涵盖您想要 运行.

的完整逻辑

虽然它与问题不符,但这里有一个解决其潜在问题的方法:将 table 的描述直接放在它的创建语句旁边。

MySQL语法要求把注释附在table最后,但是如果table有很多字段,每个字段声明在一行或几行,那么table 注释可以在看到它的声明开始时快速发送。

现在,可以很容易地创建一个 table 并将其注释作为唯一的附加语句,然后将其更改为包含它应该包含的字段。

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',
  ;