整个表上的SQL Not Null约束

时间:2011-09-28 13:48:41

标签: mysql sql database ddl

我想知道是否有任何方法可以制作一个可以应用于我表中所有属性的Not Null约束。我知道我可以在每一行添加一个,但我只是想学会提高效率。我尝试在线搜索,但我没有找到关于这个主题的任何内容。

谢谢!

更多信息:

我想我的问题可以概括为“有没有办法定义表范围或数据库范围的约束?”。对于整个数据库,我需要将每个varchar的默认值设置为''(空字符串),但是现在我正在为每个varchar手动执行此操作。

同样,我已经做了大部分工作,但似乎应该有办法避免这种重复。

3 个答案:

答案 0 :(得分:2)

不,没有办法做到这一点。你必须在列级指定这个,但这只是你做过一次。也许是每列更多或一次点击几次击键。没有低效率。

答案 1 :(得分:2)

来自http://dev.mysql.com/doc/refman/5.1/en/create-table.html - 唯一可以在列上放置null / not null的地方。

column_definition:
    data_type [NOT NULL | NULL] [DEFAULT default_value]
      [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
      [COMMENT 'string']
      [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]
      [STORAGE {DISK|MEMORY|DEFAULT}]
      [reference_definition]

我没有理由拥有表约束,IMO。 DDL指定每列中数据的约束,而不是列定义本身。虽然人们可能希望将其作为语法糖,但似乎可能存在缺点 - 1)添加新列可能需要更改表约束2)MySQL默认为NULL并且这可能导致混淆

答案 2 :(得分:0)

您是否考虑过triggersstored procedures?这完全取决于您的DBMS。但它也增加了数据库的工作量。

忘记CHECK子句,因为mySql忽略它。