我有多个用户,例如admin和vendor等。现在,我想在插入数据的同时在id字段值中添加前缀,例如use是admin,则id字段的值是“ A_1”,或者用户是vendor的值应该是V_1”,而ID字段会自动增加。对此有任何想法的人请发表评论。谢谢。
答案 0 :(得分:0)
要自动增加ID,您可以在sql上阅读有关auto increment的信息:
一些用于自动增加用作主键的ID的身份示例:
defmodule Async do
def example do
process_id = Task.start_link(fn ->
#some code you want its result later
end)
#do some stuff
:ok
end
end
在这种情况下,您不必指定在任何CREATE TABLE Test_AutoIncrement(
ID int AUTO_INCREMENT,
Name varchar(50) NULL,
Something varchar(100) NOT NULL,
PRIMARY KEY(ID));
语句期间提交的ID
,SQL将会对此进行管理。
例如,我们有此表的一些记录,例如:
INSERT
现在,我们在ID | Name | Something |
1 "Simo" "Foo"
2 "Fred" "Bar"
表上模拟一个Insert语句:
Test_AutoIncrement
现在我们的表如下:
INSERT INTO Test_AutoIncrement
VALUES(
NULL,
"FooBar()"
);
备注:
在上述情况下,我们从ID | Name | Something |
1 "Simo" "Foo"
2 "Fred" "Bar"
3 NULL "FooBar()"
开始,它将在每个新记录上将其递增1。
如果要从零开始计数,则可以在插入中指定ID=1
,但是ID=0
必须是MySQL的NO_AUTO_VALUE_ON_ZERO
。
答案 1 :(得分:0)
您可以使用序列和触发器来完成 这是一个有效的例子
create table tbl_usertypes(
usertypes_id varchar2(50),
name varchar2(50),
usertype varchar2(50),
CONSTRAINT pk_usertypes_id PRIMARY KEY(usertypes_id)
);
desc tbl_usertypes;
CREATE SEQUENCE sq_usertypes_id START WITH 1;
create or replace trigger add_random_id
BEFORE INSERT ON tbl_usertypes
FOR EACH ROW
BEGIN
IF :NEW.usertype = 'admin' THEN
SELECT 'A_' || sq_usertypes_id.NEXTVAL INTO :NEW.usertypes_id FROM dual;
ELSE
SELECT 'B_' || sq_usertypes_id.NEXTVAL INTO :NEW.usertypes_id FROM dual;
END IF;
END;
INSERT INTO tbl_usertypes values(null,'hoax', 'admin');
INSERT INTO tbl_usertypes values(null,'hoax', 'user');
select * from tbl_usertypes;