sqlite3 表创建后设置主外键 联合主键 外键设置

sqlite3

表创建后的操作

创建后设置主外键
# 执行原生sql语句
        # 设置主键
conn.execute("alter table tableName add constraint p_key_name primary key (index_code)")

# 从表设置外键
conn.execute(f"alter table tableName add  foreign key (index_code) references tableName(index_code)")

表的创建时操作

自增主键
CREATE TABLE w_user( 
id integer primary key autoincrement, --自增主键
username varchar(32), 
); 
联合主键设置样式
CREATE TABLE tb_test ( 
bh varchar(5), 
id integer, 
ch varchar(20),
--在创建联合主键时,主键创建要放在所有字段最后面,否则也会创建失败
primary key (id,bh)); 
外键设置

约束外键的时候 如果主表中的 键不是主键 需要在后面添加描述UNIQUE 不然会报 foreign key mismatch 的错误

因为sqlite3外键默认是关闭的,所以你要使用就要先打开:

PRAGMA foreign_keys = ON
CREATE TABLE IF NOT EXISTS parent (
    id text PRIMARY KEY NOT NULL UNIQUE);--作为外键,要添加unique(如果不是主键)

CREATE TABLE IF NOT EXISTS child (
id text PRIMARY KEY NOT NULL ,
parentID TEXT,
FOREIGN KEY (parentID") REFERENCES parent(id) ON DELETE CASCADE ON UPDATE CASCADE);

ON DELETE 和 ON UPDATE,表示当发生delete和update时,会发生什么行为

  • NO ACTION:默认的,表示没有什么行为.
  • RESTRICT:当有一个child关联到parent时,禁止delete或update parent
  • SET NULL:当parent被delete或update时,child的的关联字段被置为null(如果字段有not null,就出错)
  • SET DEFAULT:类似于SET NULL (是不是设置默认值?没有试过)
  • CASCADE:将实施在parent上的删除或更新操作,传播给你吧与之关联的child上.
    对于 ON DELETE CASCADE, 同被删除的父表中的行 相关联的子表中的每1行,也会被删除.
    对于ON UPDATE CASCADE, 存储在子表中的每1行,对应的字段的值会被自动修改成同新的父键匹配
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值