Как добавить префикс в столбце id с автоинкрементом в SQL? - PullRequest
0 голосов
/ 25 сентября 2018

У меня несколько пользователей, таких как admin, vendor и т. Д. Теперь я хочу добавить префикс в значение поля id при вставке данных, например, если use is admin, тогда значение поля id равно «A_1» или user - vendor, тогда значение должно быть «V_1 ", в то время как поле id автоинкрементно. Любой имеет представление об этом, пожалуйста, прокомментируйте. Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Вы можете сделать это с помощью последовательности и триггера. Вот рабочий пример

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;

и результат enter image description here

0 голосов
/ 25 сентября 2018

Для автоматического увеличения идентификатора вы можете прочитать что-то о автоматическом увеличении в sql:

Некоторые примеры идентификации, используемые для автоматического увеличения идентификатора, используемого в качестве первичного ключа:

CREATE TABLE Test_AutoIncrement(
    ID int AUTO_INCREMENT,
    Name varchar(50) NULL,
    Something varchar(100) NOT NULL,
    PRIMARY KEY(ID));

В этом случае вам не нужно было указывать ID, поданный во время любого оператора INSERT, SQL справится с этим.

Например, у нас есть некоторые записи этой таблицы, такие как:

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()"  

Примечания:

В приведенном выше случае мы начинаем с ID=1, и оно будет увеличивать его на 1 при каждой новой записи.

Youможете указать ID=0 во вставке, если вы хотите начать отсчет с нуля, но NO_AUTO_VALUE_ON_ZERO должно быть disabled от MySQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...