为啥 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))