c# - 无法在 mysql 中添加外键约束

标签 c# mysql sql database foreign-key-relationship

我在应用外键时收到“无法添加外键约束”错误。

否则查询绝对可以正常工作。 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 表的 emptype_id 字段被声明为 INT(11)

您可能希望 employee 表中的字段 emptype_id_fk 为 INT。
进行此更改后,查询可以正常工作

关于c# - 无法在 mysql 中添加外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37967132/

相关文章:

c# - "Microsoft.ACE.OLEDB.12.0” 在 Windows 10 中无法识别

c# - 在定义为静态资源的 Storyboard 上设置 Storyboard.Targetname

c# - 从 SQL Server 请求 webform 中的 nvarchar 类型时出错

mysql - 它表示什么时间?

mysql - 查找 SQL 查询瓶颈

c# - XML反序列化C#数组

mySQL - 插入三个表

php - 问题更新到数据库 - 白屏

mysql - sql获取每个类别的最多3个分数行

java - 如何使用 SQL WHERE 子句搜索包含单引号的字符串