我想創建一個SQL表,它有一個網站用戶的字符串attr。我應該如何聲明這個屬性,因爲名稱沒有最大長度?我可以把這個長度留空嗎?可變長度的NVARCHAR?
CREATE TABLE User(
id NUMBER PRIMARY KEY NOT NULL
name NVARCHAR
)
而且,我需要說NOT NULL的主鍵,或者主鍵已經不能爲null?
感謝提前:)
我想創建一個SQL表,它有一個網站用戶的字符串attr。我應該如何聲明這個屬性,因爲名稱沒有最大長度?我可以把這個長度留空嗎?可變長度的NVARCHAR?
CREATE TABLE User(
id NUMBER PRIMARY KEY NOT NULL
name NVARCHAR
)
而且,我需要說NOT NULL的主鍵,或者主鍵已經不能爲null?
感謝提前:)
你應該申報長度MAX和主鍵是自動NOT NULL
CREATE TABLE User(
id NUMBER PRIMARY KEY
name NVARCHAR(MAX)
)
既然你以後指定的DBMS爲SQL精簡版,該documentation說
SQLite中VARCHAR的最大大小是多少?
SQLite不強制執行VARCHAR的長度。你可以聲明一個 VARCHAR(10),SQLite會很樂意讓你在 中放500個字符。它將保持所有500個字符的完整 - 它從不截斷。
我應該如何申報此ATTR,因爲名稱不具有最大長度是多少? 我可以將這個長度留空嗎?
是,SQLite中你可以與任何「文本affinity」類型名稱(CHAR
,TEXT
,CLOB
等)聲明列,它將存儲不限制長度的字符串(或斑點)(除全局字符串長度限制,默認爲1 GB)。
如果您確實想約束字符串的長度,可以使用明確的CHECK
約束來完成,如CHECK(LENGTH(name) <= 100)
。
另外,我是否需要說NOT NULL爲主鍵,或主鍵 已經永遠不會空?
根據SQL標準,PRIMARY KEY
意味着NOT NULL
。但是,SQLite具有a long-standing bug,這使得需要明確的NOT NULL
約束。
根據SQL標準,
PRIMARY KEY
應始終暗示NOT NULL
。不幸的是,由於一些早期版本中的錯誤,這不是SQLite中的情況。除非列是INTEGER PRIMARY KEY
或 表是WITHOUT ROWID
表或該列被聲明爲NOT NULL
, SQLite允許在PRIMARY KEY
列中輸入NULL
值。 SQLite可以修復爲符合標準的 ,但這樣做可能會破壞傳統的 應用程序。因此,已決定僅記錄事實 SQLite允許在大多數PRIMARY KEY
列中使用NULL
。
你正在使用哪個dbms?根據ANSI SQL「NVARCHAR」,不指定長度意味着長度爲1. – jarlh
主鍵列隱含爲NOT NULL。 – jarlh
@jarlh我只是試圖插入一個條目到ID爲NULL的表,它的工作。但是,如果我把NOT NULL它正確提供了警告。即使對於主鍵,SQLite是否要求我使用NOT NULL? – Tirafesi