我刚开始使用MySQL并且有一个简单的问题。我想创建一个“My_Table”表,其中包含一个字段“SEX”。我还想创建一个表“SEX_Values”,其中包含字段“CODE”和“VALUE”,其中0 =男性,1 =女性。所以它看起来像这样。
My_Table SEX_Values
+--------+ +--------+--------+
| SEX | | CODE | VALUE |
+--------+ +--------+--------+
| | | 0 | male |
+--------+ +--------+--------+
| 1 | female |
+--------+--------+
我想以某种方式对My_Table中的SEX字段设置约束,以便插入/导入到其中的数据必须与SEX_Values表中的一个代码匹配,如果不匹配,我想抛出一个警告,这样的事情。
My_Table SEX_Values
+--------+ +--------+--------+
| SEX |<reference>| CODE | VALUE |
+--------+ +--------+--------+
| 1 | >OK | 0 | male |
+--------+ +--------+--------+
| 0 | >OK | 1 | female |
+--------+ +--------+--------+
| 0 | >OK
+--------+
| 3 | >Throws Warning
+--------+
任何帮助都会非常感激,因为我以前没有使用过很多SQL。
答案 0 :(得分:4)
您所描述的内容称为FOREIGN KEY。
本质上,它确保了引用完整性 - 换句话说,您不能插入引用表中不存在的任何内容,也不能从主引用表中仍然存在的任何内容中删除任何内容。
因此,在您的情况下,如果Hermaphrodite
中没有My_Table
,您就无法将SEX_Values
插入male
,也无法从SEX_Values
删除male
,如果My_Table
中仍有{{1}}。
答案 1 :(得分:1)
CREATE TABLE SEX_Values
(
`CODE` INT NOT NULL,
`VALUES` VARCHAR(10),
PRIMARY KEY (`CODE`) -- !!
);
CREATE TABLE My_Table
(
SEX INT,
FOREIGN KEY (SEX) REFERENCES SEX_VALUES(`CODE`) -- !!
);
答案 2 :(得分:0)
为什么不使用enum type?
您可以使用
创建表格CREATE TABLE my_table(
sex enum("male", "female") NOT NULL
);
这样你可以像这样插入:
INSERT INTO my_table(`sex`) VALUES("male")
你具有使用字符串的语法优势(我认为这比使用数字代码要清晰得多),MySQL将像使用代码一样优化数据库,并且它将强制执行。
答案 3 :(得分:0)
一个非常简单的解决方案是将sex
列的数据类型设置为bit
,只接受0,1或null值(MSDN ref.)。
在字段定义中也设置NOT NULL
约束,以便排除NULL值。