уникальное сочетание полей(колонок)

segods
Дата: 27.12.2012 16:50:14
Задача:
Создать таблицу с 4мя полями: id,domain,login,pass
Нужно сделать уникальным сочетание 3х полей domain,login,pass.
Т.е. что бы в базе данных могли хранится разные пароли с одним логином и доменом; одинаковые пары пароль\логин разных доменов и т.д.
НО что бы не могли хранится одинаковые записи по всем трем полям одновременно.

В поиске по форуму самое похожее нашел это: http://www.sql.ru/forum/actualthread.aspx?tid=982959&hl=%f3%ed%e8%ea%e0%eb%fc%ed%fb%e5 но так и не понял.

Воозможно решить такую задачу на уровни создания таблицы? что бы избежать кривые методы типа: сделать уникальный md5 трех полей...
trew
Дата: 27.12.2012 17:10:17
segods,

пример для двух полей P_Id, LastName
CREATE TABLE Persons (
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)
segods
Дата: 27.12.2012 17:51:53
trew,
Во, работает, спасибо!.

Еще вопрос: Пользуясь данной конструкцией возможно дополнительно использовать AUTO_INCREMENT (id) ?
нужно что бы записи были уникальны по нескольким полям и одновременно имели счетчик, что бы я мог на них ссылаться из других таблиц....

Если просто добавить еще AUTO_INCREMENT и PRIMARY KEY, вылезает ошибка: "Multiple primary key defined" и "Incorrect table definition; there can be only one auto column and it must be defined as a key".


mysql> CREATE TABLE ports(ipid INT, id BIGINT NOT NULL AUTO_INCREMENT, port int, protocol varchar(10), status varchar(50), service varchar(100), timeadded datetime,CONSTRAINT uniq_ipid_port_protocol PRIMARY KEY (ipid,port,protocol),PRIMARY KEY (id));
ERROR 1068 (42000): Multiple primary key defined
mysql>

mysql> CREATE TABLE ports(ipid INT, id BIGINT AUTO_INCREMENT, port int, protocol varchar(10), status varchar(50), service varchar(100), timeadded datetime,CONSTRAINT uniq_ipid_port_protocol PRIMARY KEY (ipid,port,protocol));                ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
mysql>
trew
Дата: 27.12.2012 17:57:59
segods,

PRIMARY KEY (ipid,port,protocol)
замените на
UNIQUE (ipid,port,protocol)
trew
Дата: 27.12.2012 18:23:40
segods,

пример
CREATE TABLE Persons (
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id),
CONSTRAINT un_LastName UNIQUE (LastName, FirstName)
)
segods
Дата: 27.12.2012 22:39:54
Спасибо. Разобрался.

я так сделал:
CREATE TABLE Persons (
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id),
CONSTRAINT un_LastName UNIQUE (LastName, FirstName)
)


насколько понял, это одно и тоже.