SQLite Create, Alter and Drop table

Ultimo aggiornamento del 26 febbraio 2020 08:08:49 (UTC/GMT +8 ore)

Introduzione

Il comando SQLite CREATE TABLE è usato per creare una nuova tabella in un database SQLite. Si usa anche per creare indici, viste e trigger. Un comando CREATE TABLE specifica i seguenti attributi della nuova tabella:.

  • Il nome della nuova tabella.
  • Il database in cui viene creata la nuova tabella. Le tabelle possono essere create nel database principale, nel database temporaneo o in qualsiasi database collegato.
  • Il nome di ogni colonna nella tabella.
  • Il tipo dichiarato di ogni colonna nella tabella e ogni colonna deve avere un tipo di dato, che può essere NULL – il valore è un valore nullo, INTEGER – un intero firmato, REAL – un valore in virgola mobile, TEXT – una stringa di testo o BLOB – un blob di dati.
  • Un valore o espressione di default per ogni colonna nella tabella.
  • Una sequenza di ordinamento predefinita da usare con ogni colonna.
  • Optionalmente, una PRIMARY KEY per la tabella. Sono supportate sia le chiavi primarie a colonna singola che quelle composte (colonne multiple).
  • Un insieme di vincoli SQL per ogni tabella. SQLite supporta i vincoli UNIQUE, NOT NULL, CHECK e FOREIGN KEY.
  • Un indice unico verrà creato automaticamente per applicare un vincolo UNIQUE o PRIMARY KEY e non può essere eliminato manualmente con il comando DROP INDEX.

Tabella dei contenuti

Convenzioni di denominazione

Sintassi

Esempio

ALTER TABLE

DROP TABLE

Convenzioni di denominazione

Ogni database, tabella, colonna, indice, trigger o vista dovrebbe avere un nome con cui può essere identificato. Un nome identificativo deve iniziare con una lettera o con il carattere underscore, che può essere seguito da un numero di caratteri alfanumerici o underscore. Non sono ammessi altri caratteri con questo nome.

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. I nomi delle tabelle e delle colonne possono essere digitati in maiuscolo, minuscolo o misto, e diverse capitalizzazioni dello stesso nome di un oggetto del database possono essere usate in modo intercambiabile.

Note:

Quando una nuova tabella viene creata, deve essere in un database e il nome del database può essere “main”, “temp”, o il nome di un database collegato.Se la parola chiave “TEMP” o “TEMPORARY” viene usata tra “CREATE” e “TABLE”, allora la nuova tabella viene creata nel database temporaneo; non è possibile usare sia il nome del database che la parola chiave TEMP o TEMPORARY; se non viene specificato il nome del database e la parola chiave TEMP non è presente, la tabella viene creata nel database principale.

Tentando di creare una tabella in un database che contiene una tabella o un indice o una vista con lo stesso nome, si verificherà un errore, ma se la clausola “IF NOT EXISTS” è specificata come parte dell’istruzione CREATE TABLE non creerà alcun effetto.

Sintassi:

CREATE TABLE table-name (column-def);

TEMPORARY – una tabella può essere dichiarata temporanea, se lo si desidera.

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. Qui vedi sotto-

sqlite> create table TEMPORARY company( ...> com_id text(4), ...> com_name text(15));Error: near "company": syntax error 

Fare una copia di una tabella esistente all’interno del database principale

È molto necessario per uno sviluppatore fare un backup della tabella originale che è in funzione, e come nessuna misura dannosa è accaduta inavvertitamente o accuratamente al momento dello sviluppo. Inoltre, potrebbe essere necessario cambiare i nomi delle colonne o rimuovere una o più colonne da una tabella sqlite, quindi è buona pratica prendere un backup della tabella di lavoro di volta in volta.

Se si vuole fare un backup della tabella aziendale con tutti i record, si può usare la seguente dichiarazione

CREATE TABLE backup_company AS SELECT * FROM company ;

Se si vuole fare un backup della sola struttura della tabella aziendale, si può usare la seguente dichiarazione

CREATE TABLE backup_company AS SELECT * FROM company LIMIT 0;

ALTER TABLE

Il comando ALTER TABLE può essere usato solo in SQLite per permettere all’utente solo di rinominare una tabella o di aggiungere una nuova colonna ad una tabella esistente. Non è possibile rinominare una colonna o rimuovere una colonna, o aggiungere o rimuovere vincoli da una tabella.

Il comando RENAME TO si usa per rinominare la tabella identificata da table-name in new-table-name. Questo comando non può essere usato per spostare una tabella all’interno di due database, ma solo per rinominarla all’interno dello stesso database.

Se la tabella che viene rinominata contiene trigger o indici, non ci sarà alcun effetto e questi rimarranno intatti come erano prima della rinomina. Tuttavia, qualsiasi definizione di vista, o istruzioni eseguite da trigger che si riferiscono alla tabella rinominata, non saranno automaticamente modificate.

Qui creiamo una nuova tabella azienda.

sqlite> create table company( ...> com_id text(4), ...> com_name text(15));

Per aggiungere una nuova colonna:

ALTER TABLE company ADD com_add VARCHAR(50);

Dopo aver aggiunto una colonna vedere la struttura della tabella azienda.

sqlite> .schemaCREATE TABLE company(com_id text(4),com_name text(15), com_add VARCHAR(50));

Per rinominare una tabella:

sqlite> .tablescompany hrdb.departments hrdb.jobshrdb.countries hrdb.employees hrdb.locationshrdb.department hrdb.job_history hrdb.regions

Nominare ora la tabella azienda con il nuovo nome azienda_nuova. Ecco la dichiarazione qui sotto.

ALTER TABLE company RENAME TO company_new;

Dopo aver rinominato, vedere la lista delle tabelle qui sotto.

sqlite> .tablescompany_new hrdb.departments hrdb.jobshrdb.countries hrdb.employees hrdb.locationshrdb.department hrdb.job_history hrdb.regions

Rinominare o eliminare la colonna da una tabella:

Nota: Sqlite ha solo un supporto ALTER TABLE limitato. Eliminare colonne e rinominare non è supportato da SQLite. Quindi è meglio creare una nuova tabella con le modifiche in base alle vostre esigenze, poi eliminare la tabella originale e rinominare nuovamente la nuova tabella appena creata con il nome della tabella originale. Una cosa da ricordare è che, una volta che una tabella viene eliminata, tutti i trigger associati saranno persi, quindi siate consapevoli di questo. È una buona idea che, prima di rinominare o eliminare una tabella, tu possa prendere una copia della dichiarazione di creazione della tabella. Ecco la dichiarazione da cui otterrai la dichiarazione.

SELECT sql FROM sqlite_master WHERE tbl_name = 'table_name';

DROP TABLE

Il comando DROP TABLE rimuove una tabella da un database.

Sintassi:

DROP TABLE table_name orDROP TABLE table_name 

Paremetri:

nome_tabella – Il nome di una tabella esistente che vuoi eliminare. You may drop more than one tables by specifying their names seperated by a comma.

DROP TABLE company_new;

Previous: Data Types
Next: Constraint

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *