[英]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.