sql - 引用另一个外键时,SQL“外键约束格式不正确”
问题描述
我正在尝试为外键创建外键(我认为这是可能的),但我不断收到错误消息,即约束的格式不正确
CREATE TABLE Staff (
ssn INT,
name VARCHAR(127),
gender VARCHAR(127),
age TINYINT UNSIGNED,
address VARCHAR(255),
phone_number CHAR(12),
wage FLOAT(3,2),
PRIMARY KEY (ssn));
CREATE TABLE Admininstration (
ssn INT,
FOREIGN KEY (ssn) REFERENCES Staff(ssn),
PRIMARY KEY (ssn));
CREATE TABLE Wards (
ward_clerk INT,
ward_id CHAR(2),
floor_number TINYINT,
FOREIGN KEY (ward_clerk) REFERENCES Administration(ssn),
PRIMARY KEY (ward_id)
);
ERROR 1005 (HY000): Can't create table `HospitalManagement`.`Wards`
(errno: 150 "Foreign key constraint is incorrectly formed")
如果我更改最后一条语句以引用 Staff 表
CREATE TABLE Wards (
ward_clerk INT,
ward_id CHAR(2),
floor_number TINYINT,
FOREIGN KEY (ward_clerk) REFERENCES Staff(ssn),
PRIMARY KEY (ward_id)
);
它有效,但这不是我想要做的。如果这不可能,我知道我将如何改变它,但我想这样做。任何建议表示赞赏。
解决方案
在适当的情况下,制作列NOT NULL
。
请注意存储 SSN 的严重安全隐患。
wage
在 -9.99 和 9.99 之间?便宜的。不要FLOAT
用来赚钱;使用DECIMAL
.
推荐阅读
- node.js - 试图从 express 的 url 路径中获取用户名
- python - Seaborn:将 seaborn 从 0.9.0 升级到 0.11.0 后无法添加色调
- java - Android studio 游戏速度不同的设备
- javascript - 如何使用javascript在给定单词的输出中打印字典单词
- apache-spark - Databricks“使用创建表”选项记录在哪里
- algorithm - 给定两个未排序的数组,找出 A[i] > X 和 B[i] > Y 的对数
- python - 将多个路径作为命令行参数传递的最佳实践,以说明带有空格的路径
- reactjs - 您如何使用 Framer Motion 为填充设置动画?
- c - 带有命名管道的程序有时工作有时会失败
- python - 有没有办法优化我的列表理解以获得更好的性能?它比 for 循环慢