Skip to main content

SQLite DROP TABLE语句及其示例

SQLite DROP TABLE语句简介

要删除数据库中的表,可以使用SQLite DROP table语句。声明简单如下:

DROP TABLE [IF EXISTS] [schema_name.]table_name;

在这种语法中,在删除表关键字之后指定要删除的表的名称。

SQLite允许您一次只删除一个表。要删除多个表,需要发出多个DROP TABLE语句。

如果删除不存在的表,SQLite将发出错误。如果使用If EXISTS选项,则SQLite仅在该表存在时删除该表,否则,它将忽略该语句而不执行任何操作。

如果要删除特定数据库中的表,请使用[schema_name.]明确地

如果表具有触发器和索引等依赖对象,DROP table语句还会删除所有依赖对象。

DROP TABLE语句在删除表之前执行隐式DELETE语句。但是,DROP TABLE语句会在执行implicit DELETE语句之前删除与该表关联的触发器,因此,DELETE触发器不会触发。

如果启用外键约束并执行DROP TABLE语句,则在SQLite执行implicit DELETE语句之前,它会执行外键约束检查。如果发生外键约束冲突,SQLite将发出错误消息,并且不会删除该表。

请注意,DROP TABLE语句将从数据库中删除该表,并完全删除磁盘上的文件。您将无法撤消或恢复此操作。因此,在执行DROP TABLE语句时应该格外小心。

SQLite DROP TABLE语句示例

出于演示目的,我们将创建两个表:人员和地址。每个人都有一个地址。一个地址可以由多人共享。

首先,创建表:

CREATE TABLE IF NOT EXISTS people (
person_id INTEGER PRIMARY KEY,
first_name TEXT,
last_name TEXT,
address_id INTEGER,
FOREIGN KEY (address_id)
REFERENCES addresses (address_id)
);

CREATE TABLE IF NOT EXISTS addresses (
address_id INTEGER PRIMARY KEY,
house_no TEXT,
street TEXT,
city TEXT,
postal_code TEXT,
country TEXT
);

试试看

SQLite DROP TABLE example

第二,在地址和人员表中插入地址和人员。

INSERT INTO addresses ( house_no, street, city, postal_code, country ) 
VALUES ( '3960', 'North 1st Street', 'San Jose ', '95134', 'USA ' );
INSERT INTO people ( first_name, last_name, address_id )
VALUES ('John', 'Doe', 1);

试试看

第三,使用DROP TABLE语句删除addresses表。

DROP TABLE addresses;

试试看

SQLite发出了一条错误消息:

constraint failed

试试看

因为此操作违反了外键约束。

要删除地址表,您必须:

见以下声明:

PRAGMA foreign_keys = OFF;

DROP TABLE addresses;

UPDATE people
SET address_id = NULL;

PRAGMA foreign_keys = ON;

试试看

删除addresses表,并将address_id列的值更新为空值。

在本教程中,您学习了如何使用SQLite DROP TABLE语句从数据库中完全删除该表。