【问题标题】:make two columns as unique in sqlite使两列在 sqlite 中唯一
【发布时间】:2014-05-05 22:12:41
【问题描述】:

我有一张有 3 列的表。列是

BaseColumns._ID | NATIVE_CONTACT_ID | HIDDEN_TYPE

在这些中,BaseColumns._ID 是主键。我想要的是,我不想让开发人员在NATIVE_CONTACT_ID 中插入重复值,如果他尝试插入,那么对应于NATIVE_CONTACT_IDHIDDEN_TYPE 列值的旧值应该被新值覆盖。

让我进一步澄清你。例如,我的表格在几次插入后是这样的。

_ID  | NATIVE_CONTACT_ID | HIDDEN_TYPE
---------------------------------------
  1        23                 1
  2        24                 0
  3        25                 1
  4        26                 0

现在,当开发人员想要插入一个新行时,NATIVE_CONTACT_ID 的值为 25,HIDDEN_TYPE 的值为 0,那么 HIDDEN_TYPE 的旧值应该更改为这个新值。这里它应该从1 更改为0,我不想允许重复插入NATIVE_CONTACT_ID

我希望我清楚地解释了我的问题。

现在我的问题是,创建这样的表需要使用哪些关键字和 SQL 语句?

这是我尝试过的......

    public static final String TABLE_NAME = "hidden_info";
    public static final String HIDDEN_TYPE = "hidden_type";
    public static final String NATIVE_CONTACT_ID = "native_contact_id";
    public static final String _ID = BaseColumns._ID;

    public static void onCreate(SQLiteDatabase database) {
        String query = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " ("
                + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "
                + NATIVE_CONTACT_ID + " INTEGER, " + HIDDEN_TYPE
                + " INTEGER)";
        database.execSQL(query);
    }

【问题讨论】:

    标签: java sql sqlite android-sqlite unique-constraint


    【解决方案1】:
    CREATE TABLE name (column defs, UNIQUE (NATIVE_CONTACT_ID) ON CONFLICT REPLACE);
    

    更多信息请见here

    【讨论】:

    • 我已经试过你的答案了。但它正在插入具有新值的新行。例如,我的表有一行 NATIVE_CONTACT_ID 值 = 4 和 HIDDEN_TYPE 值 = 1,现在当我插入一个 NATIVE_CONTACT_ID = 4 和 HIDDEN_TYPE = 0 的新行时,它会插入一个新行而不是替换旧值...
    • 谢谢老兄...我已经解决了我的问题。只是我只将NATIVE_CONTACT 列设为唯一。而不是UNIQUE(NATIVE_CONTACT_ID,HIDDEN_TYPE),我使用UNIQUE(NATIVE_CONTACT_ID)...
    • 请编辑您的答案。当然我会接受它... :-)
    猜你喜欢
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 2011-02-11
    相关资源
    最近更新 更多