前言
上一篇简单介绍了 SQLite 中对数据库的一些常见操作,这一节继续说一下数据库中表的一些常见操作。
对表的操作一般使用 SQL 语句。
SQLite 数据库中表的存储
只需要明白数据库(Database)包含多张表(Table),表包含多行(Row),每一行又由多个列(Column)组成即可。
创建表
可以用 CREATE TABLE 语句在数据库中新增一个表。使用单列主键时,它的 SQL 语法如下:
CREATE TABLE table_name (
column1 datatype PRIMARY KEY,
column2 datatype,
column3 datatype
);
如果主键由多个列组成,需要在所有列定义之后声明:
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
PRIMARY KEY (column1, column2)
);
比如,我要在数据库中创建一个记录学生信息的表,可以输入以下语句:
sqlite> CREATE TABLE stu(
...> id INTEGER PRIMARY KEY,
...> name TEXT,
...> city TEXT,
...> score INTEGER
...> );
可以看到,这个表叫 stu,有四列数据,分别是:
- id - 整数,用于记录 ID
id还被设置为PRIMARY KEY,也就是主键
每个表最多有一个主键,但这个主键可以由一列或多列组成
在这个例子中,id是INTEGER PRIMARY KEY,因此它的值不会重复 - name - 文本,用于记录名字
- city - 文本,用于记录城市
- score - 整数,用于记录成绩
删除表
可以用 DROP TABLE 语句删除数据库中的表。它的 SQL 语法如下:
DROP TABLE database_name.table_name;
使用此命令时要特别注意,因为表一旦被删除,其中的所有信息也会永远丢失。
比如,我想删除一个名为 teacher 的表,可以输入以下语句:
sqlite> DROP TABLE teacher;
修改表
可以用 ALTER TABLE 语句修改数据库中已有的表。这里介绍重命名表和添加列这两种操作。
重命名表的 SQL 语法如下:
ALTER TABLE database_name.table_name RENAME TO new_table_name;
向已有的表中添加新列的 SQL 语法如下:
ALTER TABLE database_name.table_name ADD COLUMN column_def...;
比如,有一个存储学生信息的表 stu,我想将其改名为 student,可以输入以下语句:
sqlite> ALTER TABLE stu RENAME TO student;
此外,如果想向 student 表中添加一个表示年龄的列,可以输入以下语句:
sqlite> ALTER TABLE student ADD age INTEGER;
查看表
sqlite3 CLI 工具提供了一些用于查看用户所创建表的点命令:
.tables ?TABLE?
列出符合模式的表和视图.schema ?PATTERN?
列出符合模式的数据库对象的CREATE语句
.tables 一般用于显示表和视图的名字。.schema 显示的信息更完整,它会直接显示表、索引、视图和触发器等数据库对象的 CREATE 语句,能够清楚地看出数据库的结构。
表内数据的增删改查
增
可以用 INSERT INTO 语句向数据库中的表插入新数据。它的 SQL 语法如下:
INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]
VALUES (value1, value2, value3,...valueN);
在这里,column1, column2,…columnN 是要插入数据的表中的列的名称。
如果要为表中的所有列添加值,您也可以不需要在 SQLite 查询中指定列名称。但要确保值的顺序与列在表中的顺序一致。
比如,当前数据库中有这样一个表:
sqlite> .schema
CREATE TABLE stu(
id INTEGER PRIMARY KEY,
name TEXT,
city TEXT,
score INTEGER
);
我想向其中插入三个新同学的信息,可以输入以下语句:
-- 写明白所有列
sqlite> INSERT INTO stu
...> VALUES (0, 'Wang', 'Beijing', 50);
-- 不写 city 列
sqlite> INSERT INTO stu (id, name, score)
...> VALUES (1, 'Li', 60);
-- 不写 score 列
sqlite> INSERT INTO stu (id, name, city)
...> VALUES (2, 'Zhao', 'Wuhan');
使用 SELECT 语句即可查看表中的新数据:
sqlite> SELECT * from stu;
id name city score
-- ---- ------- -----
0 Wang Beijing 50
1 Li 60
2 Zhao Wuhan
删
可以用 DELETE 语句删除数据库表中已有的记录。它的 SQL 语法如下:
DELETE FROM table_name
WHERE [condition];
这里需要用到 WHERE 语句来确定要删除哪一行的信息。
关于 WHERE 语句,具体用法可以查看介绍匹配语句的博客 SQLite(4):匹配语句。
比如,有一个 stu 表,表中有以下信息:
sqlite> SELECT * from stu;
id name city score
-- ---- ------- -----
0 Wang Beijing 50
1 Li 60
2 Zhao Wuhan
如果想删除 Li 同学的数据,可以输入以下语句:
sqlite> DELETE FROM stu
...> WHERE name = 'Li';
再次查看表中的数据,可以看到:
sqlite> SELECT * from stu;
id name city score
-- ---- ------- -----
0 Wang Beijing 50
2 Zhao Wuhan
改
可以用 UPDATE 语句修改数据库表中已有的记录。它的 SQL 语法如下:
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];
这里需要用到 WHERE 语句来确定要修改哪一行的信息。
关于 WHERE 语句,具体用法可以查看介绍匹配语句的博客 SQLite(4):匹配语句。
比如,有一个 stu 表,表中有以下信息:
sqlite> SELECT * from stu;
id name city score
-- ---- ------- -----
0 Wang Beijing 50
1 Li 60
2 Zhao Wuhan
如果想修改 Li 同学的 city 与 score 列,可以输入以下语句:
sqlite> UPDATE stu
...> SET city = 'Tianjin', score = 80
...> WHERE name = 'Li';
再次查看表中的数据,可以看到:
sqlite> SELECT * from stu;
id name city score
-- ---- ------- -----
0 Wang Beijing 50
1 Li Tianjin 80
2 Zhao Wuhan
查
可以用 SELECT 语句获取数据库表中已有的数据,并以结果表的形式返回。这些结果表也被称为结果集。
其 SQL 语法如下:
SELECT column1, column2, columnN FROM table_name;
在这里,column1、column2……是表中的字段,它们的值就是要获取的数据。如果想获取所有字段,可以使用下面的语法:
SELECT * FROM table_name;
比如,有一个 stu 表,我要查看它的所有列,可以输入以下语句:
sqlite> SELECT * from stu;
id name city score
-- ---- ------- -----
0 Wang Beijing 50
1 Li Tianjin 80
2 Zhao Wuhan