阻止表SQLite Android中的更新

时间:2016-05-09 04:44:20

标签: android database sqlite android-sqlite

我想知道是否有办法阻止SQLite android数据库中的表更新。我正在开发一个应用程序。某些表有两个外键,它们是唯一约束。插入一行后,不应更新此行。只有在必要时才能将其删除。对你有意义吗?我可以用这种方式创建表吗?你知道更好的编码方法吗?

2 个答案:

答案 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;

这个触发器工作正常。谢谢!