我在嘗試在這兩個表之間創建關系時遇到了這個問題:vozila 和 accounts
完整錯誤:
#1452 - Cannot add or update a child row: a foreign key constraint fails (`shscodin_cars`.`#sql-123257_12d31ca`, CONSTRAINT `#sql-123257_12d31ca_ibfk_1` FOREIGN KEY (`id`) REFERENCES `vozila` (`vlasnik_id`))
我知道人們已經問過這個問題存在類似的錯誤,但是通過查看他們的表格和答案,我無法弄清楚它如何適合我的情況,這就是我提出問題的原因。
- 我想達到什么目的?
因為我想創建一個 Web 應用程式,我將使用它顯示有關車輛的資訊(來自汽車表),但當然我只想顯示分配給特定用戶的車輛,而不是全部。
什么時候出現這個錯誤?
當我嘗試在表(vozila 和帳戶)之間創建關系時,會發生錯誤。
下面是用于創建這兩個表的代碼:
CREATE TABLE `accounts` (
`id` int(11) NOT NULL,
`username` varchar(50) NOT NULL,
`password` varchar(255) NOT NULL,
`email` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
而對于vozila
CREATE TABLE `vozila` (
`id` int(11) NOT NULL,
`make` varchar(50) COLLATE utf8_bin NOT NULL,
`model` varchar(50) COLLATE utf8_bin NOT NULL,
`godina` int(50) NOT NULL,
`boja` varchar(50) COLLATE utf8_bin NOT NULL,
`vin` varchar(50) COLLATE utf8_bin NOT NULL,
`engine` varchar(50) COLLATE utf8_bin NOT NULL,
`tip` varchar(50) COLLATE utf8_bin NOT NULL,
`vlasnik` varchar(50) COLLATE utf8_bin NOT NULL,
`regoz` varchar(50) COLLATE utf8_bin NOT NULL,
`istek` date NOT NULL,
`odometer` varchar(50) COLLATE utf8_bin NOT NULL,
`napomena` varchar(50) COLLATE utf8_bin NOT NULL,
`vlasnik_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
--
-- Indexes for table `accounts`
--
ALTER TABLE `accounts`
ADD PRIMARY KEY (`id`);
--
-- Indexes for table `vozila`
--
ALTER TABLE `vozila`
ADD PRIMARY KEY (`id`),
ADD KEY `vlasnik_id` (`vlasnik_id`);
如您所見vlasnik_id,它用作 INDEX,我正在嘗試在vlasnik_id(作為參考)和 id 之間創建關系作為 FOREIGN KEY。
有人能告訴我我在創建表格方面做出了正確的決定嗎?我是否為網路應用程式或其他目的添加了正確的鍵?
uj5u.com熱心網友回復:
如果您制作了這個外鍵:
ALTER TABLE accounts ADD FOREIGN KEY (id) REFERENCES vozila (vlasnik_id);
給定您的設定,創建該約束確實成功。
但是有兩個問題。
第一個問題:每個賬戶只能是一輛汽車的車主。每個帳戶僅存盤在一行上,并且只有一個id值。如果id必須參考 中的一行vozila,那么它只能參考一輛車。我認為應該允許一個帳戶擁有不止一輛汽車的可能性更大。
第二個問題:必須先插入具有參考值的行,然后才能插入參考它的行。換句話說,您必須先插入 to vozila,將所有者的值放在 中vlasnik_id,然后才能accounts使用 that將行插入到id。這似乎倒退了。
如果您以這種方式定義外鍵,這兩個問題都可以解決:
ALTER TABLE vozila ADD FOREIGN KEY (vlasnik_id) REFERENCES account(id);
您首先創建一個帳戶,然后插入一輛或多輛參考該車主的汽車id。該帳戶可以擁有多于一輛車。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/464327.html
標籤:mysql phpmyadmin
