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

SQLite ALTER TABLE

Shrnutí :v tomto tutoriálu se naučíte používat SQLite ALTER TABLE příkaz ke změně struktury existující tabulky.

Na rozdíl od standardu SQL a jiných databázových systémů podporuje SQLite velmi omezenou funkčnost ALTER TABLE prohlášení.

Pomocí SQLite ALTER TABLE můžete provést dvě akce:

  1. Přejmenujte tabulku.
  2. Přidejte do tabulky nový sloupec.
  3. Přejmenujte sloupec (podporováno ve verzi 3.20.0)

Použití SQLite ALTER TABLE k přejmenování tabulky

Chcete-li přejmenovat tabulku, použijte následující ALTER TABLE RENAME TO prohlášení:

ALTER TABLE existing_table
RENAME TO new_table;Code language: SQL (Structured Query Language) (sql)

Toto jsou důležité body, které byste měli vědět, než tabulku přejmenujete:

  • ALTER TABLE pouze přejmenuje tabulku v databázi. Nemůžete jej použít k přesunutí tabulky mezi připojenými databázemi.
  • Databázové objekty, jako jsou indexy a spouštěče přidružené k tabulce, budou přidruženy k nové tabulce.
  • Pokud na tabulku odkazují pohledy nebo příkazy ve spouštěčích, musíte ručně změnit definici pohledů a spouštěčů.

Vezměme si příklad přejmenování tabulky.

Nejprve vytvořte tabulku s názvem devices který má tři sloupce:name, model , serial; a vložte nový řádek do devices tabulka.

CREATE TABLE devices (
   name TEXT NOT NULL,
   model TEXT NOT NULL,
   Serial INTEGER NOT NULL UNIQUE
);

INSERT INTO devices (name, model, serial)
VALUES('HP ZBook 17 G3 Mobile Workstation','ZBook','SN-2015');Code language: SQL (Structured Query Language) (sql)

Zkuste to

Za druhé, použijte ALTER TABLE RENAME TO příkaz ke změně devices stůl na equipment tabulka takto:

ALTER TABLE devices
RENAME TO equipment;Code language: SQL (Structured Query Language) (sql)

Zkuste to

Za třetí, dotazujte se na data z devices tabulku pro ověření RENAME operace.

SELECT
	name,
	model,
	serial
FROM
	equipment;Code language: SQL (Structured Query Language) (sql)

Zkuste to

Použití SQLite ALTER TABLE k přidání nového sloupce do tabulky

Můžete použít SQLite ALTER TABLE příkaz přidat nový sloupec do existující tabulky. V tomto scénáři SQLite připojí nový sloupec na konec existujícího seznamu sloupců.

Následující text ilustruje syntaxi ALTER TABLE ADD COLUMN prohlášení:

ALTER TABLE table_name
ADD COLUMN column_definition;Code language: SQL (Structured Query Language) (sql)

Pro nový sloupec platí určitá omezení:

  • Nový sloupec nemůže mít UNIQUE nebo PRIMARY KEY omezení.
  • Pokud má nový sloupec hodnotu NOT NULL omezení, musíte zadat výchozí hodnotu pro sloupec jinou než NULL hodnotu.
  • Výchozí hodnota nového sloupce nemůže být CURRENT_TIMESTAMP , CURRENT_DATE a CURRENT_TIME nebo výraz.
  • Pokud je novým sloupcem cizí klíč a je povolena kontrola omezení cizího klíče, musí nový sloupec přijímat výchozí hodnotu NULL .

Můžete například přidat nový sloupec s názvem location do devices tabulka:

ALTER TABLE equipment 
ADD COLUMN location text;Code language: SQL (Structured Query Language) (sql)

Zkuste to

Použití SQLite ALTER TABLE k přejmenování sloupce

SQLite přidalo podporu pro přejmenování sloupce pomocí ALTER TABLE RENAME COLUMN prohlášení ve verzi 3.20.0

Následující text ukazuje syntaxi ALTER TABLE RENAME COLUMN prohlášení:

ALTER TABLE table_name
RENAME COLUMN current_name TO new_name;

Další informace o tom, jak přejmenovat sloupec, najdete v kurzu přejmenování sloupce.

Použití SQLite ALTER TABLE pro další akce

Pokud chcete provést další akce, např. vypustit sloupec, použijte následující kroky:

