如何创建一个只允许在允许的情况下插入数据的表

时间:2014-11-14 06:35:02

标签: sql database oracle

如果数据与我想在NAME中允许的数据匹配,我如何创建一个只允许将数据放入NAME的表。如Bla1Bla2

CREATE TABLE Table1 (
    NAME VARCHAR(23)
    NAME has to be one of them: ('Bla1', 'Bla2')
)

2 个答案:

答案 0 :(得分:5)

最好的方法可能是在第二个表中包含所有允许的名称,并从Table1中的name字段到另一个表中的name字段创建一个FOREIGN KEY。这将自动失败任何名称未包含在允许名称列表中的插入查询。

这比ENUM这样的东西有优势,因为每次你想要允许另一个名字时它要求你重建你的表(这是一个非常昂贵的操作)允许您稍后通过将其添加到另一个表来为每个名称添加其他相关信息。

这是一篇很棒的文章,说明为什么使用外键比在表格中使用枚举或其他此类检查要好得多:http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/

答案 1 :(得分:1)

试试这个:

CREATE TABLE Table1 (
  name VARCHAR(23) CHECK( name IN ('Bla1','Bla2') )
);