近期在使用gorm的过程中遇到个问题: 我使用了gorm来进行mysql数据库初始化(建表/插入初始化数据/创建函数/添加触发器等),建表和插入初始化数据很容易实现,但是添加函数和触发器时,无法直接使用gorm实现(可能是我没找到方法),每次执行的时候都会报错。
我的mysql脚本如下:
-- 函数;
DELIMITER $$
DROP FUNCTION IF EXISTS get_ver$$
CREATE FUNCTION `get_ver` ( ver_name VARCHAR ( 50 )) RETURNS INT ( 11 )
DETERMINISTIC
BEGIN
DECLARE val INTEGER;
SET val = 0;
SELECT current_val INTO val
FROM sys_sequence
WHERE seq_name = ver_name
FOR UPDATE;
UPDATE sys_sequence SET current_val = current_val + increment_val
WHERE seq_name = ver_name;
RETURN val;
END $$
DELIMITER ;
-- 触发器;
DELIMITER $$
DROP TRIGGER IF EXISTS `TRI_user_info_before_insert`$$
CREATE TRIGGER `TRI_user_info_before_insert` BEFORE INSERT ON `user_info` FOR EACH ROW BEGIN
set NEW.auto_ver = get_ver('user_info_ver');
END $$
DROP TRIGGER IF EXISTS `TRI_user_info_before_update`$$
CREATE TRIGGER `TRI_user_info_before_update` BEFORE UPDATE ON `user_info` FOR EACH ROW BEGIN
set NEW.auto_ver = get_ver('user_info_ver');
END $$
DELIMITER ;
COMMIT;
最初尝试的是使用gorm的Exec方法,但是执行报错,说有语法错误“You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $$”
然后我又试了一种方式,将脚本写到单独的文件里,然后使用os.exec命令去执行,这样倒是执行成功了,但是这有个限制(运行的电脑上必须安装了mysql或mysql客户端)。
想问下大家有没有其他的好方法实现golang执行mysql原生脚本,如使用gorm等,不用电脑上必须安装mysql。