0

私は mysql とオンライン フォーラムが初めてで、まだプログラミングの初心者です。参照制約を適用しようとしています。 Dno 列と Employee テーブルに値 (つまり 76) を挿入または更新するたびに、一致する値を持たない 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';
4

1 に答える 1

2

テーブルを作成するときに「engine=InnoDB」を追加してみてください。バージョンとプラットフォームに応じて、テーブルのデフォルトのストレージ形式は MyISAM であり、参照整合性はチェックされません。

Linux で実行されている 5.0.91-log MySQL Community Server の例を次に示します。

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>
于 2013-07-10T21:54:19.867 に答える