Как создать таблицу в SQL с уникальным ключом уровня таблицы с идентификатором уровня таблицы - PullRequest
0 голосов
/ 24 августа 2018

Мне нужна таблица, в которой столбцы Column1 и column2 должны быть уникальными вместе с автоматическим идентификатором для Column1:

Пример:

 Create table Foo (Id int, Name varchar(50));

Столбец Id должен сам себя автоматически увеличиваться.

Данные будут переданы как

A
A
B
B

Данные для вставки, как показано ниже:

 1 A
 2 A
 1 B
 2 B

Как мне добиться того же?

1 Ответ

0 голосов
/ 24 августа 2018

Когда вы используете MySQL и можете жить с таблицей с движком MyISAM, есть встроенная функциональность:

Для таблиц MyISAM вы можете указать AUTO_INCREMENT на вторичном столбец в индексе из нескольких столбцов. В этом случае сгенерированное значение для столбца AUTO_INCREMENT рассчитывается как MAX (auto_increment_column) + 1 префикс WHERE = данный префикс. Это полезно, когда вы хотите поместить данные в упорядоченные группы.

CREATE TABLE animals (
    grp ENUM('fish','mammal','bird') NOT NULL,
    id MEDIUMINT NOT NULL AUTO_INCREMENT,
    name CHAR(30) NOT NULL,
    PRIMARY KEY (grp,id)
) ENGINE=MyISAM;

INSERT INTO animals (grp,name) VALUES
    ('mammal','dog'),('mammal','cat'),
    ('bird','penguin'),('fish','lax'),('mammal','whale'),
    ('bird','ostrich');

SELECT * FROM animals ORDER BY grp,id;

Что возвращает:

+--------+----+---------+
| grp    | id | name    |
+--------+----+---------+
| fish   |  1 | lax     |
| mammal |  1 | dog     |
| mammal |  2 | cat     |
| mammal |  3 | whale   |
| bird   |  1 | penguin |
| bird   |  2 | ostrich |
+--------+----+---------+

В этом случае (когда столбец AUTO_INCREMENT является частью индекс нескольких столбцов), значения AUTO_INCREMENT используются повторно при удалении строка с наибольшим значением AUTO_INCREMENT в любой группе. это происходит даже для таблиц MyISAM, для которых значения AUTO_INCREMENT обычно не используются повторно.

...