如何在Android SQLite中使用TRIGGER

0qx6xfy6  于 2023-01-24  发布在  Android
关注(0)|答案(3)|浏览(163)

我在数据库中有两个表:

  • 表1具有姓名和房间号列
  • 表2具有房间号和时间列。

现在,当删除或添加第一列的房间号时,我的第二个表也应该更新。我认为使用TRIGGER命令可以做到这一点,但我不确定如何使用它。
通常我的create database语句是这样的:

private static final String DATABASE_CREATE_PATIENT_ID_TABLE =
    "create table " + DATABASE_PATIENT_TABLE +
    " (_id integer primary key autoincrement,"
     + "patient_number text not null, room_numbertext not null, " +
            "patient_initial text not null);";

现在,当在第一个表中删除或添加房间时,我的第二个表应该会更新。

private static final String DATABASE_CREATE_NOTES_ID_TABLE =
    "create table " + DATABASE_NOTES_TABLE +
    " (_id integer primary key autoincrement," +
     " room_number text not null, time_hour text not null, " +
            "notes_hour text not null, today_date text not null);";

最初我做的是比较两个表的内容。但这肯定会导致性能问题后,当数据将增加。所以我偶然发现触发器的东西。我认为这可以解决我的问题,但我不知道我到底应该如何使用它。
我是从Using SQLite Database with Android那里知道这件事的。

我在另一个问题中已经用截图解释了这个问题,请看一下,如果可以的话请指导一下new question

mpgws1up

mpgws1up1#

简单的开始

create trigger simple_trigger1 after insert on database_patient_table begin update database_notes_table; end 
create trigger simple_trigger2 after delete on database_patient_table begin update database_notes_table; end

使用此文档http://www.sqlite.org/lang_createtrigger.html

gjmwrych

gjmwrych2#

根据应用运行的SQLite版本,您可能可以使用SQLite's foreign key support
在旧版本的SQLite中,您可以使用genfkey实用程序来创建触发器,以强制执行外键约束(旧版本的SQLite将解析在CREATE TABLE语句中添加的外键约束,但实际上不会实现它们)。

uubf1zoe

uubf1zoe3#

Demo for Sqlite Trigger in Android HERE
触发器是在数据库中某个事件发生后执行的一些过程代码。
我已经写了一个触发器示例演示。
例如:考虑一个大学的数据库,如果在学生表中添加了学生记录,那么新的行(元组)会自动添加到图书馆或食堂等区域。
因此,通过编写一个简单的触发器,我们可以自动地在其他部分插入新记录,从而避免编写样板代码。
图式

CREATE TABLE student (sid INTEGER PRIMARY KEY, sname TEXT)  
 CREATE TABLE canteen (cid , sid )  
 CREATE TABLE library (lid INTEGER PRIMARY KEY, sid TEXT)

图书馆、食堂表自动增加记录触发器:

CREATE TRIGGER if not exists add_student   
   AFTER INSERT  
 ON[student]  
   for each row  
     BEGIN  
        insert into library values (2 , new.sid );  
        insert into canteen values (3 , new.sid);  
     END;

解释:这里的概念是创建一个触发器,它根据新的学号插入食堂和图书馆的值。

相关问题