用觸發器實現SQLite的外來鍵約束

2021-06-08 09:24:41 字數 1198 閱讀 8361

用sqlite的觸發器實現刪除時,要關閉外來鍵,要不然會有出現刪不了外來鍵對應鍵的情況。

最近在做數碼相框上的嵌入式開發,開發過程中使用的sqlite資料庫,但是編碼的過程中,遇到個問題,sqlite不支援外來鍵約束,外來鍵約束會被解析但不會被執行。 

參考了網上的做法,自己做了個實驗,用觸發器來實現了sqlite的外來鍵約束。 

建表語句: 

create table jokeitem 

( id integer primary key, 

content text, 

classid integer 

); create table jokeclass 

( classid integer primary key, 

classname text 

);  

建立插入觸發器: 

create trigger fk_insert 

before insert on jokeitem 

for each row begin 

select raise(rollback,'no this classid in jokeclass') 

where (select classid from jokeclass where classid = new.classid) is null; 

end; 

插入操作的外來鍵支援效果: 

建立更新觸發器: 

create trigger fk_update 

before update on jokeitem 

for each row begin 

select raise(rollback,'no this classid in jokeclass') 

where (select classid from jokeclass where classid = new.classid) is null; 

end; 

更新操作的外來鍵支援效果: 

建立刪除觸發器: 

create trigger fk_delete 

before delete on jokeclass 

for each row begin 

delete from jokeitem where classid = old.classid; 

end; 

刪除操作的外來鍵支援效果: 

用觸發器實現SQLite的外來鍵約束

最近在做數碼相框上的嵌入式開發,開發過程中使用的sqlite資料庫,但是編碼的過程中,遇到個問題,sqlite不支援外來鍵約束,外來鍵約束會被解析但不會被執行。參考了網上的做法,自己做了個實驗,用觸發器來實現了sqlite的外來鍵約束。建表語句 create table jokeitem id in...

SQL 觸發器 外來鍵約束

1 構造乙個觸發器audit log,在向employees test表中插入一條資料的時候,觸發插入相關的資料到audit中。create table employees test id int primary key not null,name text not null,age int not...

關於自身表外來鍵觸發器的實現

關於自身表外來鍵觸發器的實現 目前遇到這樣乙個外來鍵定義 t girl tb1 constraint fk 1 foreign key r id references tb1 id on delete cascade 目的是對於自己的另外乙個字段進行約束,其實這樣看來,後面的級聯刪除就沒有必要了,因...