【问题标题】:MySQL : syntax error : 'source' (source) is not valid input at this positionMySQL:语法错误:“源”(源)在此位置无效输入
【发布时间】:2017-12-26 21:52:43
【问题描述】:
--  Sample employee database 
--  See changelog table for details
--  Copyright (C) 2007,2008, MySQL AB
--  
--  Original data created by Fusheng Wang and Carlo Zaniolo
--  http://www.cs.aau.dk/TimeCenter/software.htm
--  http://www.cs.aau.dk/TimeCenter/Data/employeeTemporalDataSet.zip
-- 
--  Current schema by Giuseppe Maxia 
--  Data conversion from XML to relational by Patrick Crews
-- 
-- This work is licensed under the 
-- Creative Commons Attribution-Share Alike 3.0 Unported License. 
-- To view a copy of this license, visit 
-- http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to 
-- Creative Commons, 171 Second Street, Suite 300, San Francisco, 
-- California, 94105, USA.
-- 
--  DISCLAIMER
--  To the best of our knowledge, this data is fabricated, and
--  it does not correspond to real people. 
--  Any similarity to existing people is purely coincidental.
-- 

DROP DATABASE IF EXISTS employees;
CREATE DATABASE IF NOT EXISTS employees;
USE employees;

SELECT 'CREATING DATABASE STRUCTURE' as 'INFO';

DROP TABLE IF EXISTS dept_emp,
                     dept_manager,
                     titles,
                     salaries, 
                     employees, 
                     departments;

/*!50503 set default_storage_engine = InnoDB */;
/*!50503 select CONCAT('storage engine: ', @@default_storage_engine) as INFO */;

CREATE TABLE employees (
    emp_no      INT             NOT NULL,
    birth_date  DATE            NOT NULL,
    first_name  VARCHAR(14)     NOT NULL,
    last_name   VARCHAR(16)     NOT NULL,
    gender      ENUM ('M','F')  NOT NULL,    
    hire_date   DATE            NOT NULL,
    PRIMARY KEY (emp_no)
);

CREATE TABLE departments (
    dept_no     CHAR(4)         NOT NULL,
    dept_name   VARCHAR(40)     NOT NULL,
    PRIMARY KEY (dept_no),
    UNIQUE  KEY (dept_name)
);

CREATE TABLE dept_manager (
   emp_no       INT             NOT NULL,
   dept_no      CHAR(4)         NOT NULL,
   from_date    DATE            NOT NULL,
   to_date      DATE            NOT NULL,
   FOREIGN KEY (emp_no)  REFERENCES employees (emp_no)    ON DELETE CASCADE,
   FOREIGN KEY (dept_no) REFERENCES departments (dept_no) ON DELETE CASCADE,
   PRIMARY KEY (emp_no,dept_no)
); 

CREATE TABLE dept_emp (
    emp_no      INT             NOT NULL,
    dept_no     CHAR(4)         NOT NULL,
    from_date   DATE            NOT NULL,
    to_date     DATE            NOT NULL,
    FOREIGN KEY (emp_no)  REFERENCES employees   (emp_no)  ON DELETE CASCADE,
    FOREIGN KEY (dept_no) REFERENCES departments (dept_no) ON DELETE CASCADE,
    PRIMARY KEY (emp_no,dept_no)
);

CREATE TABLE titles (
    emp_no      INT             NOT NULL,
    title       VARCHAR(50)     NOT NULL,
    from_date   DATE            NOT NULL,
    to_date     DATE,
    # FOREIGN KEY (emp_no) REFERENCES employees (emp_no) ON DELETE CASCADE,
    PRIMARY KEY (emp_no,title, from_date)
); 

/*!50130
ALTER TABLE titles
partition by range (to_days(from_date))
(
    partition p01 values less than (to_days('1985-12-31')),
    partition p02 values less than (to_days('1986-12-31')),
    partition p03 values less than (to_days('1987-12-31')),
    partition p04 values less than (to_days('1988-12-31')),
    partition p05 values less than (to_days('1989-12-31')),
    partition p06 values less than (to_days('1990-12-31')),
    partition p07 values less than (to_days('1991-12-31')),
    partition p08 values less than (to_days('1992-12-31')),
    partition p09 values less than (to_days('1993-12-31')),
    partition p10 values less than (to_days('1994-12-31')),
    partition p11 values less than (to_days('1995-12-31')),
    partition p12 values less than (to_days('1996-12-31')),
    partition p13 values less than (to_days('1997-12-31')),
    partition p14 values less than (to_days('1998-12-31')),
    partition p15 values less than (to_days('1999-12-31')),
    partition p16 values less than (to_days('2000-12-31')),
    partition p17 values less than (to_days('2001-12-31')),
    partition p18 values less than (to_days('2002-12-31')),
    partition p19 values less than (to_days('3000-12-31'))
) */;


