我想让doctorid在我的病人桌上成为一把外键。
所以我创建了所有表格 - 主要问题是当我去桌子时&gt; <结构>关系视图只有主键出现,我可以创建一个外键(它已经是我想保留的某个表的主键 - 即患者表患者可以更改,但医生Id-我有一个医生表也 - 没有启用)。
我在关系视图中有另外一个带有两个复合键(medicineid和patientid)的表,它可以让我改变它们
我是否必须将患者表中医生ID的索引转换为其他内容?两者都不能成为主键,因为患者ID是患者表的主要依据 - 医生是外国人。
我希望任何人都可以提供帮助
亲切的问候
答案 0 :(得分:16)
你可以用老式的方式来做...用一个看起来像这样的SQL语句
ALTER TABLE table_name
ADD CONSTRAINT fk_foreign_key_name
FOREIGN KEY (foreign_key_name)
REFERENCES target_table(target_key_name);
这假设密钥已存在于相关表中
答案 1 :(得分:12)
必须将密钥编入索引以应用外键约束。为此,请按照步骤进行操作。
您现在可以将 DOCTOR_ID 指定为外国人。
答案 2 :(得分:2)
当您创建表格时,您可以给出如下所示。
CREATE TABLE categories(
cat_id int not null auto_increment primary key,
cat_name varchar(255) not null,
cat_description text
) ENGINE=InnoDB;
CREATE TABLE products(
prd_id int not null auto_increment primary key,
prd_name varchar(355) not null,
prd_price decimal,
cat_id int not null,
FOREIGN KEY fk_cat(cat_id)
REFERENCES categories(cat_id)
ON UPDATE CASCADE
ON DELETE RESTRICT
)ENGINE=InnoDB;
当表格创建后如此
ALTER table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name(columns)
REFERENCES parent_table(columns)
ON DELETE action
ON UPDATE action;
以下为例。
CREATE TABLE vendors(
vdr_id int not null auto_increment primary key,
vdr_name varchar(255)
)ENGINE=InnoDB;
ALTER TABLE products
ADD COLUMN vdr_id int not null AFTER cat_id;
要将外键添加到products表,请使用以下语句:
ALTER TABLE products
ADD FOREIGN KEY fk_vendor(vdr_id)
REFERENCES vendors(vdr_id)
ON DELETE NO ACTION
ON UPDATE CASCADE;
用于删除密钥
ALTER TABLE table_name
DROP FOREIGN KEY constraint_name;
希望这有助于学习FOREIGN键的工作原理
答案 3 :(得分:2)
要创建关系,表 Storage Engine 必须为 InnoDB 。您可以在操作标签中进行编辑。
然后,您需要确保主表中的 id 列已建立索引。它应该显示在结构选项卡的索引部分。
最后,您可以在结构标签中看到选项关系视图。进行编辑时,您将能够在外部表中选择父列来创建关系。
请参阅附件。我希望这对任何人都有用。
答案 4 :(得分:0)
一个简单的SQL示例如下:
ALTER TABLE `<table_name>` ADD `<column_name>` INT(11) NULL DEFAULT NULL ;
确保在表名和列名中使用反引号``