将前缀添加到sqlite auto_increment字段

时间:2019-07-01 05:45:29

标签: sql database sqlite auto-increment id

是否可以在sqlite中的自动递增字段中添加前缀,以便在添加新记录时,自动递增值包含前缀?

2 个答案:

答案 0 :(得分:2)

  

是否有一种方法可以在sqlite中将前缀添加到自动递增字段,因此   当添加新记录时,自动增量值包含   前缀?

  • 此类列是特殊列,是 rowid 列的别名。这样的列必须是整数值。

  • 此类列的预期用途实际上是能够唯一标识一行。


但是.....

但是,始终可以返回带有前缀的值,例如通过使用

SELECT 'prefix'||mycolumn FROM mytable;

工作示例

:-

DROP TABLE IF EXISTS mytable;
CREATE TABLE IF NOT EXISTS mytable (mycolumn INTEGER PRIMARY KEY, myothercolumn TEXT);
INSERT INTO mytable (myothercolumn) VALUES('Fred'),('Mary'),('Jane'),('andsoon');
SELECT 'myprefix'||mycolumn, myothercolumn FROM mytable;
  • 请注意,不需要仅施加约束但效率低下的AUTOINCREMENT
  • 的AUTOINCREMENT关键字

结果

enter image description here

模仿你想要的东西

可以复制您想要的内容,例如:-

DROP TRIGGER IF EXISTS mytable2manager;
DROP TABLE IF EXISTS mytable2;
CREATE TABLE IF NOT EXISTS mytable2 (mycolumn TEXT, myothercolumn TEXT);
CREATE TRIGGER IF NOT EXISTS mytable2manager AFTER INSERT ON mytable2 BEGIN
    UPDATE mytable2 SET mycolumn = 'myprefix'||(SELECT count() FROM mytable2) WHERE rowid = new.rowid;
END;
INSERT INTO mytable2 (myothercolumn) VALUES('Fred'),('Mary'),('Jane'),('andsoon');
SELECT * FROM mytable2;
  • 这将创建一个表以及一个TRIGGER,然后插入与上述相同的数据。
  • 无论何时插入行,都将触发TRIGGER,在这种情况下,它会模仿SQLite自动生成的rowid值作为该值的前缀的行为
    • 它也可以使用SET mycolumn = 'myprefix'||rowid
    • 没有TRIGGER mycolumn将为空

结果

enter image description here

其他

您甚至可以让模仿方法中的TRIGGER应用不同的前缀。当myothercolumn中的值以 M

开头时,以下示例使用不同的前缀

:-

DROP TRIGGER IF EXISTS mytable2manager;
DROP TABLE IF EXISTS mytable2;
CREATE TABLE IF NOT EXISTS mytable2 (mycolumn TEXT, myothercolumn TEXT);
CREATE TRIGGER IF NOT EXISTS mytable2manager AFTER INSERT ON mytable2 BEGIN
    UPDATE mytable2 SET mycolumn = CASE WHEN substr(new.myothercolumn,1,1) = 'M' THEN 'myprefix' ELSE 'myotherprefix' END||(SELECT count() FROM mytable2) WHERE rowid = new.rowid;
        -- UPDATE mytable2 SET mycolumn = 'myprefix'||rowid WHERE rowid = new.rowid;
END;
INSERT INTO mytable2 (myothercolumn) VALUES('Fred'),('Mary'),('Jane'),('andsoon');
SELECT * FROM mytable2; 

结果

enter image description here

答案 1 :(得分:0)

最简单的方法可能是使用视图:

1.5.2