提醒一个xampp启动mysql创建函数存在的坑

一直以来本地搭建的项目为了方便我都是使用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
BEGIN
         UPDATE sequence
                   SET current_value = current_value + increment
                   WHERE name = seq_name;
         RETURN currval(seq_name);
END

为什么在执行时会报错,况且我的curral函数的表达式语法很相似,但是curral函数不报错呢,如下:

CREATE DEFINER=`root`@`localhost` FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS int(11)
    DETERMINISTIC
BEGIN
         DECLARE value INTEGER;
         SET value = 0;
         SELECT current_value INTO value
                   FROM sequence
                   WHERE name = seq_name;
         RETURN value;
END

2.报错内容有一句话很蹊跷:

check the manual that corresponds to your MariaDB server version for the right syntax

这看上去不像是mysql的报错,查看一下mysql版本吧,大吃一惊:

提醒一个xampp启动mysql创建函数存在的坑_第1张图片

这还真不是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保留字发现,还真是这样:

提醒一个xampp启动mysql创建函数存在的坑_第2张图片

下面地址是MariaDB保留字的权威地址,有需要的可以去看看:

云数据库 MariaDB 保留关键字-开发指南-文档中心-腾讯云

知道了是保留字,那么解决方法便是,在他两边用  `  `  包起来就好,像这样:

终于,实现了查询。

通过这个也反映出,xampp的默认启动有时候需要更改,使用MariaDB数据库不能完全像mysql那样使用,虽然他生成是完全兼容mysql的。以后遇到类似问题,可以这么想一下了。

提醒一个xampp启动mysql创建函数存在的坑_第3张图片

工作之余总结一下,欢迎大佬补充指正!

你可能感兴趣的:(各类工具问题,数据库,mysql,数据库,sql)