我在应用外键时收到“无法添加外键约束”错误。
否则查询绝对可以正常工作。 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/