跳转至

在 SQLite 中创建,删除和更改表

原文: http://zetcode.com/db/sqlite/tables/

在 SQLite 教程的这一部分中,我们将介绍 SQLite 数据库的数据定义语言(DDL)。 DDL 由定义数据库架构的 SQL 语句组成。 模式是以正式语言描述的数据库结构。 在关系数据库中,模式定义表,视图,索引,关系和触发器。

SQLite 支持以下三个 DDL 语句:

  • CREATE
  • ALTER
  • DROP

在 SQLite 中,CREATE语句用于创建表,索引,视图和触发器。 ALTER TABLE语句更改表的结构。 DROP语句删除表,索引,视图或触发器。

SQLite 创建表

CREATE语句用于创建表。 它还用于创建索引,视图和触发器。

要创建表,我们给表及其列命名。 每列可以具有以下数据类型之一:

  • NULL — 该值为NULL
  • INTEGER — 有符号整数
  • REAL — 浮点值
  • TEXT- 文本字符串
  • BLOB — 数据块
sqlite> CREATE TABLE Testing(Id INTEGER);
sqlite> .schema Testing
CREATE TABLE Testing(Id INTEGER);

我们使用CREATE TABLE语句创建一个简单的Testing表。 .schema命令显示该表的形式定义。

sqlite> CREATE TABLE Testing(Id INTEGER);
Error: table Testing already exists

如果我们尝试创建一个已经存在的表,则会出现错误。 因此,CREATE TABLE语句具有可选的IF NOT EXISTS子句。 使用此子句不会做任何事情,我们不会收到任何错误。

sqlite> CREATE TABLE IF NOT EXISTS Testing(Id INTEGER);

对于尝试创建一个已经存在的表,我们没有收到错误消息。

CREATE TABLE ... AS语句可基于SELECT语句创建新表。

sqlite> CREATE TABLE Cars2 AS SELECT * FROM Cars;

上面的语句使用特定的SELECT语句创建与Cars表相同的表。

sqlite> ATTACH DATABASE 'test2.db' AS test2;
sqlite> .databases
main: /home/janbodnar/tmp/test.db
test2: /home/janbodnar/tmp/test2.db

我们使用ATTACH DATABASE语句将新数据库添加到当前数据库连接中。 第一个数据库称为main,新数据库称为test2

sqlite> CREATE TABLE test2.Cars(Id INTEGER PRIMARY KEY, Name TEXT, Price INTEGER);
sqlite> INSERT INTO test2.Cars VALUES(1, 'Porsche', 107699);
sqlite> SELECT * FROM main.Cars WHERE Id=1;
1           Audi        52642     
sqlite> SELECT * FROM test2.Cars WHERE Id=1;
1           Porsche     107699   

由于我们有两个数据库,因此如果要在test2数据库中创建表,则必须指定数据库名称。 数据库名称位于表名称之前。 在这种情况下,如果未指定数据库名称,则将自动选择main

sqlite> CREATE TEMPORARY TABLE Cars(Id INTEGER PRIMARY KEY, Name TEXT, Price INTEGER);
sqlite> INSERT INTO temp.Cars VALUES (1, 'Kia', 24300);
sqlite> .databases
main: /home/janbodnar/tmp/test.db
temp: 
test2: /home/janbodnar/tmp/test2.db
sqlite> SELECT * FROM temp.Cars WHERE Id=1;
Id          Name        Price     
----------  ----------  ----------
1           Kia         24300     
sqlite> 

使用TEMPORARY关键字,我们创建一个临时数据库。 每次关闭数据库连接时,都会破坏一个临时数据库。 临时数据库的名称为temp

SQLite 删除表

DROP语句用于从数据库中删除表。

sqlite> .tables
Authors       Cars2         Orders        temp.Cars   
Books         Customers     Reservations  test2.Cars  
Cars          Friends       Testing     
sqlite> DROP TABLE Testing;
sqlite> .tables
Authors       Cars          Customers     Orders        temp.Cars   
Books         Cars2         Friends       Reservations  test2.Cars  

我们使用.tables命令显示可用表。 DROP TABLE语句从数据库中删除Testing表。

sqlite> DROP TABLE Testing;
Error: no such table: Testing

尝试删除不存在的表会导致错误。 使用IF EXISTS子句,我们可以避免此错误。

sqlite> DROP TABLE IF EXISTS Testing;

该语句仅在存在Testing表时才会删除。

sqlite> DROP TABLE IF EXISTS test2.Cars;

该 SQL 语句从test2数据库中删除Cars表。

SQLite ALTER TABLE

SQLite 支持ALTER TABLE语句的有限子集。 SQLite 中的此语句允许用户重命名表或向现有表添加新列。 无法重命名列,删除列或从表中添加或删除约束。

sqlite> CREATE TABLE Names(Id INTEGER, Name TEXT);

让我们创建一个要重命名的表Names

sqlite> ALTER TABLE Names RENAME TO NamesOfFriends;

我们将表重命名为NamesOfFriends

sqlite> .schema NamesOfFriends
CREATE TABLE "NamesOfFriends"(Id INTEGER, Name TEXT);

我们验证重命名表的架构。

假设我们要向表中添加一个新列。

sqlite> ALTER TABLE NamesOfFriends ADD COLUMN Email TEXT;

SQL 语句将名为Email的新列添加到表中。

sqlite> .schema NamesOfFriends
CREATE TABLE "NamesOfFriends"(Id INTEGER, Name TEXT, Email TEXT);

在这里,我们看到了表的新结构。

在 SQLite 教程的这一部分中,我们将创建,删除和更改表。



回到顶部