mysql實現nextVal功能
首先建立表:
CREATE TABLE `sys_sequence` (
`NAME` varchar(50) NOT NULL,
`CURRENT_VALUE` int(11) NOT NULL DEFAULT `0`,
`INCREMENT` int(11) NOT NULL DEFAULT `1`,
PRIMARY KEY (`NAME`)
)
插入記錄
INSERT INTO SYS_SEQUENCE(NAME,CURRENT_VALUE,INCREMENT) VALUES(`TBL_FS`, 1,1)
DELIMITER $$
DROP FUNCTION IF EXISTS `currval`$$
CREATE DEFINER=`root`@`%` FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS INT(11)
BEGIN
DECLARE VALUE INTEGER;
SET VALUE=0;
SELECT current_value INTO VALUE
FROM sys_sequence
WHERE NAME=seq_name;
RETURN VALUE;
END$$
DELIMITER ;
查詢當前記錄:
select currval(`TBL_FS`);
如果出現Error Code: 1449 The user specified as a definer (`root`@`%`) does not exist 錯誤,則執行如下sql:
grant all privileges on . to root@”%” identified by “password”;
flush privileges;
繼續執行當前記錄sql則成功
建立nextval函式
DELIMITER $$
DROP FUNCTION IF EXISTS `nextval`$$
CREATE DEFINER=`root`@`%` FUNCTION `nextval`(seq_name varchar(50)) RETURNS int(11)
BEGIN
UPDATE sys_sequence
SET CURRENT_VALUE = CURRENT_VALUE + INCREMENT
where name=seq_name;
return currval(seq_name);
END$$
DELIMITER ;
執行nextval函式
select nextval(`tbl_fs`)
建立函式過程中出現This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de 錯誤
這是我們開啟了bin-log, 我們就必須指定我們的函式是否是
1 DETERMINISTIC 不確定的
2 NO SQL 沒有SQl語句,當然也不會修改資料
3 READS SQL DATA 只是讀取資料,當然也不會修改資料
4 MODIFIES SQL DATA 要修改資料
5 CONTAINS SQL 包含了SQL語句
其中在function裡面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支援。如果我們開啟了 bin-log, 我們就必須為我們的function指定一個引數。
在MySQL中建立函式時出現這種錯誤的解決方法:
set global log_bin_trust_function_creators=TRUE;