TASTĂ PRIMARĂ (lista de coloane) [clauză de conflict] |
UNIQUE (listă de coloane) [clauză de conflict]
Pe algoritmul de conflict CONFLICT
În comanda CREATE TABLE, cuvântul cheie "CREATE TABLE" este de obicei urmat de numele tabelului și de o listă de definiții de câmp și condiții. Numele tabelului poate fi fie un identificator, fie un șir. Numele care încep cu "sqlite_" sunt rezervate pentru utilizare de către motor.
Fiecare definiție a unui câmp de tabel constă din numele, tipul și una sau mai multe condiții suplimentare. Tipul de date pentru câmp nu restricționează plasarea datelor în acesta. Pentru mai multe informații, consultați Tipurile de date în SQLite Versiunea 3. Constrângerea UNIQUE determină crearea indexului pe câmpurile specificate. Instrucțiunea COLLATE specifică pentru utilizarea funcției de comparație pentru acest câmp. Implicit, este utilizată funcția BINARY încorporată.
Clauza DEFAULT specifică valoarea implicită utilizată la inserarea INSERT. Valoarea poate fi NULL, o constantă string sau un număr. Începând cu versiunea 3.1.0, valoarea implicită poate accepta și cuvinte cheie speciale CURRENT_TIME, CURRENT_DATE sau CURRENT_TIMESTAMP. Dacă valoarea este NULL, un șir sau un număr, acesta este introdus neschimbat în câmp, dacă comanda INSERT nu specifică o valoare pentru acest câmp. Dacă valoarea este CURRENT_TIME, CURRENT_DATE sau CURRENT_TIMESTAMP, atunci data și ora UTC sunt introduse în câmpuri. Pentru CURRENT_TIME, formatul este HH: MM: SS. Pentru CURRENT_DATE, YYYY-MM-DD. Formatul pentru CURRENT_TIMESTAMP este "YYYY-MM-DD HH: MM: SS".
Definiția unui KEIM PRIMAR, de obicei, creează simplu un indice UNIQUE pe câmpurile specificate. Cu toate acestea, dacă cheia primară de pe o coloană este de tip INTEGER, atunci această coloană va fi utilizată în interior ca fiind cheia reală pentru arborele B al tabelului. Aceasta înseamnă că câmpul poate conține numai o valoare întregă unică. (O excepție într-un caz, SQLite ignoră tipurile de date ale câmpurilor și permite stocarea datelor de orice tip, indiferent de descrierea lor.) Dacă tabelul nu are un câmp cu INTEGER PRIMARY KEY, atunci întreaga tastă B-Tree va fi creată automat. Accesul la cheia înregistrării B-Tree poate fi obținut întotdeauna cu ajutorul denumirilor speciale "ROWID", "OID" sau "_ROWID_". Acest lucru este valabil indiferent de prezența INTEGER PRIMARY KEY. După INTEGER, KEY PRIMARY poate conține și cuvântul AUTOINCREMENT. Cuvântul AUTOINCREMENT modifică modul în care B-Tree generează automat. Informații suplimentare despre generarea automată a arborelui B sunt disponibile separat.
În conformitate cu standardul SQL, KEY PRIMARY implică NOT NULL. Din păcate, datorită unei vechi supravegheri, acest lucru nu este cazul cu SQLite. SQLite permite valorile NULL în coloanele PRIMARY KEY. Putem schimba SQLite pentru conformitatea cu standardul (și poate că acest lucru se va face în viitor), dar între timp, SQLite a fost atât de răspândită încât ne este teamă să facă un cod greșit, care este acum corectă, dacă vom rezolva problema. Deci, acum am decis să permitem NULL în coloanele PRIMARY KEY. Dezvoltatorii ar trebui să rețină că putem schimba SQLite în conformitate cu standardul SQL în viitor și trebuie să dezvoltăm noi programe în conformitate cu acesta.
Dacă se utilizează cuvintele cheie "TEMP" sau "TEMPORARY" între "CREATE" și "TABLE", tabela este creată numai în conexiunea cu baza de date și este șters automat când este închisă. Toate indexurile create pentru tabelul temporar sunt de asemenea temporare. Tabelele temporare și indexurile sunt stocate cu un fișier separat, diferit de fișierul bazei de date principale.
În cazul în care
Limitarea CHECK este acceptată de versiunea 3.3.0. Înainte de versiunea 3.3.0, CHECK ar putea fi specificat, dar nu a fost urmat.
Nu există restricții explicite privind numărul de câmpuri sau numărul de restricții din tabel. Dimensiunea totală a datelor într-o singură înregistrare este limitată la aproximativ 1 MB în versiunea 2.8. În versiunea 3.0 nu există o limită grea pentru cantitatea de date din înregistrare.
Definiția formei pentru tabela CREATE TABLE AS creează un tabel din rezultatul interogării. Numele câmpurilor de tabel sunt luate de numele câmpurilor ca rezultat al interogării.
Textul exact al fiecărei interogări CREATE TABLE este stocat în tabela sqlite_master. De fiecare dată când deschideți o bază de date, toate interogările CREATE TABLE sunt citite din tabela sqlite_master și folosite pentru a genera o vizualizare SQLite internă. Dacă comanda inițială a fost CREATE TABLE AS, atunci este creată CREATE TABLE echivalentă, care este stocată în sqlite_master în locul interogării originale. Textul CREATE TEMPORARY TABLE este stocat în tabela sqlite_temp_master.
Dacă este specificată o instrucțiune opțională IF NOT EXISTS și există deja un alt tabel cu acel nume, atunci comanda nu este executată.