【问题标题】:ERROR 1064 (42000) while creating a table and database in mysql在 mysql 中创建表和数据库时出现错误 1064 (42000)
【发布时间】:2021-06-25 09:47:07
【问题描述】:

我在通过 .sql 脚本执行我的 mysql 查询时遇到以下错误,但不知道是什么导致了这个错误。

我在 x86_64(MySQL 社区服务器 - GPL)上使用 mysql Ver 8.0.23 for macos10.15

错误:

ERROR 1064 (42000) at line 1:您的 SQL 语法有错误; 检查与您的 MySQL 服务器版本相对应的手册 在附近使用的正确语法 '/Users/shivamshekhar/Documents/Others/chat-app-backend/scripts/mysql/db.sql' 在第 1 行

.sql 文件

CREATE DATABASE IF NOT EXISTS `chat_app`;  

USE `chat_app`;  

CREATE TABLE IF NOT EXISTS `user_details` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    `name` VARCHAR(255) NOT NULL, 
    `password` VARCHAR(255) NOT NULL, 
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, 
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    INDEX `idx_name` (`name`), 
    CONSTRAINT `uc_name` UNIQUE (`name`)
);

终端命令:

mysql -u admin -ppassword -e ~/Documents/Others/chat-app-backend/scripts/mysql/db.sql

【问题讨论】:

    标签: mysql sql database syntax


    【解决方案1】:

    -e command 表示“执行命令”,而不是“加载并执行源文件”。

    通过标准输入将源文件发送给客户端:

    mysql -u admin -ppassword < ~/Documents/Others/chat-app-backend/scripts/mysql/db.sql
    

    或者给客户端提供相应的命令:

    mysql -u admin -ppassword -e "SOURCE ~/Documents/Others/chat-app-backend/scripts/mysql/db.sql"
    

    【讨论】:

    • 谢谢!这就是我一直在寻找的。现在我的查询运行成功了!
    【解决方案2】:

    正如已经突出显示的,它必须是 int unsigned。 如果数据库中有任何分区列,可以在最后添加,指定压缩类型。 (视情况而定)

    如果不存在则创建表user_details ( id INT 无符号自动增量主键, name VARCHAR(255) 非空, password VARCHAR(255) 非空, created_at DATETIME 默认 CURRENT_TIMESTAMP, updated_at 更新 CURRENT_TIMESTAMP 时的日期时间默认 CURRENT_TIMESTAMP, 索引idx_name (name), 约束 uc_name 唯一 (name) ) 由 () 分区存储为 parquet (compression =);

    【讨论】:

    • 我认为我的查询没有问题。我只写了 INT UNSIGNED。
    【解决方案3】:

    语法是INT UNSIGNED,而不是UNSIGNED INT。此外,NOT NULLPRIMARY KEY 上是多余的。所以试试这个:

    CREATE TABLE IF NOT EXISTS `user_details` (
        `id`  INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
        `name` VARCHAR(255) NOT NULL, 
        `password` VARCHAR(255) NOT NULL, 
        `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, 
        `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
        INDEX `idx_name` (`name`), 
        CONSTRAINT `uc_name` UNIQUE (`name`)
    );
    

    【讨论】:

    • 我认为我的查询没有问题。我只写了 INT UNSIGNED。
    猜你喜欢
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多