在 SQLite 中创建、删除和修改表
最后修改于 2020 年 7 月 6 日
在本 SQLite 教程中,我们将介绍 SQLite 数据库的数据定义语言 (DDL)。DDL 由定义数据库模式的 SQL 语句组成。模式是用正式语言描述的数据库结构。在关系数据库中,模式定义了表、视图、索引、关系和触发器。
SQLite 支持以下三种 DDL 语句
- CREATE
- ALTER TABLE
- 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 修改表
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 教程中,我们正在创建、删除和修改表。