【问题标题】:Sqlite: adding COMMENT ON descriptions to tables and columns?Sqlite:向表和列添加 COMMENT ON 描述?
【发布时间】:2011-11-17 13:54:13
【问题描述】:

在 MySQL Workbench 中,您可以将 COMMENTs 添加到 MySQL 数据库中的表和列中。

Sqlite 是否支持向表和列添加 cmets?

【问题讨论】:

    标签: sqlite comments metadata


    【解决方案1】:

    我认为不会。 "SQL As Understood By SQLite" 页面未提及表或列 cmets,CREATE TABLEALTER TABLE 文档也未提及。

    另外,Unsupported SQL wiki 页面有这个:

    2009-08-04:表格和列 cmets - 我搜索了 doco,但找不到任何关于将 cmets 应用于表格或其列的信息。

    是的,这是 2009 年的 wiki 页面,但其余文档支持该注释。

    但是,SQLite 确实保留了您放入 DDL 中的 SQL cmets。如果您将此提供给sqlite3 CLI 工具:

    CREATE TABLE User
            -- A table comment
    (
            uid INTEGER,    -- A field comment
            flags INTEGER   -- Another field comment
    );
    

    然后你会从 .schema 命令得到准确的返回:

    sqlite> .schema
    CREATE TABLE User
            -- A table comment
    (
            uid INTEGER,    -- A field comment
            flags INTEGER   -- Another field comment
    );
    

    因此,如果您可以控制用于创建表的 DDL,您应该能够伪造它。

    【讨论】:

    • 除了使用.schema,您还可以获得与使用SQL 语句相同的结果:SELECT name, sql FROM sqlite_master WHERE type='table' AND name='{$table}' ORDER BY name;(其中$table 是表的名称)。见:stackoverflow.com/a/6617764/180733
    • 这很好,但遗憾的是 cmets 没有出现在 SQLiteStudio 的 DDL 视图中。
    【解决方案2】:

    (这不是原发帖人要问的,但这是我第一次根据标题中的关键字找到这个问题时所要寻找的。)

    如何在 SQLite 中制作 cmets

    在SQLite代码中制作cmets有两种方式:

    连字符

    -- this is my comment
    SELECT * FROM employees;
    

    C 风格

    /* this is my comment */ 
    SELECT * FROM employees;
    

    【讨论】:

    • 谢谢,这很有用。
    【解决方案3】:

    使用 sqlite 创建表时(我在 python 中使用sqlite3),不支持COMMENT 部分。

    这失败了(在完整的 MySql 语法中工作):

    CREATE TABLE `Info` (
      `Test` VARCHAR(512) NOT NULL COMMENT 'Column info here'
    );
    

    这有效(列声明中没有COMMENT):

    CREATE TABLE `Info` (
      `Test` VARCHAR(512) NOT NULL
    );
    

    【讨论】:

      【解决方案4】:

      我很欣赏这是一篇旧帖子,但值得一提的是,您可以在 SQLITE3、Python 和 Java 中创建表时添加 cmets。可能也适用于其他语言。

      您需要像在 SQLITE3 提示符下键入命令一样向 sql 字符串添加新行 -

      sql_str = 'CREATE TABLE properties (\nproperty TEXT NOT NULL, -- A property\nvalue TEXT -- The value of the property\n);'
      

      当执行时,表是这样创建的:

      sqlite> .schema

      创建表属性(

      property TEXT NOT NULL, -- 一个属性

      value TEXT -- 属性的值

      );

      我怀疑这是可行的,因为连接器实际上是通过命令提示符而不是某种 API 在命令中回显。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-21
        • 1970-01-01
        相关资源
        最近更新 更多