外键约束不正确,我不知道该怎么办
Foreign key constraint is incorrectly formed, i dont know what to do
我在 phpMyAdmin 中有这两个 table:
分析:
CREATE TABLE `assenze` (
`idAssenza` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`ename` varchar(255) NOT NULL,
`starts` datetime NOT NULL,
`ends` datetime NOT NULL
)
尤腾特:
CREATE TABLE `utente` (
`utenteID` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`cognome` varchar(255) NOT NULL,
`nome` varchar(255) NOT NULL,
`nomeUtente` varchar(50) NOT NULL,
`password` varchar(255) NOT NULL
)
我必须通过外键连接它们,外键包括将“nomeUtente”放入“assenze”table。
我试过:
ALTER TABLE assenze
ADD COLUMN nomeUtente varchar(50),
ADD FOREIGN KEY (nomeUtente) REFERENCES utente(nomeUtente)
但它给了我这个错误 ->
Foreign key constraint is incorrectly formed
我也试过单独添加列并给它 FK 属性但不起作用
在互联网上,我找到了其他解决方案,但对我没有用。我不知道该尝试什么了。
P.S。我无法删除 table 并重做,因为它们连接到某个 php 文件,如果我删除并重新创建
会出现错误
我只想补充:感谢所有帮助过我的人
问题是您在使用 ALTER 查询时试图添加另一个同名的列 nomeUtente
这个:
ALTER TABLE assenze
ADD COLUMN nomeUtente varchar(50),
ADD FOREIGN KEY (nomeUtente) REFERENCES utente(nomeUtente)
应该是:
ALTER TABLE assenze
ADD FOREIGN KEY (nomeUtente) REFERENCES utente(nomeUtente)
每个外键都需要在引用的一个或多个列上建立索引
所以在 Utente 的名字中添加一个 KEX
CREATE TABLE `assenze` (
`idAssenza` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`ename` varchar(255) NOT NULL,
`starts` datetime NOT NULL,
`ends` datetime NOT NULL
)
CREATE TABLE `utente` (
`utenteID` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`cognome` varchar(255) NOT NULL,
`nome` varchar(255) NOT NULL,
`nomeUtente` varchar(50) NOT NULL,
`password` varchar(255) NOT NULL
)
ALTER TABLE utente ADD
KEY(`nomeUtente`)
ALTER TABLE assenze
ADD COLUMN nomeUtente varchar(50),
ADD FOREIGN KEY (nomeUtente) REFERENCES utente(nomeUtente)
db<>fiddle here
我在 phpMyAdmin 中有这两个 table:
分析:
CREATE TABLE `assenze` (
`idAssenza` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`ename` varchar(255) NOT NULL,
`starts` datetime NOT NULL,
`ends` datetime NOT NULL
)
尤腾特:
CREATE TABLE `utente` (
`utenteID` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`cognome` varchar(255) NOT NULL,
`nome` varchar(255) NOT NULL,
`nomeUtente` varchar(50) NOT NULL,
`password` varchar(255) NOT NULL
)
我必须通过外键连接它们,外键包括将“nomeUtente”放入“assenze”table。
我试过:
ALTER TABLE assenze
ADD COLUMN nomeUtente varchar(50),
ADD FOREIGN KEY (nomeUtente) REFERENCES utente(nomeUtente)
但它给了我这个错误 ->
Foreign key constraint is incorrectly formed
我也试过单独添加列并给它 FK 属性但不起作用 在互联网上,我找到了其他解决方案,但对我没有用。我不知道该尝试什么了。
P.S。我无法删除 table 并重做,因为它们连接到某个 php 文件,如果我删除并重新创建
会出现错误我只想补充:感谢所有帮助过我的人
问题是您在使用 ALTER 查询时试图添加另一个同名的列 nomeUtente
这个:
ALTER TABLE assenze
ADD COLUMN nomeUtente varchar(50),
ADD FOREIGN KEY (nomeUtente) REFERENCES utente(nomeUtente)
应该是:
ALTER TABLE assenze
ADD FOREIGN KEY (nomeUtente) REFERENCES utente(nomeUtente)
每个外键都需要在引用的一个或多个列上建立索引
所以在 Utente 的名字中添加一个 KEX
CREATE TABLE `assenze` ( `idAssenza` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `ename` varchar(255) NOT NULL, `starts` datetime NOT NULL, `ends` datetime NOT NULL )
CREATE TABLE `utente` ( `utenteID` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `cognome` varchar(255) NOT NULL, `nome` varchar(255) NOT NULL, `nomeUtente` varchar(50) NOT NULL, `password` varchar(255) NOT NULL )
ALTER TABLE utente ADD KEY(`nomeUtente`)
ALTER TABLE assenze ADD COLUMN nomeUtente varchar(50), ADD FOREIGN KEY (nomeUtente) REFERENCES utente(nomeUtente)
db<>fiddle here