Následující skript ilustruje výše uvedené kroky:

-- disable foreign key constraint check
PRAGMA foreign_keys=off;

-- start a transaction
BEGIN TRANSACTION;

-- Here you can drop column
CREATE TABLE IF NOT EXISTS new_table( 
   column_definition,
   ...
);
-- copy data from the table to the new_table
INSERT INTO new_table(column_list)
SELECT column_list
FROM table;

-- drop the table
DROP TABLE table;

-- rename the new_table to the table
ALTER TABLE new_table RENAME TO table; 

-- commit the transaction
COMMIT;

-- enable foreign key constraint check
PRAGMA foreign_keys=on;Code language: SQL (Structured Query Language) (sql)

SQLite ALTER TABLE DROP COLUMN příklad

SQLite nepodporuje ALTER TABLE DROP COLUMN prohlášení. Chcete-li sloupec vypustit, musíte použít výše uvedené kroky.

Následující skript vytvoří dvě tabulky users a favorites a vložte data do těchto tabulek:

CREATE TABLE users(
	UserId INTEGER PRIMARY KEY,
	FirstName TEXT NOT NULL,
	LastName TEXT NOT NULL,
	Email TEXT NOT NULL,
	Phone TEXT NOT NULL
);

CREATE TABLE favorites(
	UserId INTEGER,
	PlaylistId INTEGER,
	FOREIGN KEY(UserId) REFERENCES users(UserId),
	FOREIGN KEY(PlaylistId) REFERENCES playlists(PlaylistId)
);

INSERT INTO users(FirstName, LastName, Email, Phone)
VALUES('John','Doe','[email protected]','408-234-3456');

INSERT INTO favorites(UserId, PlaylistId)
VALUES(1,1);Code language: SQL (Structured Query Language) (sql)

Následující příkaz vrací data od users tabulka:

SELECT * FROM users;Code language: SQL (Structured Query Language) (sql)

A následující příkaz vrátí data z favorites tabulka:

SELECT * FROM favorites;Code language: SQL (Structured Query Language) (sql)

Předpokládejme, že chcete odstranit sloupec phone users tabulka.

Nejprve vypněte kontrolu omezení cizího klíče:

PRAGMA foreign_keys=off;

Zadruhé zahajte novou transakci:

BEGIN TRANSACTION;Code language: SQL (Structured Query Language) (sql)

Za třetí, vytvořte novou tabulku, která bude obsahovat data users tabulka kromě phone sloupec:

CREATE TABLE IF NOT EXISTS persons (
	UserId INTEGER PRIMARY KEY,
	FirstName TEXT NOT NULL,
	LastName TEXT NOT NULL,
	Email TEXT NOT NULL
);Code language: SQL (Structured Query Language) (sql)

Za čtvrté, zkopírujte data od users persons tabulka:

INSERT INTO persons(UserId, FirstName, LastName, Email)
SELECT UserId, FirstName, LastName, Email 
FROM users;
Code language: SQL (Structured Query Language) (sql)

Za páté, vypusťte users tabulka:

DROP TABLE users;Code language: SQL (Structured Query Language) (sql)

Za šesté, přejmenujte persons tabulky users tabulka:

ALTER TABLE persons RENAME TO users;Code language: SQL (Structured Query Language) (sql)

Za sedmé, potvrďte transakci:

COMMIT;Code language: SQL (Structured Query Language) (sql)

Za osmé, povolte kontrolu omezení cizího klíče:

PRAGMA foreign_keys=on;Code language: SQL (Structured Query Language) (sql)

Zde jsou users tabulky po upuštění phone sloupec:

SELECT * FROM users;Code language: SQL (Structured Query Language) (sql)

Shrnutí

  • Použijte ALTER TABLE příkaz k úpravě struktury existující tabulky.
  • Použijte ALTER TABLE table_name RENAME TO new_name příkaz k přejmenování tabulky.
  • Použijte ALTER TABLE table_name ADD COLUMN column_definition příkaz k přidání sloupce do tabulky.
  • Použijte ALTER TABLE table_name RENAME COLUMN current_name TO new_name přejmenovat sloupec.

  1. T-SQL úterý #64:Jeden spouštěč nebo mnoho?

  2. Dynamický pivot v oracle sql

  3. Další argument pro uložené procedury

  4. Použití MySQLi k VLOŽENÍ dat do databáze