实现代码(Python示例,使用sqlite3
库)
import sqlite3
try:
# 连接到SQLite数据库,如果不存在则创建
conn = sqlite3.connect('project_management.db')
cursor = conn.cursor()
# 开启事务
cursor.execute('BEGIN')
# 创建项目表
cursor.execute('''
CREATE TABLE IF NOT EXISTS projects (
project_id INTEGER PRIMARY KEY AUTOINCREMENT,
project_name TEXT NOT NULL
)
''')
# 创建任务表
cursor.execute('''
CREATE TABLE IF NOT EXISTS tasks (
task_id INTEGER PRIMARY KEY AUTOINCREMENT,
project_id INTEGER NOT NULL,
task_description TEXT NOT NULL,
FOREIGN KEY (project_id) REFERENCES projects(project_id)
)
''')
# 插入一条项目初始数据
cursor.execute('INSERT INTO projects (project_name) VALUES (?)', ('示例项目',))
project_id = cursor.lastrowid
# 插入两条对应的任务数据
cursor.execute('INSERT INTO tasks (project_id, task_description) VALUES (?,?)', (project_id, '任务1描述'))
cursor.execute('INSERT INTO tasks (project_id, task_description) VALUES (?,?)', (project_id, '任务2描述'))
# 提交事务
cursor.execute('COMMIT')
print("数据库创建、表创建及数据插入成功")
except sqlite3.Error as e:
# 捕获异常,回滚事务
conn.execute('ROLLBACK')
print(f"发生错误: {e}")
finally:
# 关闭连接
if conn:
conn.close()
异常处理以保证数据完整性
- 使用事务:在代码中,通过
BEGIN
开启事务,COMMIT
提交事务。如果在事务执行过程中发生错误,使用ROLLBACK
回滚事务,这样可以确保所有的操作要么全部成功,要么全部失败,不会出现部分数据更新的情况。
- 捕获异常:使用
try - except
块捕获sqlite3.Error
异常。如果在数据库操作过程中出现任何SQLite相关的错误,都会被捕获,然后执行回滚操作,保证数据处于事务开始前的状态。
- 外键约束:在
tasks
表中设置了外键约束FOREIGN KEY (project_id) REFERENCES projects(project_id)
,确保tasks
表中的project_id
引用的是projects
表中存在的project_id
。如果插入的project_id
在projects
表中不存在,将会抛出异常,事务会回滚。