Ostatnia aktualizacja 26 lutego 2020 08:08:49 (UTC/GMT +8 godzin)
Wprowadzenie
Polecenie SQLite CREATE TABLE służy do tworzenia nowej tabeli w bazie danych SQLite. Jest ono również używane do tworzenia indeksów, widoków i wyzwalaczy. Polecenie CREATE TABLE określa następujące atrybuty nowej tabeli:.
- Nazwa nowej tabeli.
- Baza danych, w której tworzona jest nowa tabela. Tabele mogą zostać utworzone w głównej bazie danych, tymczasowej bazie danych lub w dowolnej dołączonej bazie danych.
- Nazwa każdej kolumny w tabeli.
- Deklarowany typ każdej kolumny w tabeli oraz każda kolumna musi posiadać jeden typ datatype, którym może być NULL – wartość jest wartością NULL, INTEGER – podpisana liczba całkowita, REAL – wartość zmiennoprzecinkowa, TEXT – ciąg tekstowy lub BLOB – blob danych.
- Domyślna wartość lub wyrażenie dla każdej kolumny w tabeli.
- Domyślna kolejność kolacji dla każdej kolumny.
- Opcjonalnie PRIMARY KEY dla tabeli. Obsługiwane są zarówno klucze główne jednokolumnowe, jak i złożone (wielokolumnowe).
- Zestaw ograniczeń SQL dla każdej tabeli. SQLite wspiera ograniczenia UNIQUE, NOT NULL, CHECK oraz FOREIGN KEY.
- Unikalne indeksy tworzone są automatycznie w celu wymuszenia ograniczenia UNIQUE lub PRIMARY KEY i nie mogą być usunięte ręcznie za pomocą polecenia DROP INDEX.
Spis treści
Konwencje nazewnicze
Syntaktyka
Przykład
ALTER TABLE
DROP TABLE
Konwencje nazewnicze
Każda baza danych, tabela, kolumna, indeks, triger lub widok powinny posiadać nazwę, dzięki której można je zidentyfikować. Nazwa identyfikatora musi zaczynać się od litery lub znaku podkreślenia, po których może następować dowolna liczba znaków alfanumerycznych lub podkreślników. Żadne inne znaki nie mogą być dozwolone w tej nazwie.
The valid identifier names are :
- tsttable
- tst_table
- table456
- z
However the following are invalid identifier:
- tst table
- tst-table
- 456table
Other characters can be used in identifiers if they are enclosed in double quotes (or square brackets), for example:
- „test table”
- „tst table”
- „123 456”
Reserved Keywords
Each CREATE TABLE statement must specify a name for the new table. Table names that begin with „sqlite_” are reserved for internal use. It is an error to attempt to create a table with a name that starts with „sqlite_”.
Name Length
In SQLite there is not restricted upper limit on the length of an identifier name, so you can use a manageable length of identifier name to be use.
Case Sensitivity
For the most part, case sensitivity in SQLite is off. Nazwy tabel i kolumn mogą być pisane wielkimi, małymi lub mieszanymi literami, a różne wielkości liter mogą być używane zamiennie.
Uwagi:
Gdy tworzona jest nowa tabela, musi ona znajdować się w bazie danych, a nazwa bazy danych może być albo „main”, „temp”, lub nazwa dołączonej bazy danych.Jeśli słowo kluczowe „TEMP” lub „TEMPORARY” zostanie użyte pomiędzy „CREATE” a „TABLE”, wówczas nowa tabela zostanie utworzona w tymczasowej bazie danych.Nazwa bazy danych i słowo kluczowe TEMP lub TEMPORARY nie mogą być użyte.Jeśli nazwa bazy danych nie jest określona i słowo kluczowe TEMP nie jest obecne, wówczas tabela zostanie utworzona w głównej bazie danych.
Próba utworzenia tabeli w bazie danych, która zawiera tabelę, indeks lub widok o tej samej nazwie, spowoduje wystąpienie błędu, ale jeśli klauzula „IF NOT EXISTS” jest określona jako część instrukcji CREATE TABLE nie spowoduje żadnego efektu.
Syntaktyka:
CREATE TABLE table-name (column-def);
TEMPORARY – tabela może być zadeklarowana jako tymczasowa, jeśli jest to pożądane.
Column-def. – A column definition consists of the name of the column, and followed by the declared type of the column which is optional, then one or more optional column constraints.
A column definition can be defined as follows:
name column-constraint]
Example
Here is a simple Create Table Statement:
CREATE TABLE company(com_id text(4),com_name text(15));
To see the structure of the table, use the following commands:
Sample Output:
sqlite> .mode columnsqlite> .header onsqlite> PRAGMA table_info(company);cid name type notnull dflt_value pk---------- ---------- ---------- ---------- ---------- ----------0 com_id text(4) 0 01 com_name text(15) 0 0
Here the .mode command shows the columns and .header on command shows the header on.
Create a table to use TEMPORARY clause
CREATE TABLE TEMPORARY (com_id text(4),com_name text(15));
This time table is created in temp databases. If you want to see the created table execute the following command-
sqlite> .tablesTEMPORARY
If you use the table name with TEMPORARY keyword an error message will appear.
sqlite> create table TEMPORARY company( ...> com_id text(4), ...> com_name text(15));Error: near "company": syntax error
Wykonanie kopii istniejącej tabeli w głównej bazie danych
Bardzo ważne jest, aby programista wykonał kopię zapasową oryginalnej tabeli, która jest w trakcie pracy, i jak żaden szkodliwy środek nie zdarzył się nieumyślnie lub nieumyślnie w czasie tworzenia. Dodatkowo, możesz potrzebować zmienić nazwy kolumn lub usunąć jedną lub więcej kolumn z tabeli sqlite, więc dobrą praktyką jest zrobienie kopii zapasowej działającej tabeli od czasu do czasu.
Jeśli chcesz wykonać kopię zapasową tabeli firmy wraz ze wszystkimi rekordami, możesz użyć następującego polecenia
CREATE TABLE backup_company AS SELECT * FROM company ;
Jeśli chcesz wykonać kopię zapasową tylko struktury tabeli firmy, można użyć następującego polecenia
CREATE TABLE backup_company AS SELECT * FROM company LIMIT 0;
ALTER TABLE
Polecenie ALTER TABLE może być użyte w SQLite tylko w celu umożliwienia użytkownikowi zmiany nazwy tabeli lub dodania nowej kolumny do istniejącej tabeli. Nie jest możliwa zmiana nazwy kolumny, usunięcie kolumny, dodanie lub usunięcie ograniczeń do tabeli.
Polecenie RENAME TO służy do zmiany nazwy tabeli określonej przez table-name na new-table-name. Polecenie to nie może być użyte do przeniesienia tabeli w obrębie dwóch baz danych, a jedynie do zmiany nazwy w obrębie tej samej bazy danych.
Jeśli tabela, której nazwa ma zostać zmieniona, zawiera trigery lub indeksy, nie spowoduje to żadnego efektu i pozostaną one nienaruszone, tak jak przed zmianą nazwy. Jednakże wszelkie definicje widoków lub instrukcje wykonywane przez triggery, które odnoszą się do tabeli, której nazwę zmieniono, nie zostaną automatycznie zmodyfikowane.
Tutaj tworzymy nową tabelę company.
sqlite> create table company( ...> com_id text(4), ...> com_name text(15));
Aby dodać nową kolumnę:
ALTER TABLE company ADD com_add VARCHAR(50);
Po dodaniu kolumny zobacz strukturę tabeli firma.
sqlite> .schemaCREATE TABLE company(com_id text(4),com_name text(15), com_add VARCHAR(50));
Aby zmienić nazwę tabeli:
sqlite> .tablescompany hrdb.departments hrdb.jobshrdb.countries hrdb.employees hrdb.locationshrdb.department hrdb.job_history hrdb.regions
Teraz zmień nazwę tabeli firma na nową nazwę firma_nowa. Oto oświadczenie poniżej.
ALTER TABLE company RENAME TO company_new;
Po zmianie nazwy, zobacz listę tabel poniżej.
sqlite> .tablescompany_new hrdb.departments hrdb.jobshrdb.countries hrdb.employees hrdb.locationshrdb.department hrdb.job_history hrdb.regions
Rrenaming lub usunięcie kolumny z tabeli:
Uwaga : Sqlite ma tylko ograniczoną obsługę ALTER TABLE. Usunięcie kolumn i zmiana nazwy nie są obsługiwane przez SQLite. Dlatego lepiej jest utworzyć nową tabelę ze zmianami zgodnymi z Twoimi wymaganiami, następnie upuścić oryginalną tabelę i ponownie zmienić nazwę właśnie utworzonej nowej tabeli na oryginalną nazwę tabeli. Należy pamiętać, że po usunięciu tabeli, wszelkie powiązane z nią trigery zostaną utracone, więc należy być tego świadomym. Dobrym pomysłem jest, aby przed zmianą nazwy lub usunięciem tabeli wykonać kopię deklaracji tworzenia tabeli. Poniżej znajduje się instrukcja, z której uzyskasz wyciąg.
SELECT sql FROM sqlite_master WHERE tbl_name = 'table_name';
DROP TABLE
Polecenie DROP TABLE usuwa tabelę z bazy danych.
Syntaktyka:
DROP TABLE table_name orDROP TABLE table_name
Parametry:
nazwa_tabeli – Nazwa istniejącej tabeli, którą chcesz usunąć. You may drop more than one tables by specifying their names seperated by a comma.
DROP TABLE company_new;
Previous: Data Types
Next: Constraint