我试图创建表的默认主键(不自动增量),与甲骨文相似
fk_id varchar2(32) default sys_guid()
所以表的定义是
CREATE TABLE `t_table` (
`fk_id` TEXT DEFAULT 'select lower(hex(randomblob(16)))' UNIQUE,
`fv_name` TEXT,
PRIMARY KEY(`fk_id`)
);
是的,我得到这个在插入选择为字符串值。
所以有没有使用触发器任何解决方案?谢谢。
使用'select lower(hex(randomblob(16)))'
是封闭的子查询作为字符串/文本文字和UNIQUE已指定将工作只有一次(无需为使列主键意味着唯一的)这样的任何后续插入将失败。
假设你想要的默认值是较低的(十六进制的结果(randomblob(16)),那么你不能使用子查询作为值,然后不被视为一个常量。
相反,你可以删除选择,只是使用表达式,然后将其视为常数。
然而,要做到这一点,你需要坚持
如果列的默认值是在括号中的表达式,则表达式为插入每一行和每一新行中所用的结果中的评估一次。 SQL As Understood By SQLite - CREATE TABLE
因此,你可以使用: -
CREATE TABLE IF NOT EXISTS `t_table` (
`fk_id` TEXT DEFAULT (lower(hex(randomblob(16)))) UNIQUE,
`fv_name` TEXT,
PRIMARY KEY(`fk_id`)
);
当然,应该值不是唯一的,这将是越来越有可能,那么这将导致不被插入一行。