MariaDB创建users_details表报ERROR 1064语法错误如何排查
报错根因
ERROR 1064语法错误的触发点是SQL最后一行的VISIBLE关键字:这个是MySQL 8.0版本才新增的索引可见性语法,你当前使用的MariaDB版本不支持该关键字,解析器无法识别这个多余的标记,就会抛出第9行附近')'位置的语法错误。
另外你当前的SQL还有一处冗余设计:id字段已经被定义为主键,主键天然具备非空、唯一的属性,不需要额外再给id创建名为id_UNIQUE的唯一索引,多余的索引会浪费存储空间、降低表的写入效率。
修复方法
直接删除VISIBLE关键字即可,数据库默认创建的索引本身就是可见状态,不需要额外声明。修正后可正常执行的SQL如下:
CREATE TABLE `usersdb`.`users_details` ( `id` INT NOT NULL AUTO_INCREMENT, `username` VARCHAR(45) NOT NULL, `password` VARCHAR(45) NOT NULL, `email_address` VARCHAR(45) NOT NULL, `first_name` VARCHAR(45) NOT NULL, `last_name` VARCHAR(45) NOT NULL, PRIMARY KEY (`id`), UNIQUE INDEX `id_UNIQUE` (`id` ASC) );
如果去掉冗余的唯一索引,可以进一步简化成下面的写法,执行性能更好:
CREATE TABLE `usersdb`.`users_details` ( `id` INT NOT NULL AUTO_INCREMENT, `username` VARCHAR(45) NOT NULL, `password` VARCHAR(45) NOT NULL, `email_address` VARCHAR(45) NOT NULL, `first_name` VARCHAR(45) NOT NULL, `last_name` VARCHAR(45) NOT NULL, PRIMARY KEY (`id`) );
补充说明:MariaDB直到10.6版本才推出索引可见性控制的相关功能,使用的是
IGNORED/NOT IGNORED关键字,和MySQL的VISIBLE/INVISIBLE语法不通用,跨数据库迁移脚本的时候要注意语法兼容问题。
内容的提问来源于stack exchange,提问作者Sudhansh Anand ce19b091
相关产品推荐
相关产品推荐

