我正在向数据库输入大量数据,我正在使用此模型将updateOnDuplicate选项应用于bulkCreate。所以我无法在这里验证理智。我的问题是,因为我使用它的唯一值也可用于updateOnDuplicate标准,或者只是用于检查重复项的主键。
问题是我的表中的主键是bulkCreate是id
,它是自动增量。我的模型中有多个唯一值,并且不希望在检查主键时更新任何内容。它是否考虑了所有独特的内容,还是我必须手动完成?
customer_id: {
type: DataTypes.BIGINT,
allowNull: false,
unique: true
},
shop_id: {
type: DataTypes.INTEGER(10).UNSIGNED,
allowNull: false,
unique: true,
references: {
model: 'shop',
key: 'id'
}
},
email: {
type: DataTypes.STRING(255),
allowNull: false
},
others: {
type: DataTypes.STRING(255),
allowNull: false
},{
timestamps: false,
createdAt: false,
updatedAt: false,
tableName: 'customers'
}
答案 0 :(得分:0)
根据我的观点,bulkCreate将仅对id执行操作(不应考虑唯一约束)。
因此,如果您尝试使用bulkCreate插入重复值(在具有唯一值约束的列中),那么它将抛出错误并且不会插入任何记录。因此,在这种情况下,您必须手动进行检查。
所以我建议首先检查唯一值,然后再使用bulkCreate。
或者
遍历记录并为每条记录调用android.database.sqlite.SQLiteException: near "(": syntax error (code 1): , while compiling: CREATE VIRTUAL TABLE CommerceName ( _id TEXT PRIMARY KEY,id INTEGER,name TEXT,category TEXT,imageref TEXT )
方法,并将唯一值列放在条件类似的位置。这将比bulkCreate花费更多时间,但更具体。
public static final String SQL_CREATE_ENTRIES =
"CREATE VIRTUAL TABLE " + CommerceSearchReaderDbHelper.CommerceNameSearchEntry.TABLE_NAME + " ( " +
CommerceSearchReaderDbHelper.CommerceNameSearchEntry._ID + TEXT_TYPE +" PRIMARY KEY," +
CommerceSearchReaderDbHelper.CommerceNameSearchEntry.COLUMN_ID + INTEGER_TYPE + COMMA_SEP +
CommerceSearchReaderDbHelper.CommerceNameSearchEntry.COLUMN_NAME + TEXT_TYPE + COMMA_SEP +
CommerceSearchReaderDbHelper.CommerceNameSearchEntry.COLUMN_CATEGORY+ TEXT_TYPE + COMMA_SEP +
CommerceSearchReaderDbHelper.CommerceNameSearchEntry.COLUMN_IMAGEREF + TEXT_TYPE +
" )";
public static final String SQL_DELETE_ENTRIES =
"DROP TABLE IF EXISTS " + CommerceSearchReaderDbHelper.CommerceNameSearchEntry.TABLE_NAME;
public static abstract class CommerceNameSearchEntry implements BaseColumns {
public static final String TABLE_NAME = "CommerceName";
public static final String COLUMN_ID = SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA;
public static final String COLUMN_NAME = SearchManager.SUGGEST_COLUMN_TEXT_1;
public static final String COLUMN_CATEGORY = SearchManager.SUGGEST_COLUMN_TEXT_2;
public static final String COLUMN_IMAGEREF = SearchManager.SUGGEST_COLUMN_ICON_1;
}