我想知道是否有办法阻止SQLite android数据库中的表更新。我正在开发一个应用程序。某些表有两个外键,它们是唯一约束。插入一行后,不应更新此行。只有在必要时才能将其删除。对你有意义吗?我可以用这种方式创建表吗?你知道更好的编码方法吗?
答案 0 :(得分:2)
你可以在桌子上加trigger:
CREATE TRIGGER block_MyTable_update
BEFORE UPDATE ON MyTable
BEGIN
SELECT RAISE(FAIL, "updates not allowed");
END;
答案 1 :(得分:0)
这是我的创建表和触发器语句:
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;
这个触发器工作正常。谢谢!