Чтобы ответить на ваш вопрос, вы создаете уникальный набор в сочетании этих трех столбцов. Таким образом, не существует двух строк с комбинацией из 3 из них в составном индексе.
CREATE TABLE `transactions2` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
`user_id` int(20) NOT NULL,
`project_id` int(20) DEFAULT NULL,
`foreign_id` int(20) NOT NULL,
`class` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
`transaction_type_id` int(20) DEFAULT NULL,
`amount` float(10,2) NOT NULL,
`description` text COLLATE utf8_unicode_ci,
`payment_gateway_id` int(20) DEFAULT NULL,
`gateway_fees` float(10,2) NOT NULL,
`is_old` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
unique key(created,user_id,amount) -- <------------------- right here
);
вставить некоторые данные, чтобы проверить:
insert transactions2 (created,modified,user_id,project_id,foreign_id,class,
transaction_type_id,amount,description,payment_gateway_id,gateway_fees,is_old) values
('2009-01-01 12:00:00','2009-01-01 12:00:00',666,1,1,'a',1,100,'desc',1,12,1);
- вставляет штраф (выше)
Попробуйте еще раз с точно такими же данными:
insert transactions2 (created,modified,user_id,project_id,foreign_id,class,
transaction_type_id,amount,description,payment_gateway_id,gateway_fees,is_old) values
('2009-01-01 12:00:00','2009-01-01 12:00:00',666,1,1,'a',1,100,'desc',1,12,1);
- ошибка 1062: Дубликат записи
- изменить его чуть-чуть:
insert transactions2 (created,modified,user_id,project_id,foreign_id,class,
transaction_type_id,amount,description,payment_gateway_id,gateway_fees,is_old) values
('2009-01-01 13:00:00','2009-01-01 12:00:00',666,1,1,'a',1,100,'desc',1,12,1);
- вставляет тонкую
Кроме того, использование ENGINE=INNODB
. Читайте об этом Here.
Пожалуйста, ознакомьтесь с Mysql multi column indexes a.k.a.
Наконец, концепция того, о чем вы говорите, находится недалеко от Insert on Duplicate Key Update. Просто бросьте эту ссылку туда для вас.
Вы можете использовать 'GROUP BY created, user_id, amount' – madforstrength
Посмотрите на использование ограничений таблицы. –
Это невероятно маловероятно, что вам понадобится тип данных с плавающей точкой в этой таблице – Strawberry