我正在 MariaDB 10.6 資料庫中為 TPC-H 基準測驗創建表。
CREATE TABLE作業正常,但添加FOREIGN KEY失敗。我嘗試遵循mariadbtutorial和檔案,但這也不起作用。
我猜測:
- 的語法
FOREIGN KEY錯誤 - 參考外鍵的列中的資料型別錯誤。
- 參考外鍵的列應該是索引
- dbgen 從 TPC-H 基準生成的資料有問題。
發生的錯誤:
警告 150: 更改表
bazatest2。nation外鍵 (N_REGIONKEY) 約束失敗。列“N_REGIONKEY”的欄位型別或字符集與參考的列“R_REGIONKEY”不匹配。 嘗試更改BIGINT NOT NULL為BIGINT UNSIGNED NOT NULL但出現不同的錯誤:當我嘗試在應該參考外鍵的列中
UNSIGNED添加時出現錯誤 1452 。BIGINT
包含創建的檔案的一部分:
DROP TABLE IF EXISTS NATION CASCADE;
CREATE TABLE NATION (
N_NATIONKEY SERIAL PRIMARY KEY,
N_NAME CHAR(25),
N_REGIONKEY BIGINT UNSIGNED NOT NULL, -- references R_REGIONKEY
N_COMMENT VARCHAR(152)
);
DROP TABLE IF EXISTS REGION CASCADE;
CREATE TABLE REGION (
R_REGIONKEY SERIAL PRIMARY KEY,
R_NAME CHAR(25),
R_COMMENT VARCHAR(152)
);
具有外鍵約束的檔案的一部分:
ALTER TABLE NATION ADD CONSTRAINT FOREIGN KEY (N_REGIONKEY) REFERENCES REGION(R_REGIONKEY);
我昨天嘗試通過更改 alter table add constraint foreign key 的語法并搜索解決方案來解決這個問題,但沒有找到解決方案。最有可能是參考外鍵的列應該是索引或多個錯誤,但我不知道我應該在我的代碼中更改什么。
uj5u.com熱心網友回復:
語法錯誤,用這個
ALTER TABLE NATION ADD CONSTRAINT NATION_FK FOREIGN KEY (N_REGIONKEY) REFERENCES REGION(R_REGIONKEY);
uj5u.com熱心網友回復:
感謝所有答案,我將 UNSIGNED 添加到 BIGINT,但這不是我問題的主要來源。問題是我從主鍵值從 0 開始的檔案中匯入資料。在 這里我發現在 MariaDB/MySQL 中,如果主鍵為 0,它將自動分配第一個值。它將 0, 1, 2 更改為 1, 1, 2 并發生錯誤。有兩種選擇:
- 更改 dbgen 的設定(為 TPC-H 基準測驗生成資料的程式)。可能的選項有:INFORMIX、DB2、TDAT (Teradata)、SQLSERVER、SYBASE、ORACLE、VECTORWISE。選項代表資料庫語法,沒有 MYSQL 選項。dbgen 創建“|” 帶有此表記錄的分隔檔案 (.tbl)。我使用了 ORACLE,它生成的檔案的主鍵從 0 開始。如果您知道哪個選項與 MySQL 語法最相似并且包含從 0 開始的鍵,您可以發表評論。
- 或者是否有任何自動軟體可以將 1 添加到此檔案中的主鍵。盡管 NATION 和 REGION 表不是那么大(20、5),但其他一些表(為了清楚起見,我從這個問題中洗掉了)將有超過 100 000 條記錄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/422016.html
標籤:
上一篇:AndroidStudio,Java:getCountofCursor在checkUser函式與新創建的用戶后回傳0
下一篇:具有不同值的同一列到單個輸出中
