2013-07-10 80 views
0

我是新来的MySQL和网上论坛,并且仍然有一些对编程新手,请我试图强制引用约束,每次我插入或更新的值是什么(即76在DNO列和Employee表),它的工作原理,即使它是一个外键在不具有匹配值Department表引用PK Dnumber。我如何执行参照违规?如何强制引用约束(外键)

CREATE TABLE EMPLOYEE 
(Fname VARCHAR(15) NOT NULL, 
Minit CHAR, 
Lname VARCHAR(15) NOT NULL, 
Ssn CHAR(9) NOT NULL, 
Bdate DATE, 
Address VARCHAR(30), 
Sex CHAR, 
Salary DECIMAL(10,2), 
Super_ssn CHAR(9), 
Dno INT NOT NULL, 
PRIMARY KEY (Ssn), 
FOREIGN KEY (Super_ssn) REFERENCES EMPLOYEE(Ssn), 
FOREIGN KEY (Dno) REFERENCES DEPARTMENT(Dnumber)); 


CREATE TABLE DEPARTMENT 
(Dname VARCHAR(15) NOT NULL, 
Dnumber INT NOT NULL, 
Mgr_ssn CHAR(9) NOT NULL, 
Mgr_start_date DATE, 
PRIMARY KEY (Dnumber), 
UNIQUE (Dname), 
FOREIGN KEY (Mgr_ssn) REFERENCES EMPLOYEE(Ssn)); 

--------------------------Example of the Update code------------------ 
UPDATE EMPlOYEE 
SET Dno='12' 
WHERE Fname='Sandra'; 
+2

请不要张贴在CAPS您的问题标题或文本(代码是罚款)。在所有CAPS中打字很难阅读,这很烦人,它不会让你更快得到答案。 Shift键放在键盘上以允许输入文本以便更易读。 (SHOUTING也被认为很粗鲁。):-)另外,请不要在标题中加入标签信息。这里的标记系统非常擅长对事物进行分类,并且不需要帮助。 :-)请参阅[应的问题包括“标签”,在他们的头衔?(http://meta.stackexchange.com/q/19190/172661)。谢谢。 –

+0

如果您已经定义了两个'Dno'和'Dnumber'为'INT',为什么要赋予它们一个字符值(''12'')?它应该是'UPDATE EMPLOYEE SET Dno = 12 WHERE Fname ='Sandra''。 –

+0

@KenWhite我的帽子很抱歉,感谢您的留言。我也无意加入“”〜12 – user2447830

回答

2

尝试在创建表格时添加“engine = InnoDB”。根据版本和平台,表格的默认存储格式为MyISAM,并且不会检查参照完整性。

下面是一个例子5.0.91日志运行在Linux上的MySQL社区服务器:

mysql> CREATE TABLE Department 
    -> (dno INTEGER NOT NULL, 
    -> PRIMARY KEY (dno)); 
Query OK, 0 rows affected (0.04 sec) 

mysql> CREATE TABLE Employee 
    -> (eno INTEGER NOT NULL, 
    -> works_at INTEGER NOT NULL, 
    -> PRIMARY KEY (eno), 
    -> FOREIGN KEY (works_at) REFERENCES Department(dno)); 
Query OK, 0 rows affected (0.03 sec) 

mysql> INSERT INTO Employee (eno, works_at) VALUES (17, 4711); 
Query OK, 1 row affected (0.02 sec) 

mysql> DROP TABLE Employee; 
Query OK, 0 rows affected (0.00 sec) 

mysql> DROP TABLE Department; 
Query OK, 0 rows affected (0.00 sec) 

mysql> CREATE TABLE Department 
    -> (dno INTEGER NOT NULL, 
    -> PRIMARY KEY (dno)) ENGINE=InnoDB; 
Query OK, 0 rows affected (0.15 sec) 

mysql> CREATE TABLE Employee 
    -> (eno INTEGER NOT NULL, 
    -> works_at INTEGER NOT NULL, 
    -> PRIMARY KEY (eno), 
    -> FOREIGN KEY (works_at) REFERENCES Department(dno)) ENGINE=InnoDB; 
Query OK, 0 rows affected (0.09 sec) 

mysql> INSERT INTO Employee (eno, works_at) VALUES (17, 4711); 
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`studentbasen/Employee`, CONSTRAINT `Employee_ibfk_1` FOREIGN KEY (`works_at`) REFERENCES `Department` (`dno`)) 

mysql> 
+0

帕德伦-McCarth,我想你建议和它的工作,谢谢! – user2447830