MySQL中的外键创建问题
我遵循了这篇文章:在两个表之间创建外键。每一次尝试都失败了。有什么我遗漏的吗 这真是令人沮丧,我从来没有想过会遇到这个问题MySQL中的外键创建问题,mysql,foreign-keys,entity-relationship,Mysql,Foreign Keys,Entity Relationship,我遵循了这篇文章:在两个表之间创建外键。每一次尝试都失败了。有什么我遗漏的吗 这真是令人沮丧,我从来没有想过会遇到这个问题 谢谢。到底出了什么问题?没有细节我们真的帮不了你 mysql> CREATE TABLE parent (id INT NOT NULL, -> PRIMARY KEY (id) -> ) ENGINE=INNODB; Query OK, 0 rows affected (0.01 sec) mys
谢谢。到底出了什么问题?没有细节我们真的帮不了你
mysql> CREATE TABLE parent (id INT NOT NULL,
-> PRIMARY KEY (id)
-> ) ENGINE=INNODB;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE child (id INT, parent_id INT,
-> INDEX par_ind (parent_id),
-> FOREIGN KEY (parent_id) REFERENCES parent(id)
-> ON DELETE CASCADE
-> ) ENGINE=INNODB;
Query OK, 0 rows affected (0.01 sec)
对我来说很好。到底出了什么问题?没有细节我们真的帮不了你
mysql> CREATE TABLE parent (id INT NOT NULL,
-> PRIMARY KEY (id)
-> ) ENGINE=INNODB;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE child (id INT, parent_id INT,
-> INDEX par_ind (parent_id),
-> FOREIGN KEY (parent_id) REFERENCES parent(id)
-> ON DELETE CASCADE
-> ) ENGINE=INNODB;
Query OK, 0 rows affected (0.01 sec)
对我来说很好。示例:
use trading_research;
drop table if exists stock_history;
create table stock_history
(
company_id integer(4) NOT NULL,
price_date date NOT NULL,
primary key(company_id, price_date),
opening_price decimal(10,2) NULL,
closing_price decimal(10,2) NULL,
high_price decimal(10,2) NULL,
low_price decimal(10,2) NULL,
adjusted_closing_price decimal(10,2) NULL,
volume decimal(20, 2) NULL,
constraint foreign key (company_id) references stock_company (company_id) on delete cascade on update cascade
);
如果您详细介绍了您正在尝试的内容和/或遇到的错误,我可以提供更多帮助。示例:
use trading_research;
drop table if exists stock_history;
create table stock_history
(
company_id integer(4) NOT NULL,
price_date date NOT NULL,
primary key(company_id, price_date),
opening_price decimal(10,2) NULL,
closing_price decimal(10,2) NULL,
high_price decimal(10,2) NULL,
low_price decimal(10,2) NULL,
adjusted_closing_price decimal(10,2) NULL,
volume decimal(20, 2) NULL,
constraint foreign key (company_id) references stock_company (company_id) on delete cascade on update cascade
);
如果您详细说明您正在尝试的内容和/或遇到的错误,我可以提供更多帮助。有一点您必须记住,如果您是子表/列,则其值在父表/列中不存在,您将始终遇到错误。有一点您必须记住,如果您是子表/列,则其值在父表/列中不存在,您将始终得到一个错误。您没有显示您尝试了什么或错误是什么,因此所有答案都只是猜测 以下是外键工作前必须正确的事项清单:
- 必须启用InnoDB存储引擎
mysql> SHOW VARIABLES LIKE 'have_innodb';
- 两个表都必须使用InnoDB存储引擎(MyISAM不支持引用完整性约束)
mysql>显示创建表; mysql>显示创建表;
- 引用表中的列必须是键的最左边的列。通常这是主键,但InnoDB实际上允许它们成为任何键的一部分
- 外键列及其引用的主键列必须是完全相同的数据类型(必须匹配有符号与无符号、int与bigint、字符串字符集等)。只允许字符串长度不同
- 你必须得到正确的答案。:-)
- 如果要向填充的表添加约束,则所有现有值必须满足该约束(感谢Jordan S.Jones在该线程中的介绍)
- 必须启用InnoDB存储引擎
mysql> SHOW VARIABLES LIKE 'have_innodb';
- 两个表都必须使用InnoDB存储引擎(MyISAM不支持引用完整性约束)
mysql>显示创建表; mysql>显示创建表;
- 引用表中的列必须是键的最左边的列。通常这是主键,但InnoDB实际上允许它们成为任何键的一部分
- 外键列及其引用的主键列必须是完全相同的数据类型(必须匹配有符号与无符号、int与bigint、字符串字符集等)。只允许字符串长度不同
- 你必须得到正确的答案。:-)
- 如果要向填充的表添加约束,则所有现有值必须满足该约束(感谢Jordan S.Jones在该线程中的介绍)
- 您没有显示您尝试了什么或错误是什么,因此所有答案都只是猜测
以下是外键工作前必须正确的事项清单: