为了以更线性的方式记录SQL代码,我想在创建语句之前显示将要创建的表的描述。因此,我的第一个想法是将其放入用户定义的变量中,以便我可以使用它来填充注释指令,但似乎不支持该变量(至少在我必须处理的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注释,但是它不会出现在记录的数据库结构中,也不会以重复的代价出现。
答案 0 :(得分:1)
我们也许可以使用动态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条语句来覆盖要运行的完整逻辑。
答案 1 :(得分:0)
尽管它与问题不符,但这是解决其潜在问题的一种方法:将表的描述直接放在其创建语句旁边。
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',
;