連接與基本操作
連結 MySQL:
mysql -u username -p
username 是你的帳號名稱。
遠端連結:
mysql -h hostname -u username -p
MySQL 基礎語法涵蓋連接服務器、數據庫與表管理、數據類型定義、索引創建及增刪改查操作。內容包括命令行連接方式、CREATE/DROP/ALTER 語句結構、INT/FLOAT/CHAR/VARCHAR 等類型說明、PRIMARY KEY 與 FOREIGN KEY 約束、INSERT/REPLACE/DELETE/TRUNCATE/UPDATE 指令用法,以及 LOAD DATA INFILE 批量導入方法。適合初學者快速掌握 MySQL 核心命令。
連結 MySQL:
mysql -u username -p
username 是你的帳號名稱。
遠端連結:
mysql -h hostname -u username -p
hostname 是 MySQL 主機的名稱。
顯示全部的資料庫:
SHOW DATABASES;
mysql 是 MySQL 用來儲存帳號和權限的資料庫,不能刪除。
選擇資料庫:
USE database_name;
顯示資料庫裡的資料表:
SHOW TABLES;
顯示資料表的資訊:
DESCRIBE table_name;
登出 MySQL 顯示器:
/q
SQL 的執行指令可以從文字檔案內輸入。
SOURCE file_name
如果沒有登入 MySQL 的顯示器,用:
mysql -u username -p < file_name
Primary key - 用來識別欄位的 key。 Foreign key - 代表連結的資料表。再另一個資料表裡的 primary key。
CREATE DATABASE employee;
這會建立一個叫 employee 的資料庫。
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name [(create_definition, ...)]
[table_options] [select_statement];
or
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name LIKE old_table_name;
create_definition: col_name TYPE [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY] [reference_definition] or PRIMARY KEY (index_col_name,...) or KEY [index_name] (index_col_name,...) or INDEX [index_name] (index_col_name,...) or UNIQUE [INDEX] [index_name] (index_col_name,...) or FULLTEXT [INDEX] [index_name] (index_col_name,...) or [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...) [reference_definition] or CHECK (expression)
TEMPORARY 關鍵字是用來建立暫時的資料表,當你的連結階段結束後會自動刪除。 CREATE TEMPORARY TABLE table_name;
IF NOT EXISTS 只有在資料表不存在時才會建立。 CREATE TABLE IF NOT EXISTS table_name;
LIKE old_table_name 會依照 old_table_name 的構造來建立新的資料表。
欄位定義 (column definition) 可用的選項:
下面的關鍵字可用來宣告欄位的資料:
下面的選項可以不用,通常是用在最佳化:
INT 和 FLOAT 範例:salary decimal(10, 2) - 寬度 10 和 2 個小數點。 可以用 UNSIGNED 和 ZEROFILL 關鍵字。 UNSIGNED 只能包括零或整數。ZEROFILL 會顯示數字前的零數。
任何宣告為 PRIMARY KEY, KEY, UNIQUE, 或 INDEX 的欄位都會自動建立索引。 要將索引建立到欄位用:
CREATE INDEX name ON employee(name);
這會建立一個叫 name 的索引到 employee 資料表裡的 name 欄位。
刪除整個資料庫,包括裡面的資料:
DROP DATABASE employee;
可以在 employee 的前面加上 IF EXISTS。
刪除一個資料表:
DROP TABLE assignment;
完整格式:
DROP [TEMPORARY] TABLE [IF EXISTS] table_name [, table_name...]
刪除索引:
DROP INDEX index_name ON employee;
如果要改變資料表的結構,建立 name 的索引在 employee 裡面的 name 欄位:
ALTER TABLE employee ADD INDEX name (name);
完整格式:
ALTER [IGNORE] TABLE table_name alter_spec [, alter_spec ...]
alter_spec:
ADD [COLUMN] create_definition [FIRST | AFTER col_name]
or ADD [COLUMN] (create_definition, create_definition,...)
or ADD INDEX [index_name] (index_col_name,...)
or ADD PRIMARY KEY (index_col_name,...)
or ADD UNIQUE [index_name] (index_col_name,...)
or ADD FULLTEXT [index_name] (index_col_name,...)
or ADD [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...)
[reference_definition]
or ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
or CHANGE [COLUMN] old_col_name create_definition
[FIRST | AFTER column_name]
or MODIFY [COLUMN] create_definition [FIRST | AFTER col_name]
or DROP [COLUMN] col_name
or DROP PRIMARY KEY
or DROP INDEX index_name
or DISABLE KEYS
or ENABLE KEYS
or RENAME [TO] new_table_name
or ORDER BY col_name
or table_options
因為 ALTER 非常有彈性所以有很多的查詢子句。 CHANGE 和 MODIFY 相同,可以讓你改變欄位的定義或位置。 DROP COLUMN 會刪除資料表裡的欄位。 DROP PRIMARY KEY 和 DROP INDEX 會刪除相連的欄位索引。 DISABLE KEYS 會告訴 MySQL 停止更新索引,只能用在 MyISAM。 ENABLE KEYS 會繼續更新索引。 RENAME 可以讓你改變資料表的名稱。 ORDER BY 會重新排序欄位。
INSERT 可以讓你輸入欄位到資料表裡。 完整格式:
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] table_name [(col_name,...)]
VALUES ((expression | DEFAULT),...),(...),...
[ON DUPLICATE KEY UPDATE col_name=expression, ...]
or
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] table_name [(col_name,...)]
SELECT ...
or
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] table_name
SET col_name=(expression | DEFAULT), ...
[ON DUPLICATE KEY UPDATE col_name=expression, ...]
範例:
INSERT INTO department VALUES
(42, 'Finance'),
(128, 'Research and Development'),
(NULL, 'Human Resources');
INTO 可以不用。 INSERT INTO department SELECT ... 可以從其它的資料表裡取得資料,存到 department 這個資料表。 INSERT INTO department SET name = 'Asset Management'; 這會輸入一個欄位的資料,只提供 name 的欄位。其他沒有資料的欄位會是 NULL。
其它查詢子句:
使用方法跟 INSERT 相同。REPLACE 可以解決有衝突的輸入。如果有衝突欄位會被更新。
用來刪除欄位。 範例:DELETE FROM department; 會刪除 department 裡面所有的欄位。 如果要選擇哪個欄位,用 WHERE。 範例:DELETE FROM department WHERE name='Asset Management'; 如果有開啟 --safe-updates 或 --i-am-a-dummy 選項可以避免一次刪除全部的欄位。所以必須選擇要刪除的欄位。
完整格式:
DELETE [LOW_PRIORITY] [QUICK] FROM table_name
[WHERE where_definition]
[ORDER BY ...]
[LIMIT rows]
or
DELETE [LOW_PRIORITY] [QUICK] table_name[.*] [, table_name[.*] ...]
FROM table-references
[WHERE where_definition]
or
DELETE [LOW_PRIORITY] [QUICK]
FROM table_name[.*] [, table_name[.*] ...]
USING table-references
[WHERE where_definition]
後兩個格式可以用來刪除其他資料表裡的欄位。
範例:
DELETE employee, employeeSkills
FROM employee, employeeSkills, department
WHERE employee.employeeID = employeeSkills.employeeID
AND employee.departmentID = department.departmentID
AND department.name='Finance';
上面的會刪除全部的有在 Finance department 裡面工作的 employees,然後刪除他們的 employeeSkills。 FROM 裡面的欄位不會被刪除,他們只是用來搜尋。只有在 employee 和 employeeSkills 裡面的欄位會被刪除。 AND 是包含的條件。employee.employeeID 表示 employee 資料表裡的 employeeID 欄位。 第三個格式跟第二個差不多,但是刪除 FROM 裡面的資料表,用 USING 來表示被搜尋的資料表。
額外的查詢子句:
可用來刪除全部的欄位。
TRUNCATE TABLE employee;
速度比 DELETE 還快。
可以用來更新欄位。
UPDATE employee
SET job='DBA'
WHERE employeeID='6651';
完整格式:
UPDATE [LOW_PRIORITY] [IGNORE] table_name
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
[ORDER BY ...]
[LIMIT rows]
or
UPDATE [LOW_PRIORITY] [IGNORE] table_name [, table_name ...]
SET col_name=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
WHERE 可以用來選擇要更新哪個欄位。 第二個格式可以用來更新多個資料表。 LOW_PRIORITY 和 IGNORE 跟在 INSERT 裡的相同,ORDER BY 和 LIMIT 跟在 DELETE 的相同。
可以讓你用檔案來輸入資料到一個資料表。
資料檔範例:
42 Finance
128 Research and Development
NULL Human Resources
NULL Marketing
載入資料檔:
LOAD DATA LOCAL INFILE 'department_infile.txt'
INTO TABLE department;
LOAD DATA INFILE 需要 FILE 的權限。
完整格式:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'fileName.txt'
[REPLACE | IGNORE]
INTO TABLE table_name
[FIELDS
[TERMINATED BY '\t']
[[OPTIONALLY] ENCLOSED BY '']
[ESCAPED BY '\\']
]
[LINES TERMINATED BY '\n']
[IGNORE number LINES]
[(col_name, ...)]
額外的查詢子句:

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
暂无推荐文章,稍后可再来查看。
在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online
解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online
CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online