sql >> Database >  >> RDS >> SQLite

SQLite ALTER TABLE

Samenvatting :in deze tutorial leer je hoe je SQLite ALTER TABLE gebruikt statement om de structuur van een bestaande tabel te wijzigen.

In tegenstelling tot SQL-standaard en andere databasesystemen, ondersteunt SQLite een zeer beperkte functionaliteit van de ALTER TABLE verklaring.

Door een SQLite ALTER TABLE . te gebruiken statement, kunt u twee acties uitvoeren:

  1. De naam van een tabel wijzigen.
  2. Voeg een nieuwe kolom toe aan een tabel.
  3. De naam van een kolom wijzigen (toegevoegd ondersteund in versie 3.20.0)

SQLite ALTER TABLE gebruiken om een ​​tabel te hernoemen

Om een ​​tabel te hernoemen, gebruik je de volgende ALTER TABLE RENAME TO verklaring:

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

Dit zijn belangrijke punten die u moet weten voordat u de naam van een tabel wijzigt:

  • De ALTER TABLE hernoemt alleen een tabel binnen een database. U kunt het niet gebruiken om de tabel tussen de bijgevoegde databases te verplaatsen.
  • De database-objecten zoals indexen en triggers die aan de tabel zijn gekoppeld, worden aan de nieuwe tabel gekoppeld.
  • Als naar een tabel wordt verwezen door views of instructies in triggers, moet u de definitie van views en triggers handmatig wijzigen.

Laten we een voorbeeld nemen van het hernoemen van een tabel.

Maak eerst een tabel met de naam devices die drie kolommen heeft:name, model , serial; en voeg een nieuwe rij toe aan de devices tafel.

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)

Probeer het

Ten tweede, gebruik de ALTER TABLE RENAME TO statement om de devices . te wijzigen tafel naar equipment tabel als volgt:

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

Probeer het

Ten derde, gegevens opvragen van de equipment tabel om de RENAME . te verifiëren bediening.

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

Probeer het

SQLite ALTER TABLE gebruiken om een ​​nieuwe kolom aan een tabel toe te voegen

U kunt de SQLite ALTER TABLE . gebruiken statement om een ​​nieuwe kolom aan een bestaande tabel toe te voegen. In dit scenario voegt SQLite de nieuwe kolom toe aan het einde van de bestaande kolomlijst.

Het volgende illustreert de syntaxis van ALTER TABLE ADD COLUMN verklaring:

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

Er zijn enkele beperkingen voor de nieuwe kolom:

  • De nieuwe kolom mag geen UNIQUE . hebben of PRIMARY KEY beperking.
  • Als de nieuwe kolom een ​​NOT NULL heeft beperking, moet u een andere standaardwaarde voor de kolom opgeven dan een NULL waarde.
  • De nieuwe kolom mag geen standaard CURRENT_TIMESTAMP . hebben , CURRENT_DATE , en CURRENT_TIME , of een uitdrukking.
  • Als de nieuwe kolom een ​​externe sleutel is en de beperkingscontrole van de externe sleutel is ingeschakeld, moet de nieuwe kolom een ​​standaardwaarde accepteren NULL .

U kunt bijvoorbeeld een nieuwe kolom toevoegen met de naam location naar de equipment tafel:

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

Probeer het

SQLite ALTER TABLE gebruiken om een ​​kolom te hernoemen

SQLite heeft ondersteuning toegevoegd voor het hernoemen van een kolom met behulp van ALTER TABLE RENAME COLUMN verklaring in versie 3.20.0

Het volgende toont de syntaxis van de ALTER TABLE RENAME COLUMN verklaring:

ALTER TABLE table_name
RENAME COLUMN current_name TO new_name;

Raadpleeg de tutorial over het hernoemen van kolommen voor meer informatie over het hernoemen van een kolom.

SQLite ALTER TABLE gebruiken voor andere acties

Als u andere acties wilt uitvoeren, bijvoorbeeld een kolom neerzetten, gebruikt u de volgende stappen:

Het volgende script illustreert de bovenstaande stappen:

-- 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 voorbeeld

SQLite biedt geen ondersteuning voor ALTER TABLE DROP COLUMN uitspraak. Om een ​​kolom neer te zetten, moet je de bovenstaande stappen volgen.

Het volgende script maakt twee tabellen users en favorites , en voeg gegevens in deze tabellen in:

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)

De volgende instructie retourneert gegevens van de users tafel:

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

En de volgende instructie retourneert de gegevens van de favorites tafel:

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

Stel dat u de kolom phone . wilt laten vallen van de users tafel.

Schakel eerst de beperkingscontrole van de refererende sleutel uit:

PRAGMA foreign_keys=off;

Ten tweede, start een nieuwe transactie:

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

Ten derde, maak een nieuwe tabel om de gegevens van de users te bevatten tabel behalve de phone kolom:

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)

Ten vierde, kopieer gegevens van de users aan persons tafel:

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

Ten vijfde, laat de users vallen tafel:

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

Ten zesde, hernoem de persons tabel aan users tafel:

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

Ten zevende, voer de transactie uit:

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

Ten achtste, schakel de beperking van de externe sleutel in:

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

Hier zijn de users tafel na het laten vallen van de phone kolom:

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

Samenvatting

  • Gebruik de ALTER TABLE statement om de structuur van een bestaande tabel te wijzigen.
  • Gebruik ALTER TABLE table_name RENAME TO new_name statement om de naam van een tabel te wijzigen.
  • Gebruik ALTER TABLE table_name ADD COLUMN column_definition statement om een ​​kolom aan een tabel toe te voegen.
  • Gebruik ALTER TABLE table_name RENAME COLUMN current_name TO new_name om een ​​kolom te hernoemen.

  1. MYSQL Selecteer MAX Date in een join-instructie

  2. FOUT:het laden van lokale gegevens is uitgeschakeld - dit moet zowel aan de client- als aan de serverzijde zijn ingeschakeld

  3. Over geclusterde index in postgres

  4. Hoe verwijder ik alle gebruikerstabellen?