MySQL相册<;-相册照片->;照片数据库模型,带触发器的外键,who';谁是第一个?

MySQL相册<;-相册照片->;照片数据库模型,带触发器的外键,who';谁是第一个?,mysql,triggers,Mysql,Triggers,我试图用MySQL创建一个相册照片数据库模型 当然,我想同步更新这3个表,比如当我插入到ALBUM\u PHOTO中时,也要用相应的值插入到ALBUM和PHOTO。 但是当我添加触发器时,它们的顺序让我感到困惑,最后我得到了这个方法,如下所示: -- -------------------------------------------------------- -- -- TABLE `user_album` -- CREATE TABLE IF NOT EXISTS `user_albu

我试图用MySQL创建一个
相册
照片
数据库模型

当然,我想同步更新这3个表,比如当我插入到
ALBUM\u PHOTO
中时,也要用相应的值插入到
ALBUM
PHOTO
。 但是当我添加触发器时,它们的顺序让我感到困惑,最后我得到了这个方法,如下所示:

-- --------------------------------------------------------

--
-- TABLE `user_album`
--

CREATE TABLE IF NOT EXISTS `user_album` (
  `album_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `album_name` varchar(45) NOT NULL,
  `cover_id` int(11) NOT NULL,
  `numbers_of_photo` int(11) NOT NULL,
  `album_desc` varchar(45) DEFAULT NULL,
  `album_path` varchar(45) DEFAULT NULL,
  `addtime` datetime NOT NULL,
  PRIMARY KEY (`album_id`,`user_id`),
  KEY `fk_album_user_id_idx` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- TRIGGER `user_album`
--
DROP TRIGGER IF EXISTS `tg_album_insert`;
DELIMITER //
CREATE TRIGGER `tg_album_insert` AFTER INSERT ON `user_album`
 FOR EACH ROW BEGIN
UPDATE USER_ALBUM SET NUMBERS_OF_PHOTO = 0
WHERE ALBUM_ID = NEW.ALBUM_ID;
END
//
DELIMITER ;
DROP TRIGGER IF EXISTS `tg_album_update_then_delete`;
DELIMITER //
CREATE TRIGGER `tg_album_update_then_delete` AFTER UPDATE ON `user_album`
 FOR EACH ROW BEGIN
DELETE FROM USER_ALBUM
WHERE ALBUM_ID = NEW.ALBUM_ID AND NEW.NUMBERS_OF_PHOTO <= 0;
END
//
DELIMITER ;

-- --------------------------------------------------------

--
-- TABLE `user_photo`
--

CREATE TABLE IF NOT EXISTS `user_photo` (
  `photo_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `thumbnail_id` int(11) NOT NULL,
  `photo_name` varchar(45) DEFAULT NULL,
  `addtime` datetime NOT NULL,
  `photo_path` varchar(45) NOT NULL,
  PRIMARY KEY (`photo_id`),
  KEY `fk_photo_user_id_idx` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


-- --------------------------------------------------------

--
-- TABLE `user_album_photo`
--

CREATE TABLE IF NOT EXISTS `user_album_photo` (
  `photo_id` int(11) NOT NULL AUTO_INCREMENT,
  `album_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `photo_name` varchar(45) DEFAULT NULL,
  `desc` varchar(45) DEFAULT NULL,
  `tag` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`photo_id`),
  KEY `fk_album_photo_photo_id_idx` (`photo_id`),
  KEY `fk_album_photo_album_id_idx` (`album_id`),
  KEY `fk_album_photo_user_id_idx` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

--
-- TRIGGER `user_album_photo`
--
DROP TRIGGER IF EXISTS `tg_album_photo_delete`; 
DELIMITER //
CREATE TRIGGER `tg_album_photo_delete` AFTER DELETE ON `user_album_photo`
 FOR EACH ROW BEGIN
DELETE FROM USER_PHOTO WHERE PHOTO_ID = OLD.PHOTO_ID;
UPDATE USER_ALBUM SET NUMBERS_OF_PHOTO = NUMBERS_OF_PHOTO-1
WHERE ALBUM_ID=OLD.ALBUM_ID;
END
//
DELIMITER ;
DROP TRIGGER IF EXISTS `tg_album_photo_insert`;
DELIMITER //
CREATE TRIGGER `tg_album_photo_insert` AFTER INSERT ON `user_album_photo`
 FOR EACH ROW BEGIN
IF NOT EXISTS (SELECT * FROM `user_album` WHERE ALBUM_ID = NEW.ALBUM_ID) THEN
INSERT INTO USER_ALBUM VALUES(NEW.ALBUM_ID, UEW.USER_ID);
ELSE 
UPDATE USER_ALBUM SET NUMBERS_OF_PHOTO=NUMBERS_OF_PHOTO+1
WHERE ALBUM_ID = NEW.ALBUM_ID;
END IF;
INSERT INTO USER_PHOTO VALUES(NEW.PHOTO_ID, NEW.USER_ID);
END
//
DELIMITER ;
——--------------------------------------------------------
--
--表'user\u相册`
--
如果不存在“用户相册”,则创建表(
`相册id`int(11)不为空,
`用户_id`int(11)不为空,
`相册名称'varchar(45)不为空,
`封面id`int(11)不为空,
`照片中的数字'int(11)不为空,
`album_desc`varchar(45)默认为空,
`album_path`varchar(45)默认为空,
`addtime`datetime不为空,
主键(`album\u id`、`user\u id`),
键“fk\U相册用户id\U idx”(“用户id”)
)ENGINE=InnoDB默认字符集=utf8;
--
--触发“用户”相册`
--
如果存在“tg\u相册插入”,则触发拖放;
分隔符//
在“用户”相册上插入后创建触发器“tg\u相册\u插入”`
每行开始
更新用户\u相册集编号\u OF \u PHOTO=0
其中,ALBUM_ID=NEW.ALBUM_ID;
结束
//
定界符;
如果存在“tg\u相册\u更新\u然后\u删除”,则删除触发器;
分隔符//
在“用户”相册更新后创建触发器“tg”相册“更新”,然后“删除”`
每行开始
从用户相册中删除

其中,ALBUM_ID=NEW.ALBUM_ID和NEW.NUMBERS_OF_PHOTO您发布的架构未正常化()。照片不能直接链接到相册有什么原因吗?@Jim是的,你说得对。因为我想用不同的元数据(标签或描述和…)在不同的页面位置显示照片。所以,我需要这个模型。