我正在嘗試創建一個 SQLite3 表來檢查“gameLicense”中的任何插入值以符合 3 個檢查:輸入的 license_id 是 5 位數字;前 4 位數字是 0 到 9 的整數,最后一位數字等于計算產生的最后一個數字(1 * digit_1 3 * digit_2 1 * digit_3 3 * digit_4)。
我寫了下面的代碼,它似乎沒有語法錯誤,但是當我嘗試用有效資料填充表時,檢查約束失敗,并且稍后參考“license_id”的外鍵也失敗(由于檢查失敗這張桌子?)
CREATE TABLE GameLicense (
title TEXT,
release_year INTEGER,
platform TEXT,
license_id TEXT PRIMARY KEY,
CHECK (length(license_id) = 5),
CHECK (CAST(substr(license_id,1) AS INTEGER) BETWEEN 0 AND 9),
CHECK (CAST (substr(license_id, 5) AS UNSIGNED) =
substr(CAST(substr(license_id,1) AS UNSIGNED)
3 * CAST(substr(license_id,2) AS UNSIGNED)
CAST(substr(license_id,3) AS UNSIGNED)
3 * CAST(substr(license_id,4) AS UNSIGNED), -1))
);
CREATE TABLE gameRental (
gamer_id INTEGER,
license_id TEXT,
date_out TEXT,
date_back TEXT,
rental_cost REAL,
FOREIGN KEY (license_id) REFERENCES GameLicense (license_id)
FOREIGN KEY (gamer_id) REFERENCES Gamer (gamer_id)
ON UPDATE CASCADE
);
結果是:
Error: near line 18: CHECK constraint failed: GameLicense
Error: near line 43: FOREIGN KEY constraint failed
請忽略行號,我刪掉了一些其他不相關的表格創作。
uj5u.com熱心網友回復:
substr(license_id,1)不回傳許可證 ID 的第一個字符,它回傳從位置 1開始到字串結尾的子字串。用
SUBSTR(license_id, 1, 1)
反而。在其他情況下也是如此。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/311400.html
標籤:sqlite
