无法在 mysql 中添加外键约束

Cannot Add foreign key constraint in mysql

我在应用外键时收到此 "Cannot add foreign key constraint" 错误。

否则查询绝对没问题。 MySQL 查询的语法似乎没有任何问题。

        //Department Table
                query = "CREATE TABLE IF NOT EXISTS department "
                    + "("
                    + "dept_id INT PRIMARY KEY AUTO_INCREMENT,"
                    + "dept_name VARCHAR(40) NOT NULL"
                    + ")ENGINE=InnoDB";
                command = new MySqlCommand(query, connection);
                command.ExecuteNonQuery();

                //Designation Table
                query = "CREATE TABLE IF NOT EXISTS designation "
                    + "("
                    + "desig_id INT PRIMARY KEY AUTO_INCREMENT,"
                    + "designation VARCHAR(40) NOT NULL"
                    + ")ENGINE=InnoDB";
                command = new MySqlCommand(query, connection);
                command.ExecuteNonQuery();

                // PayNature Table
                query = "CREATE TABLE IF NOT EXISTS paynature "
                    + "("
                    + "paynature_id INT PRIMARY KEY AUTO_INCREMENT,"
                    + "pay_nature VARCHAR(40) NOT NULL"
                    + ")ENGINE=InnoDB";
                command = new MySqlCommand(query, connection);
                command.ExecuteNonQuery();

                // Employee Type
                query = "CREATE TABLE IF NOT EXISTS employeetype "
                    + "("
                    + "emptype_id INT PRIMARY KEY AUTO_INCREMENT,"
                    + "emp_type VARCHAR(40) NOT NULL"
                    + ")ENGINE=InnoDB";
                command = new MySqlCommand(query, connection);
                command.ExecuteNonQuery();

                // Pay Scale Table
                query = "CREATE TABLE IF NOT EXISTS payscale "
                    + "("
                    + "payscale_id INT PRIMARY KEY AUTO_INCREMENT,"
                    + "payscale VARCHAR(40) NOT NULL, " // Optional
                    + "basic_salary DEC(10,3) NOT NULL"
                    + ")ENGINE=InnoDB";
                command = new MySqlCommand(query, connection);
                command.ExecuteNonQuery();

                // Employee Table
                query = "CREATE TABLE IF NOT EXISTS employee "
                    + "("
                    + "emp_id INT PRIMARY KEY AUTO_INCREMENT,"
                    + "emp_name VARCHAR(40) NOT NULL,"
                    + "emptype_id_fk VARCHAR(40)," //Optional
                    + "dept_id_fk INT,"    //Optional
                    + "desig_id_fk INT,"   //Optional
                    + "payscale_id_fk INT NOT NULL, "
                    + "INDEX(emptype_id_fk, dept_id_fk, desig_id_fk, payscale_id_fk),"

                    //Employee - R - EmployeeType
                    + "FOREIGN KEY(emptype_id_fk)"
                    + "REFERENCES employeetype(emptype_id)"
                    + "ON UPDATE CASCADE,"

                    // Employee - R - Department 
                    + "FOREIGN KEY(dept_id_fk)"
                    + "REFERENCES department(dept_id)"
                    + "ON DELETE SET NULL ON UPDATE CASCADE,"


                    // Employee - R- Designation
                    + "FOREIGN KEY(desig_id_fk)"
                    + "REFERENCES designation(desig_id)"
                    + "ON DELETE SET NULL ON UPDATE CASCADE ,"

                    // Employee - R - Payscale
                    + "FOREIGN KEY(payscale_id_fk)"
                    + "REFERENCES payscale(payscale_id)"
                    + "ON DELETE CASCADE ON UPDATE CASCADE"
                    + ")ENGINE=InnoDB";

                command = new MySqlCommand(query, connection);
                command.ExecuteNonQuery();

刚看了第一张。

"emptype_id_fk VARCHAR(40),"
.....
+ "FOREIGN KEY(emptype_id_fk)"
+ "REFERENCES employeetype(emptype_id)"
....

但是 employeetype table 的 emptype_id 字段声明为 INT(11)

可能您希望 employee table 中的字段 emptype_id_fk 为 INT。
进行此更改后,查询有效