#mysql
#mysql
Вопрос:
У меня есть следующая таблица.
SQL-скрипка: http://sqlfiddle.com /#!2/8d142/1
CREATE TABLE steps
(
id int auto_increment primary key,
step_day varchar(10),
title varchar(32),
description varchar(500),
step_order tinyint unsigned not null
);
-- Test insert
INSERT INTO steps
(step_day, title, description, step_order)
VALUES
('monday', 'Step 1', 'Do some stuff.', '1'),
('saturday', 'Step 1', 'Do some stuff.', '1'),
('monday', 'Step 2', 'Do some stuff.', '2'),
('saturday', 'Step 2', 'Do more stuff.', '2');
Данные в тестовой вставке в настоящее время в порядке, но я хотел бы защитить столбцы ‘title’ и ‘step_order’ от повторяющихся записей только в том случае, если данные в столбце ‘step_day’ совпадают.
Итак…
('monday', 'Step 1', 'Do some stuff.', '1'),
('monday', 'Step 1', 'Do some stuff.', '1')
… плохо, но…
('monday', 'Step 1', 'Do some stuff.', '1'),
('saturday', 'Step 1', 'Do some stuff.', '1')
…нормально.
Как мне это сделать? Спасибо.
Ответ №1:
CREATE TABLE steps
(
id int auto_increment primary key,
step_day varchar(10),
title varchar(32)not null,
description varchar(500),
step_order tinyint unsigned not null,
CONSTRAINT uc_steps UNIQUE (step_day,title,step_order)
);
это позволит вам иметь уникальные данные в step_day, title,step_order .
это позволит вам добавить
INSERT INTO steps
(step_day, title, description, step_order)
VALUES
('monday', 'Step 1', 'Do some stuff.', '1'),
('saturday', 'Step 1', 'Do some stuff.', '1');
но не
INSERT INTO steps
(step_day, title, description, step_order)
VALUES
('monday', 'Step 1', 'Do some stuff.', '1'),
('monday', 'Step 1', 'Do some stuff.', '1');
Ответ №2:
Вы должны использовать GROUP BY
предложение
SELECT id,
step_day,
title,
description,
step_order
FROM steps
GROUP BY step_day,title;