CREATE TABLE salaries (
    emp_no      INT             NOT NULL,
    salary      INT             NOT NULL,
    from_date   DATE            NOT NULL,
    to_date     DATE            NOT NULL,
    # FOREIGN KEY (emp_no) REFERENCES employees (emp_no) ON DELETE CASCADE,
    PRIMARY KEY (emp_no, from_date)
); 

/*!50130
ALTER TABLE salaries
partition by range (to_days(from_date))
(
    partition p01 values less than (to_days('1985-01-01')),
    partition p02 values less than (to_days('1986-01-01')),
    partition p03 values less than (to_days('1987-01-01')),
    partition p04 values less than (to_days('1988-01-01')),
    partition p05 values less than (to_days('1989-01-01')),
    partition p06 values less than (to_days('1990-01-01')),
    partition p07 values less than (to_days('1991-01-01')),
    partition p08 values less than (to_days('1992-01-01')),
    partition p09 values less than (to_days('1993-01-01')),
    partition p10 values less than (to_days('1994-01-01')),
    partition p11 values less than (to_days('1995-01-01')),
    partition p12 values less than (to_days('1996-01-01')),
    partition p13 values less than (to_days('1997-01-01')),
    partition p14 values less than (to_days('1998-01-01')),
    partition p15 values less than (to_days('1999-01-01')),
    partition p16 values less than (to_days('2000-01-01')),
    partition p17 values less than (to_days('2001-01-01')),
    partition p18 values less than (to_days('2001-02-01')),
    partition p19 values less than (to_days('2001-03-01')),
    partition p20 values less than (to_days('2001-04-01')),
    partition p21 values less than (to_days('2001-05-01')),
    partition p22 values less than (to_days('2001-06-01')),
    partition p23 values less than (to_days('2001-07-01')),
    partition p24 values less than (to_days('2001-08-01')),
    partition p25 values less than (to_days('2001-09-01')),
    partition p26 values less than (to_days('2001-10-01')),
    partition p27 values less than (to_days('2001-11-01')),
    partition p28 values less than (to_days('2001-12-01')),
    partition p29 values less than (to_days('2002-01-01')),
    partition p30 values less than (to_days('2002-02-01')),
    partition p31 values less than (to_days('2002-03-01')),
    partition p32 values less than (to_days('2002-04-01')),
    partition p33 values less than (to_days('2002-05-01')),
    partition p34 values less than (to_days('2002-06-01')),
    partition p35 values less than (to_days('2002-07-01')),
    partition p36 values less than (to_days('2002-08-01')),
    partition p37 values less than (to_days('2002-09-01')),
    partition p38 values less than (to_days('2002-10-01')),
    partition p39 values less than (to_days('2002-11-01')),
    partition p40 values less than (to_days('2002-12-01')),
    partition p41 values less than (to_days('3000-01-01'))
)
*/;

CREATE OR REPLACE VIEW dept_emp_latest_date AS
    SELECT emp_no, MAX(from_date) AS from_date, MAX(to_date) AS to_date
    FROM dept_emp
    GROUP BY emp_no;

# shows only the current department for each employee
CREATE OR REPLACE VIEW current_dept_emp AS
    SELECT l.emp_no, dept_no, l.from_date, l.to_date
    FROM dept_emp d
        INNER JOIN dept_emp_latest_date l
        ON d.emp_no=l.emp_no AND d.from_date=l.from_date AND l.to_date = d.to_date;

flush /*!50503 binary */ logs;

