sql >> Databáze >  >> RDS >> SQLite

SQLite - Změna tabulky

SQLite podporuje omezenou podmnožinu standardu SQL ALTER TABLE prohlášení.

V SQLite, ALTER TABLE umožňuje uživateli přejmenovat tabulku nebo přidat nový sloupec do existující tabulky.

Přidat sloupec

ADD COLUMN syntaxe se používá k přidání nového sloupce do existující tabulky.

Pojďme přidat sloupec do Umělci tabulka:

ALTER TABLE Artists
ADD COLUMN Bio TEXT;

A pak zkontrolujte tabulku s .schema příkaz:

sqlite> .schema Artists
CREATE TABLE Artists(
  ArtistId    INTEGER PRIMARY KEY, 
  ArtistName  TEXT NOT NULL
, Bio TEXT);

Při použití ADD COLUMN platí následující omezení syntaxe v SQLite:

  • Sloupec možná nemá PRIMARY KEY nebo UNIQUE omezení.
  • Sloupec nemusí mít výchozí hodnotu CURRENT_TIME , CURRENT_DATE , CURRENT_TIMESTAMP , nebo výraz v závorkách.
  • Pokud NOT NULL omezení, pak musí mít sloupec výchozí hodnotu jinou než NULL .
  • Pokud jsou povolena omezení cizího klíče a sloupec s REFERENCES je přidána klauzule, sloupec musí mít výchozí hodnotu NULL .

Přejmenovat tabulku

RENAME TO syntaxe vám umožňuje změnit název tabulky.

Pojďme přejmenovat jednu z našich tabulek:

ALTER TABLE Albums
RENAME TO Albums1;

A zkontrolujte to pomocí .tables příkaz:

sqlite> .tables
Albums1  Artists

Nyní budou muset všechny další operace používat nový název tabulky. Můžeme tedy vybrat data takto:

SELECT AlbumName, Year 
FROM Artists AS a INNER JOIN Albums1 AS r
ON a.ArtistId = r.ArtistId
WHERE a.ArtistName = 'Joe Satriani';
AlbumName             Year                                              
--------------------  --------------------------------------------------
Surfing with the Ali  1987                                              
Flying in a Blue Dre  1989                                              
Black Swans and Worm  2010                                              

Aktualizace nebo vypuštění sloupců

SQLite nepodporuje klauzule jako DROP COLUMN , ALTER COLUMN a ADD CONSTRAINT , které jsou součástí standardu SQL.

Existují však i jiné způsoby, jak tyto věci dělat s SQLite.

Změnit sloupec

Řekněme, že chceme změnit název roku do Datum vydání . Také chceme odstranit NOT NULL omezení.

Chcete-li to provést, můžete vytvořit novou tabulku (s novou definicí sloupce), naplnit tabulku daty ze staré tabulky a po dokončení starou tabulku odstranit a přejmenovat novou tak, aby odpovídala původnímu názvu.

Vytvořte novou tabulku

Nejprve vytvořte novou tabulku (všimněte si ReleaseDate místo Year ).

CREATE TABLE Albums(
  AlbumId     INTEGER PRIMARY KEY, 
  AlbumName   TEXT NOT NULL,
  ReleaseDate TEXT,
  ArtistId INTEGER NOT NULL,
  FOREIGN KEY(ArtistId) REFERENCES Artists(ArtistId)
);

Nyní tedy máme v databázi následující tabulky:

sqlite> .tables
Albums   Albums1  Artists

Vložit data

Poté vložte data ze staré tabulky.

Použijte INSERT příkaz, který vybere data ze staré tabulky a vloží je do nové tabulky. Takhle:

INSERT INTO Albums (AlbumId, AlbumName, ReleaseDate, ArtistId)
SELECT AlbumId, AlbumName, Year, ArtistId
FROM Albums1;

Ověřte, zda byla data vložena do nové tabulky:

sqlite> SELECT * FROM Albums;
AlbumId   AlbumName                        ReleaseDate  ArtistId  
--------  -------------------------------  -----------  ----------
1         Killers                          1981         7         
2         Powerslave                       1984         7         
3         Surfing with the Alien           1987         1         
4         Heavy as a Really Heavy Thing    1995         11        
5         Yummy Yummy                      1994         17        
6         Out of the Loop                  2007         6         
7         Suck on This                     1989         13        
8         Pork Soda                        1993         13        
9         Sailing the Seas of Cheese       1991         13        
10        Flying in a Blue Dream           1989         1         
11        Black Swans and Wormhole Wizard  2010         1         
12        Somewhere in Time                1986         7         
13        Big Red Car                      1995         17        

Vypustit starou tabulku

Nyní, když je nová tabulka vytvořena a naplněna daty, máme na výběr, zda starou tabulku odstranit, upravit nebo ponechat tak, jak je.

Necháme to zatím, odstraníme to později.

Přetáhněte sloupec

Chcete-li sloupec zrušit, můžete vytvořit tabulku z SELECT prohlášení. V SELECT vynechejte sloupce, které chcete vypustit — SQLite vytvoří pouze ty sloupce, které jsou zahrnuty v SELECT prohlášení.

CREATE TABLE Albums2 AS 
SELECT AlbumId, AlbumName, ArtistId 
FROM Albums1;

A pak zkontrolujte, zda byla data úspěšně vložena do nové tabulky:

sqlite> select * from Albums2;
AlbumId   AlbumName                        ArtistId  
--------  -------------------------------  ----------
1         Killers                          7         
2         Powerslave                       7         
3         Surfing with the Alien           1         
4         Heavy as a Really Heavy Thing    11        
5         Yummy Yummy                      17        
6         Out of the Loop                  6         
7         Suck on This                     13        
8         Pork Soda                        13        
9         Sailing the Seas of Cheese       13        
10        Flying in a Blue Dream           1         
11        Black Swans and Wormhole Wizard  1         
12        Somewhere in Time                7         
13        Big Red Car                      17        

Nyní tedy máme v databázi následující tabulky:

sqlite> .tables
Albums   Albums1  Albums2  Artists

  1. Statistika čekání na koleno:PAGEIOLATCH_SH

  2. Jak vyřešit nejednoznačné názvy sloupců při načítání výsledků?

  3. Jak jsou data uložena v Oracle?

  4. Doručování vánočních dárků:Santov datový model