导入数据库,mysql 不触发 运行
Import database , mysql triggers not running
我正在将 sql 文件导入数据库。
sql 文件是旧数据库的导出,之后添加了一些新用户。
当我导入它时,所有用户都被导入,但是将用户添加到其他 tables 的触发器不会 运行。
编辑:如果我导入一个空白数据库然后在后面插入名称,它就可以工作。
sql 文件的片段(用户 table 触发):
--
-- Table structure for table `users`
--
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL,
`studentid` int(11) NOT NULL,
`name` text NOT NULL,
`team_id` int(11) NOT NULL,
`overall_user_score` int(11) NOT NULL,
`overall_score_workshop` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=128 DEFAULT CHARSET=latin1;
--
-- Dumping data for table `users`
--
INSERT INTO `users`(`id`, `name`, `studentid`, `team_id`) VALUES
(1,'User Name',1111,1); // this goes on for 127 names
--
-- Triggers `users`
--
CREATE TRIGGER `Insert Into Classes` AFTER INSERT ON `users`
FOR EACH ROW BEGIN
INSERT INTO `ppm2`(`user_id`) VALUES (new.id);
INSERT INTO `pca`(`user_id`) VALUES (new.id);
INSERT INTO `pth1`(`user_id`) VALUES (new.id);
INSERT INTO `pth2`(`user_id`) VALUES (new.id);
INSERT INTO `pds2`(`user_id`) VALUES (new.id);
INSERT INTO `userbadges`(`user_id`, `badge_id`, `seen`) VALUES
(new.id,1,0),
(new.id,2,0),
(new.id,3,0),
(new.id,4,0),
(new.id,5,0),
(new.id,6,0);
END
//
DELIMITER ;
脚本中的语句按它们出现的顺序执行。
要触发触发器,您必须在 users
post 创建触发器时执行 INSERT
语句。
如下更改脚本文件的一部分:
--
-- Triggers `users`
--
DELIMITER //
CREATE TRIGGER `Insert_Into_Classes` AFTER INSERT ON `users`
FOR EACH ROW BEGIN
-- write trigger body here
END;
//
DELIMITER ;
INSERT INTO `users`(`id`, `name`, `studentid`, `team_id`) VALUES
(1,'User Name',1111,1); // this goes on for 127 names
dump
工具自动生成脚本文件是真的。
并且生成的文件不包含与我们大多数人期望的顺序相同的 SQL 语句。
或者,
- 你可以转储数据库没有数据但有所有其他
触发器、函数和过程等数据库对象。
- 并且,将 DATA 语句作为显式转储。
- 以相同的顺序执行上述转储。
- 您现在可以检查触发器是否按预期触发。
我正在将 sql 文件导入数据库。
sql 文件是旧数据库的导出,之后添加了一些新用户。
当我导入它时,所有用户都被导入,但是将用户添加到其他 tables 的触发器不会 运行。
编辑:如果我导入一个空白数据库然后在后面插入名称,它就可以工作。
sql 文件的片段(用户 table 触发):
--
-- Table structure for table `users`
--
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL,
`studentid` int(11) NOT NULL,
`name` text NOT NULL,
`team_id` int(11) NOT NULL,
`overall_user_score` int(11) NOT NULL,
`overall_score_workshop` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=128 DEFAULT CHARSET=latin1;
--
-- Dumping data for table `users`
--
INSERT INTO `users`(`id`, `name`, `studentid`, `team_id`) VALUES
(1,'User Name',1111,1); // this goes on for 127 names
--
-- Triggers `users`
--
CREATE TRIGGER `Insert Into Classes` AFTER INSERT ON `users`
FOR EACH ROW BEGIN
INSERT INTO `ppm2`(`user_id`) VALUES (new.id);
INSERT INTO `pca`(`user_id`) VALUES (new.id);
INSERT INTO `pth1`(`user_id`) VALUES (new.id);
INSERT INTO `pth2`(`user_id`) VALUES (new.id);
INSERT INTO `pds2`(`user_id`) VALUES (new.id);
INSERT INTO `userbadges`(`user_id`, `badge_id`, `seen`) VALUES
(new.id,1,0),
(new.id,2,0),
(new.id,3,0),
(new.id,4,0),
(new.id,5,0),
(new.id,6,0);
END
//
DELIMITER ;
脚本中的语句按它们出现的顺序执行。
要触发触发器,您必须在 users
post 创建触发器时执行 INSERT
语句。
如下更改脚本文件的一部分:
--
-- Triggers `users`
--
DELIMITER //
CREATE TRIGGER `Insert_Into_Classes` AFTER INSERT ON `users`
FOR EACH ROW BEGIN
-- write trigger body here
END;
//
DELIMITER ;
INSERT INTO `users`(`id`, `name`, `studentid`, `team_id`) VALUES
(1,'User Name',1111,1); // this goes on for 127 names
dump
工具自动生成脚本文件是真的。
并且生成的文件不包含与我们大多数人期望的顺序相同的 SQL 语句。
或者,
- 你可以转储数据库没有数据但有所有其他 触发器、函数和过程等数据库对象。
- 并且,将 DATA 语句作为显式转储。
- 以相同的顺序执行上述转储。
- 您现在可以检查触发器是否按预期触发。