SQLite 创建表(CREATE TABLE)
                           
天天向上
发布: 2025-03-04 08:32:06

原创
632 人浏览过

在 SQLite 中,使用 CREATE TABLE 语句创建数据库表。表是存储数据的基本结构,每个表由列(字段)组成,每列有特定的数据类型。


1. 语法

CREATE TABLE table_name (
    column1 datatype constraints,
    column2 datatype constraints,
    ...
);
  • table_name:表名。
  • column1, column2, ...:列的名称。
  • datatype:列的数据类型(如 INTEGER, TEXT, REAL, BLOB)。
  • constraints:列的约束条件(如 PRIMARY KEY, NOT NULL, UNIQUE, DEFAULT)。

2. 创建简单表

示例:创建用户表

CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    age INTEGER,
    email TEXT UNIQUE
);

解释:

  • id INTEGER PRIMARY KEY AUTOINCREMENT:自动递增的主键。
  • name TEXT NOT NULL:不能为空的文本字段。
  • age INTEGER:整数类型字段。
  • email TEXT UNIQUE:唯一的电子邮件字段。

3. 创建带外键的表

SQLite 支持外键,但必须启用:

PRAGMA foreign_keys = ON;

示例:创建订单表(引用 users 表)

CREATE TABLE orders (
    order_id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER NOT NULL,
    amount REAL NOT NULL,
    order_date TEXT DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
  • user_id 作为外键,关联 users 表的 id
  • ON DELETE CASCADE:如果 users 表中的某个用户被删除,其订单也会被自动删除。

4. 检查表是否已存在

SQLite 不允许创建同名表,可以使用 IF NOT EXISTS 避免错误:

CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL
);

5. 查看数据库中的表

.tables

或者查看 sqlite_master

SELECT name FROM sqlite_master WHERE type='table';

6. 删除表

如果要删除表:

DROP TABLE IF EXISTS users;

7. 在 Python 中创建表

import sqlite3

# 连接数据库
conn = sqlite3.connect('my_database.db')
cursor = conn.cursor()

# 创建表
cursor.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        age INTEGER,
        email TEXT UNIQUE
    );
''')

# 提交更改
conn.commit()

# 关闭连接
conn.close()

总结

  • 使用 CREATE TABLE 创建表。
  • PRIMARY KEY AUTOINCREMENT 生成唯一 ID。
  • FOREIGN KEY 创建表间关联,需 PRAGMA foreign_keys = ON;
  • IF NOT EXISTS 避免重复创建表。
  • 可以用 sqlite_master 查询已有表。

更多详细内容请关注其他相关文章。

发表回复 0

Your email address will not be published. Required fields are marked *