1.函数修改
字符串转时间的函数: to_date(#{createEndTime},'yyyy/mm/dd') ===>str_to_date(#{createBeginTime},'%Y/%m/%d')
时间转字符串的函数: to_char(OPERATE_TIME,'yyyy-MM-dd hh24:mi:ss')====> date_format(OPERATE_TIME,'%Y-%m-%d %H:%i:%S')
字符串连接函数: '%'||#{name}||'%' ===== >CONCAT('%',#{name},'%')
获取当前时间函数: sysdate =========> now()
2.序列
有些主键ID使用序列,mysql没有序列但是有auto_increment字段
2.1 将字段修改为自增
ALTER TABLE T_BLOGROLL_INFO MODIFY id INT AUTO_INCREMENT;
插入时: nextval ----》 null
但是有的insert语句,有两个字段使用了序列, mysql一个表只能主键使用自增,所以考虑模拟序列
2.2 模拟序列
使用表和函数模拟
--新建序列
DROP TABLE IF EXISTS sequence;
CREATE TABLE sequence (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
current_value INT NOT NULL,
increment INT NOT NULL DEFAULT 1,
PRIMARY KEY (name)
) ENGINE=InnoDB;
--当前值
DROP FUNCTION IF EXISTS currval;
DELIMITER $
CREATE FUNCTION currval (seq_name VARCHAR(50))
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE value INTEGER;
SET value = 0;
SELECT current_value INTO value
FROM sequence
WHERE name = seq_name;
RETURN value;
END
$
DELIMITER ;
--下个值
DROP FUNCTION IF EXISTS nextval;
DELIMITER $
CREATE FUNCTION nextval (seq_name VARCHAR(50))
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
UPDATE sequence
SET current_value = current_value + increment
WHERE name = seq_name;
RETURN currval(seq_name);
END
$
DELIMITER;
--设置值
DROP FUNCTION IF EXISTS setval;
DELIMITER $
CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
UPDATE sequence
SET current_value = value
WHERE name = seq_name;
RETURN currval(seq_name);
END
$
DELIMITER ;
使用
INSERT INTO sequence VALUES ('TestSeq', 0, 1);
----添加一个sequence名称和初始值,以及自增幅度 添加一个名为TestSeq 的自增序列
SELECT SETVAL('TestSeq', 10);
---设置指定sequence的初始值 这里设置TestSeq 的初始值为10
SELECT CURRVAL('TestSeq');
--查询指定sequence的当前值 这里是获取TestSeq当前值
SELECT NEXTVAL('TestSeq');
--查询指定sequence的下一个值 这里是获取TestSeq下一个值