簡體   English   中英

如何在Windows上運行SQL腳本?

[英]How do I run a sql script on windows?

我試過了

mysqlsh -h localhost -u mixtape-dating -p -f setup.sql

和setup.sql由

USE MixtapeDating;

-- Tables
-- The Playlist table gets featured on the front page. 
CREATE TABLE Playlist (
    Id INT PRIMARY KEY AUTO_INCREMENT, 
    Title VARCHAR(255),
    Email VARCHAR(255),
    CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- The PlaylistItem gets featured at /playlist/:id
CREATE TABLE PlaylistItem (
    Id INT PRIMARY KEY AUTO_INCREMENT,
    PlaylistId INT, 
    Title VARCHAR(255),
    Link VARCHAR(255)
);

-- Stored Procedures
-- Insert playlist
CREATE PROCEDURE InsertPlaylist
(
    IN Title VARCHAR(255),
    IN Email VARCHAR(255),
    OUT PlaylistId INT
)
BEGIN
    INSERT INTO Playlist (Title, Email)
    VALUES (@Title, @Email);
    SELECT LAST_INSERT_ID() AS @PlaylistId;
END

CREATE PROCEDURE InsertPlaylistItem
(
    IN PlaylistId INT, 
    IN Title VARCHAR(255),
    IN Link VARCHAR(255)
)
BEGIN
    INSERT INTO PlaylistItem (PlaylistId, Title, Link)
    VALUES (@PlaylistId, @Title, @Link);
END

-- Fetch all playlists
CREATE PROCEDURE GetPlaylists
BEGIN
    SELECT Id, Title, Email 
    FROM Playlist;
END

-- Fetch all playlist items for a playlist
CREATE PROCEDURE GetPlaylist
(IN Id INT)
BEGIN
    SELECT PlaylistId, Id, Title, Link
    FROM PlaylistItem
    WHERE Id = @Id; 
END

但是我收到以下錯誤:

C:\Users\moore\Desktop\playlist-dating>mysqlsh -h localhost -u mixtape-dating -p -f setup.sql
Enter password: ****************
SyntaxError: Unexpected identifier at setup.sql:1:4
in USE MixtapeDating;
       ^^^^^^^^^^^^^

我究竟做錯了什么?

mysqlsh在javascript模式下默認啟動。 如果要運行SQL語句,則需要切換到SQL模式。 您可以通過在mysqlsh添加--sql參數來mysqlsh

mysqlsh -h localhost -u mixtape-dating -p -f setup.sql --sql

應該能夠做到:

mysql -u username -p databasename < file.sql

我不知道我曾經見過mysqlsh用於此目的嗎?

您的setup.sql有一些問題。 首先,默認分隔符為; 因此,shell會部分解釋您的create procedure 將分隔符更改為其他內容,例如更改為// @開頭的變量也是用戶定義的變量 ,不適用於內部過程。

修復了setup.sql 您可以使用以下mysqlsh -h localhost -u mixtape-dating -p -f setup.sql運行此腳本: mysqlsh -h localhost -u mixtape-dating -p -f setup.sql

-- DROP SCHEMA IF EXISTS MixtapeDating;
-- CREATE SCHEMA MixtapeDating;
USE MixtapeDating;

-- Tables
-- The Playlist table gets featured on the front page. 
CREATE TABLE Playlist (
    Id INT PRIMARY KEY AUTO_INCREMENT, 
    Title VARCHAR(255),
    Email VARCHAR(255),
    CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- The PlaylistItem gets featured at /playlist/:id
CREATE TABLE PlaylistItem (
    Id INT PRIMARY KEY AUTO_INCREMENT,
    PlaylistId INT, 
    Title VARCHAR(255),
    Link VARCHAR(255)
);

DELIMITER //

-- Stored Procedures
-- Insert playlist
CREATE PROCEDURE InsertPlaylist
(
    IN Title_ VARCHAR(255),
    IN Email_ VARCHAR(255),
    OUT PlaylistId_ INT
)
BEGIN
    INSERT INTO Playlist (Title, Email)
    VALUES (Title_, Email_);
    SELECT LAST_INSERT_ID() AS PlaylistId_;
END
//

CREATE PROCEDURE InsertPlaylistItem
(
    IN PlaylistId_ INT, 
    IN Title_ VARCHAR(255),
    IN Link_ VARCHAR(255)
)
BEGIN
    INSERT INTO PlaylistItem (PlaylistId, Title, Link)
    VALUES (PlaylistId_, Title_, Link_);
END
//

-- Fetch all playlists
CREATE PROCEDURE GetPlaylists()
BEGIN
    SELECT Id, Title, Email 
    FROM Playlist;
END
//

-- Fetch all playlist items for a playlist
CREATE PROCEDURE GetPlaylist (IN Id_ INT)
BEGIN
    SELECT PlaylistId, Id, Title, Link
    FROM PlaylistItem
    WHERE Id = Id_;
END
//

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM