为啥 MariaDB - 或 phpMyAdmin - 拒绝我为临时表创建 TABLE 语法?

Posted

技术标签:

【中文标题】为啥 MariaDB - 或 phpMyAdmin - 拒绝我为临时表创建 TABLE 语法?【英文标题】:Why is MariaDB - or phpMyAdmin - rejecting my CREATE TABLE syntax for a Temporal Table?为什么 MariaDB - 或 phpMyAdmin - 拒绝我为临时表创建 TABLE 语法? 【发布时间】:2022-01-04 03:17:54 【问题描述】:

我有一个语法错误,我不知道为什么?

CREATE OR REPLACE TABLE appointments (
    AppId int(11)PRIMARY,
    docID int(11),
    patientID int(11),
    AppStart datetime,
    AppEnd datetime,
    PERIOD FOR p(AppStart,AppEnd),         /* <== Error on the `FOR`  keyword. */
    UNIQUE (docId, p WITHOUT OVERLAPS)     /* <== Error on the `UNIQUE`  keyword. */
)

【问题讨论】:

究竟你运行的是什么版本的 phpMyAdmin 和 mysql 您正在使用应用程序版本化临时表的语法,这是 MariaDB 10.4.3(及更高版本)支持但(据我所知)MySQL 不支持。所以你要么不使用临时表,要么安装 MariaDB 而不是 MySQL。 @Dai 服务器版本:10.4.10-MariaDB - mariadb.org 二进制分发版 FWIW,我尝试在 MariaDB 10.6 中按原样运行您的 CREATE TABLE 语句,但我也遇到了语法错误,除了它在 PRIMARY 关键字上。如果将其更改为PRIMARY KEY,则操作成功并创建表。 我知道 phpMyAdmin 表面上是一个用于 MySQL 的瘦前端,应该与 MariaDB 一起使用,我不知道 phpMyAdmin 的 SQL 编辑器是否实现了自己的解析器/验证器或如果它始终只是服务器 SQL 引擎的前端。 【参考方案1】:

根据我自己的重现(在 MariaDB 10.6 中,而不是您的版本 10.4.10),语法错误突出显示与 实际 语法错误不对应,即您需要输入 PRIMARY KEY而不仅仅是PRIMARY

所以改为运行这个:

CREATE OR REPLACE TABLE appointments (
    AppId     int(11) PRIMARY KEY,
    docID     int(11),
    patientID int(11),
    AppStart  datetime,
    AppEnd    datetime,
    PERIOD FOR p(AppStart,AppEnd),
    UNIQUE (docId, p WITHOUT OVERLAPS)
)

截图证明:

【讨论】:

以上是关于为啥 MariaDB - 或 phpMyAdmin - 拒绝我为临时表创建 TABLE 语法?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 phpmyadmin 会比 mysql 命令行快得多?

lnmp配置(linux(centos7).ngnix.mariadb.php(php-fpm,phpmyadmin))

mariadb 程序 phpmyadmin 错误

Docker容器里部署Apache+PHP+MariaDB+phpMyAdmin

安装MariaDB phpMyAdmin

MariaDB + phpmyadmin 在 ubuntu 14.04 上使用 Nginx