2017-05-10 60 views
0

我正在SQLite數據庫中創建一個只存儲單個數據的表,否則如果數據存在於表中,它應該在插入新數據之前被刪除。SQL LITE:一行約束

這是我用來創建表

CREATE TABLE my_login_info (
    id  BOOLEAN PRIMARY KEY 
        DEFAULT True 
        CONSTRAINT one_row_only CHECK (id) 
        NOT NULL, 
    username STRING, 
    password STRING 
); 

然而,當我試圖將數據插入到表時,表是空的語法,它給了一個錯誤。

Error while committing new row: CHECK constraint failed: one_row_only 

任何想法是什麼造成的問題?

+1

MySQL或SQLite的?請刪除無關的數據庫標籤。 –

+3

[確保SQLite表只有一行]可能的重複(http://stackoverflow.com/questions/33104101/ensure-sqlite-table-only-has-one-row) –

+0

如果你可能不需要SQLite只打算存儲單個值。如果你想更新,就不要使用INSERT。使用UPDATE –

回答

0

您可以使用INSERT OR REPLACE插入新記錄或更新現有的一個關鍵字字段相匹配,如:

INSERT OR REPLACE INTO my_login_info (id,username,hash) 
VALUES (true,someuser,somehash) 

只要確保你店的密碼明文。只存儲一個強大的散列。如果你不需要散列進行認證,你可以放棄存儲一個短散列,也就是說只有完整散列的一部分。

這是做什麼混帳例如,當它顯示一個短哈希爲每個文件的版本,而不是完整的哈希值