我有一张table,至少,
CREATE TABLE IF NOT EXISTS T (
A int(11) NOT NULL,
B date NOT NULL
);
字符串A
和B
本身稍后碰巧有FK约束,但由于这不是MWE的一部分,因此我没有包括它们。
我有另一张table:
CREATE TABLE IF NOT EXISTS U (
C int(11) NOT NULL,
D date NOT NULL,
FOREIGN KEY (C) REFERENCES T(A),
FOREIGN KEY (D) REFERENCES T(B)
);
型
但我得到
#1005 - Can't create table `DBName`.`u` (errno: 150 "Foreign key constraint is incorrectly formed")
型
我意识到问题实际上是date
约束。我读到这不能做到,因为T(B)
既不是唯一的,也不是主要的。然而,这应该不是一个大问题,因为我还有另一个外键T(A)
,它应该是唯一的。
然而,我也读到这只是MySQL中的一个问题,如果出于任何原因,你需要它,InnoDB有一个扩展支持它。我试着在最后添加ENGINE=InnoDB
,但这并没有改变任何事情。
这可以做到吗?如果不能,拥有(int(11), date)
外键的最佳实践是什么?
更多详情:
- 服务器:127.0.0.1通过TCP/IP
- 服务器类型:MariaDB
- 服务器版本:10.4.27-MariaDB
- 方案版本:10
- Server charset:UTF-8 Unicode(utf8mb4)
- 数据库客户端版本:libmysql - mysqlnd 8.2.0
在Apache/2.4.64(Win 64)下运行XAMPP。
这是在PHPMyAdmin SQL控制台中运行的,在数据库级别。
1条答案
按热度按时间brjng4g31#
你遇到这个问题是因为在MySQL中,你只能引用具有PRIMARY KEY或UNIQUE约束的列。解决这个问题的一种方法是,你可以在表T中的列A和B上创建一个复合UNIQUE约束。
字符串
这将创建没有任何错误的表U,并且外键将引用表T中的组合键(A,B)。