用唯一的约束改变atbe,你会看到下面的结果
CREATE TABLE photos (
`photo_id` INTEGER,
`student_id` INTEGER,
`main_photo` INTEGER
);
ALTER TABLE photos
ADD CONSTRAINT UC_student_id UNIQUE (student_id);
INSERT INTO photos
(`photo_id`, `student_id`, `main_photo`)
VALUES
('1', '1', '0')
INSERT INTO photos
(`photo_id`, `student_id`, `main_photo`)
VALUES
('2', '1', '1')
INSERT INTO photos
(`photo_id`, `student_id`, `main_photo`)
VALUES
('3', '2', '1')
SELECT * FROM photos
photo_id |学生ID |主照片
--------: | ---------: | ---------:
1 | 1 | 0
3 | 2 | 1
db小提琴here
为了您的目的,您可以使用 BEFORE INSERT TRIGGER,可以检查 main_photo =1
CREATE TABLE photos (
`photo_id` INTEGER,
`student_id` INTEGER,
`main_photo` INTEGER
);
#DELIMITER $$
CREATE TRIGGER before_photos_insert
BEFORE INSERT
ON photos FOR EACH ROW
BEGIN
IF EXISTS(SELECT 1 FROM photos WHERE `main_photo` = 1 AND `student_id` = NEW.`student_id`) THEN
SIGNAL sqlstate '45002' set message_text = 'mainphoto already exsits';
END IF;
END ;
#$$
#DELIMITER ;
INSERT INTO photos
(`photo_id`, `student_id`, `main_photo`)
VALUES
('1', '1', '0')
INSERT INTO photos
(`photo_id`, `student_id`, `main_photo`)
VALUES
('2', '1', '1')
INSERT INTO photos
(`photo_id`, `student_id`, `main_photo`)
VALUES
('3', '2', '1')
INSERT INTO photos
(`photo_id`, `student_id`, `main_photo`)
VALUES
('4', '1', '1')
mainphoto 已经存在
SELECT * FROM photos
photo_id |学生ID |主照片
--------: | ---------: | ---------:
1 | 1 | 0
2 | 1 | 1
3 | 2 | 1
db小提琴here