一直以来本地搭建的项目为了方便我都是使用xampp作为mysql的管理工具,比较简洁可视化比较好。但是最近程序的一个报错暴露了他与mysql之间的一些问题。
使用自增序列nextval函数时,突然抛出来一句:
select nextval( 'SEQ_REGISTER_ID')
> 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''SEQ_REGISTER_ID')' at line 1
> 时间: 0s
瞬间我产生2个疑点:
1.我的nextval函数写的没问题。如下:
CREATE DEFINER=`root`@`localhost` FUNCTION `nextval`(seq_name VARCHAR(50)) RETURNS int(11)DETERMINISTIC
BEGINUPDATE sequenceSET current_value = current_value + incrementWHERE name = seq_name;RETURN currval(seq_name);
END
为什么在执行时会报错,况且我的curral函数的表达式语法很相似,但是curral函数不报错呢,如下:
CREATE DEFINER=`root`@`localhost` FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS int(11)DETERMINISTIC
BEGINDECLARE value INTEGER;SET value = 0;SELECT current_value INTO valueFROM sequenceWHERE name = seq_name;RETURN value;
END
2.报错内容有一句话很蹊跷:
check the manual that corresponds to your MariaDB server version for the right syntax
这看上去不像是mysql的报错,查看一下mysql版本吧,大吃一惊:
这还真不是mysql数据库。关键词搜索MariaDB 后发现,xampp默认的数据库是MariaDB 并不是mysql,这个MariaDB 是何方神圣还真没注意过,百度后得知:
MariaDB和MySQL都是关系型数据库管理系统,它们有许多相似之处,但也有一些关键的不同点。
1. 开发者
MariaDB是MySQL的一个分支,在MySQL的创始人麦克尔·维德纽斯离开Oracle之后,他带领一些MySQL的开发人员创建了MariaDB。而MySQL最初是瑞典MySQL AB公司的产品,后来被Sun Microsystems收购,之后又被Oracle收购。
2. 许可协议
MariaDB基于GPL(GNU通用公共许可证)协议,这意味着它是开源的,并且可以免费使用和分发。而MySQL则分为两个版本:社区版和商业版。社区版是开源的,但只能在非商业环境下使用,而商业版需要付费许可证才能使用。
3. 功能和特性
MariaDB和MySQL在大多数功能和特性上是相似的,因为MariaDB最初就是基于MySQL开发的。然而,MariaDB也添加了一些新特性,例如:数据加密、使用更快的存储引擎(例如XtraDB和Aria)以及更好的性能优化。
4. 性能
MariaDB和MySQL在性能方面都表现得非常好,但是MariaDB在某些情况下可能会更快。例如,MariaDB增加了线程池,这可以显著提高在高并发环境下的性能。此外,MariaDB也采用了一些更好的内存管理技术,这可以提高查询的速度和效率。
5. 社区支持
MariaDB和MySQL都拥有一个非常活跃和强大的社区支持。然而,由于MySQL是一个商业项目,它的社区支持可能不如MariaDB那么强大和广泛。
总之,MariaDB和MySQL都是优秀的关系型数据库管理系统,它们各自都有自己的优点和不同之处。选择哪一个取决于你的具体需求和项目要求。
知道了数据库不同,那么上述nextval函数的格式问题,是不是和这个数据库有关,nextval是不是这个数据库的保留字呢。搜索MariaDB保留字发现,还真是这样:
下面地址是MariaDB保留字的权威地址,有需要的可以去看看:
云数据库 MariaDB 保留关键字-开发指南-文档中心-腾讯云
知道了是保留字,那么解决方法便是,在他两边用 ` ` 包起来就好,像这样:
终于,实现了查询。
通过这个也反映出,xampp的默认启动有时候需要更改,使用MariaDB数据库不能完全像mysql那样使用,虽然他生成是完全兼容mysql的。以后遇到类似问题,可以这么想一下了。
工作之余总结一下,欢迎大佬补充指正!