在 table SQLite Android 中阻止更新
Block updates in a table SQLite Android
我想知道是否有办法阻止来自 SQLite android 数据库的 table 更新。我正在开发一个应用程序。某些 table 有两个外键是唯一约束。一旦插入一行,则不应更新该行。它只能在必要时删除。对你有意义吗?我可以用这种方式创建我的 table 吗?你知道更好的编码方法吗?
你可以在 table 上放一个 trigger:
CREATE TRIGGER block_MyTable_update
BEFORE UPDATE ON MyTable
BEGIN
SELECT RAISE(FAIL, "updates not allowed");
END;
这是我的创建 table 和触发语句:
CREATE TABLE
IF NOT EXISTS movie (
_id INTEGER PRIMARY KEY,
adult INTEGER NOT NULL,
backdrop_path TEXT,
belongs_to_collection INTEGER,
budget INTEGER,
homepage TEXT,
imdb_id TEXT,
original_language TEXT NOT NULL,
original_title TEXT NOT NULL,
overview TEXT NOT NULL,
popularity REAL NOT NULL,
poster_path TEXT NOT NULL,
release_date TEXT NOT NULL,
revenue INTEGER,
runtime INTEGER,
status TEXT,
tagline TEXT,
title TEXT NOT NULL,
video TEXT NOT NULL,
vote_average REAL NOT NULL,
vote_count INTEGER NOT NULL);
CREATE TABLE
IF NOT EXISTS genre (
_id INTEGER PRIMARY KEY,
name TEXT NOT NULL);
CREATE TABLE
IF NOT EXISTS movie_genre (
_id INTEGER PRIMARY KEY AUTOINCREMENT,
movie_id INTEGER NOT NULL,
genre_id INTEGER NOT NULL,
FOREIGN KEY ( movie_id) REFERENCES movie(_id) ON UPDATE RESTRICT,
FOREIGN KEY ( genre_id) REFERENCES genre(_id) ON UPDATE RESTRICT,
CONSTRAINT contrstraint_movie_genre_unique
UNIQUE (movie_id, genre_id) ON CONFLICT ROLLBACK);
CREATE TRIGGER
IF NOT EXISTS triger_movie_genre_update
BEFORE
UPDATE OF movie_id, genre_id ON movie_genre
BEGIN
SELECT RAISE(FAIL, "UPDATES NOT ALLOWED")
END;
这个触发器工作正常。谢谢!
我想知道是否有办法阻止来自 SQLite android 数据库的 table 更新。我正在开发一个应用程序。某些 table 有两个外键是唯一约束。一旦插入一行,则不应更新该行。它只能在必要时删除。对你有意义吗?我可以用这种方式创建我的 table 吗?你知道更好的编码方法吗?
你可以在 table 上放一个 trigger:
CREATE TRIGGER block_MyTable_update
BEFORE UPDATE ON MyTable
BEGIN
SELECT RAISE(FAIL, "updates not allowed");
END;
这是我的创建 table 和触发语句:
CREATE TABLE
IF NOT EXISTS movie (
_id INTEGER PRIMARY KEY,
adult INTEGER NOT NULL,
backdrop_path TEXT,
belongs_to_collection INTEGER,
budget INTEGER,
homepage TEXT,
imdb_id TEXT,
original_language TEXT NOT NULL,
original_title TEXT NOT NULL,
overview TEXT NOT NULL,
popularity REAL NOT NULL,
poster_path TEXT NOT NULL,
release_date TEXT NOT NULL,
revenue INTEGER,
runtime INTEGER,
status TEXT,
tagline TEXT,
title TEXT NOT NULL,
video TEXT NOT NULL,
vote_average REAL NOT NULL,
vote_count INTEGER NOT NULL);
CREATE TABLE
IF NOT EXISTS genre (
_id INTEGER PRIMARY KEY,
name TEXT NOT NULL);
CREATE TABLE
IF NOT EXISTS movie_genre (
_id INTEGER PRIMARY KEY AUTOINCREMENT,
movie_id INTEGER NOT NULL,
genre_id INTEGER NOT NULL,
FOREIGN KEY ( movie_id) REFERENCES movie(_id) ON UPDATE RESTRICT,
FOREIGN KEY ( genre_id) REFERENCES genre(_id) ON UPDATE RESTRICT,
CONSTRAINT contrstraint_movie_genre_unique
UNIQUE (movie_id, genre_id) ON CONFLICT ROLLBACK);
CREATE TRIGGER
IF NOT EXISTS triger_movie_genre_update
BEFORE
UPDATE OF movie_id, genre_id ON movie_genre
BEGIN
SELECT RAISE(FAIL, "UPDATES NOT ALLOWED")
END;
这个触发器工作正常。谢谢!