二、MySQL基礎操作
1. 資料庫操作
顯示所有資料庫
SHOW DATABASES;
建立資料庫
CREATE DATABASE MyDb;
刪除資料庫
-- 直接刪除庫,不檢查是否存在
DROP DATABASE MyDb;
-- 或檢查是否存在
DROP DATABASE [IF EXISTS] MyDb;
2. 表操作
選擇資料庫
USE MyDb;
建立表
CREATE TABLE Tb ( id INT(11), name VARCHAR(32), weigh FLOAT );
檢視錶結構
DESC Tb;
刪除表
-- 直接刪除表,不檢查是否存在
DROP TABLE Tb ;
-- 或檢查是否存在
DROP TABLE [IF EXISTS] Tb;
設定主鍵
-- 直接在建立表時設定主鍵
CREATE TABLE Tb ( id INT(11) PRIMARY KEY, name VARCHAR(32), weigh FLOAT );
-- 或者在建立表後設定主鍵
ALTER TABLE Tb ADD PRIMARY KEY (id);
聯合主鍵
CREATE TABLE Tb ( id INT(11), name VARCHAR(32), weigh FLOAT, PRIMARY KEY (id, name) );
設定外來鍵
ALTER TABLE 表名 ADD CONSTRAINT 外來鍵名 FOREIGN KEY (欄位名) REFERENCES 主表名 (主鍵名);
新增約束
-- 唯一約束
ALTER TABLE Tb ADD UNIQUE (欄位名);
-- 非空約束
ALTER TABLE Tb MODIFY 欄位名 資料型別 NOT NULL;
-- 預設約束
ALTER TABLE Tb MODIFY 欄位名 資料型別 DEFAULT 預設值;
設定自動增加
ALTER TABLE Tb MODIFY id INT(11) AUTO_INCREMENT;
檢視錶詳細結構
SHOW CREATE TABLE Tb;
修改表結構
-- 更改表名
ALTER TABLE 舊錶名 RENAME TO 新表名;
-- 修改欄位名
ALTER TABLE 表名 CHANGE 舊欄位名 新欄位名 新資料型別;
-- 修改欄位資料型別
ALTER TABLE 表名 MODIFY 欄位名 新資料型別;
-- 新增欄位
ALTER TABLE 表名 ADD 新欄位名 新資料型別 約束條件;
-- 在第一列新增欄位
ALTER TABLE 表名 ADD 新欄位名 新資料型別 約束條件 FIRST;
-- 在指定列後面新增欄位
ALTER TABLE 表名 ADD 新欄位名 新資料型別 約束條件 AFTER 指定列;
修改欄位排列位置
-- 修改為表的第一個欄位
ALTER TABLE 表名 MODIFY 欄位名 新資料型別 FIRST;
-- 修改為指定列後
ALTER TABLE 表名 MODIFY 欄位名 新資料型別 AFTER 指定列;
刪除表的外來鍵約束
ALTER TABLE 表名 DROP FOREIGN KEY 外來鍵名;
3. 資料操作
插入資料
INSERT INTO 表名 (欄位1, 欄位2, 欄位3, 欄位n) VALUES (資料1, 資料2, 資料3, 資料n), (資料1, 資料2, 資料3, 資料n), ...;
更新資料
UPDATE 表名 SET 欄位1 = "值", 欄位2 = 數值 WHERE 過濾條件;
刪除資料
-- 根據條件刪除
DELETE FROM 表名 WHERE 條件語句;
-- 刪除所有行
DELETE FROM 表名;
4. 查詢操作
基本查詢語句
-- 查詢某欄位
SELECT 欄位1, 欄位2 FROM 表名;
-- 查詢全部欄位
SELECT * FROM 表名;
條件查詢
-- 帶IN關鍵字查詢
SELECT 欄位1, 欄位2 FROM 表名 WHERE 欄位 IN (值1, 值2, 值3, ...);
SELECT 欄位1, 欄位2 FROM 表名 WHERE 欄位 NOT IN (值1, 值2, 值3, ...);
-- 帶BETWEEN AND的範圍查詢
SELECT 欄位1, 欄位2 FROM 表名 WHERE 欄位 BETWEEN 值1 AND 值2;
SELECT 欄位1, 欄位2 FROM 表名 WHERE 欄位 NOT BETWEEN 值1 AND 值2
;
-- 帶LIKE的字元匹配查詢
SELECT 欄位1, 欄位2 FROM 表名 WHERE 欄位 LIKE '%字元%';
SELECT 欄位1, 欄位2 FROM 表名 WHERE 欄位 LIKE '______字元';
-- 查詢空值
SELECT 欄位1, 欄位2 FROM 表名 WHERE 欄位 IS NULL;
-- 去除重複項
SELECT DISTINCT 欄位 FROM 表名;
-- 帶AND與OR的多條件查詢
SELECT 欄位1, 欄位2 FROM 表名 WHERE 欄位1 條件語句 AND 欄位2 條件語句;
SELECT 欄位1, 欄位2 FROM 表名 WHERE 欄位1 條件語句 OR 欄位2 條件語句;
( 雖然兩種寫法功能一樣,但是我們更推薦使用 IN 關鍵字。因為它不僅邏輯清晰,執行的速度也會快於 OR 關鍵字。更重要的是,使用 IN 關鍵字,我們以後可以執行更加複雜的巢狀語句。)
排序與分組
-- 對查詢結果進行排序
SELECT 欄位1, 欄位2 FROM 表名 ORDER BY 欄位 [ASC|DESC];
-- 分組查詢
SELECT 欄位1, 欄位2 FROM 表名 GROUP BY 欄位;
查詢的是每個分組中 首次出現的一條記錄。
限制查詢結果
-- 查詢前x條資料
SELECT 欄位1, 欄位2 FROM 表名 LIMIT x;
查詢表中前x條資料。
-- 從a往後查詢b條資料,不包含a
SELECT 欄位1, 欄位2 FROM 表名 LIMIT a, b;