SELECT 'LOADING departments' as 'INFO';
source load_departments.dump ;
SELECT 'LOADING employees' as 'INFO';
source load_employees.dump ;
SELECT 'LOADING dept_emp' as 'INFO';
source load_dept_emp.dump ;
SELECT 'LOADING dept_manager' as 'INFO';
source load_dept_manager.dump ;
SELECT 'LOADING titles' as 'INFO';
source load_titles.dump ;
SELECT 'LOADING salaries' as 'INFO';
source load_salaries1.dump ;
source load_salaries2.dump ;
source load_salaries3.dump ;

source show_elapsed.sql ;

我是新手。我正在下载一个巨大的 mysql 数据库示例以供学习。使用 mysql 工作台,当我打开上面的脚本时,它会突出显示所有的 'source load_******.dump;'语句,错误为“语法错误:'源'(源)在此位置无效输入'。谁能帮我解决这个问题。

顺便说一句,我从https://github.com/datacharmer/test_db下载这个数据库

【问题讨论】:

  • 那些.dump 文件真的存在吗? source 命令告诉 MySQL 从该文件加载 SQL 脚本。如果您在本地有这些文件,则可能需要将路径更改为它们实际所在的位置。
  • 是的,它们是存在的,与脚本文件一起下载
  • 但是你确定你有正确的路径/位置吗?
  • 我阅读了自述文件,它没有说明任何关于更改路径/位置的内容。一切都在同一个文件夹中。
  • Read here。如果不坐在你的 MySQL Workbench 前,我无法给你一个确切的答案,但我的直觉是 MySQL 正在寻找那些没有任何文件的位置的 .dump 文件。使文件对 MySQL 可见并且脚本应该运行。如果自述文件希望您了解 MySQL 的工作原理,则不必告诉您这一点。

标签: mysql mysql-workbench


【解决方案1】:

source 命令不是 MySQL 语句,而是仅由 MySQL 客户端处理的内容。 MySQL Workbench 不处理这个(因为它专注于纯 MySQL 代码)。

要导入整个集合,请从主文件中删除源命令,然后像使用主转储一样手动导入这些文件。有点乏味,但至少可以加载所有文件。

【讨论】:

    【解决方案2】:

    您可以使用MySQL Workbench 运行脚本。

    转到 文件 -> 运行 SQL 脚本...

    选择您要运行的文件(*.sql)。然后你会看到如下画面。

    点击运行按钮。它根据脚本创建架构并导入表和数据。

    【讨论】:

      【解决方案3】:

      删除以下行,因为它试图导入其他文件

      SELECT 'LOADING departments' as 'INFO';
      source load_departments.dump ;
      SELECT 'LOADING employees' as 'INFO';
      source load_employees.dump ;
      SELECT 'LOADING dept_emp' as 'INFO';
      source load_dept_emp.dump ;
      SELECT 'LOADING dept_manager' as 'INFO';
      source load_dept_manager.dump ;
      SELECT 'LOADING titles' as 'INFO';
      source load_titles.dump ;
      SELECT 'LOADING salaries' as 'INFO';
      source load_salaries1.dump ;
      source load_salaries2.dump ;
      source load_salaries3.dump ;
      
      source show_elapsed.sql ;
      

      或者从命令行导入

      mysql -u username -p database_name < file.sql
      

      确保以下文件应位于同一文件夹中

      load_departments.dump 
      load_employees.dump 
      load_dept_emp.dump 
      load_dept_manager.dump 
      load_titles.dump 
      load_salaries1.dump 
      load_salaries2.dump 
      load_salaries3.dump 
      show_elapsed.sql 
      

      【讨论】:

      • 我相信我无法删除这些行,因为我确实想导入包含数据库中所有表的数据的文件。所有文件都在同一个文件夹中。我做了一些实验,我相信所有脚本都可以正常运行,除了“source load_xxxx.dump”行。语法有什么问题吗?
      • 如果你正在运行,例如你的文件夹/home/sql/也更新sqldump的文件路径
      【解决方案4】:

      我今天也遇到了这个问题。尝试了以上所有方法后仍然遇到错误,我决定下载旧的 MySQL Workbench 版本,并且运行良好!

      当前最新版本:8.0.24 我下载的版本:8.0.20

      仍然不知道为什么会起作用。

      【讨论】:

        猜你喜欢
        • 2019-12-06
        • 1970-01-01
        • 2019-08-07
        • 2022-01-04
        • 1970-01-01
        • 1970-01-01
        • 2020-07-06
        • 1970-01-01
        • 2020-08-28
        相关资源
        最近更新 更多