MySQL 是最流行的開源關系型數據庫管理系統之一,廣泛應用于 Web 應用程序開發。本文將全面介紹 MySQL 的基礎知識和完整語法結構。
一、MySQL 基礎概念
1. 數據庫基本術語
-
數據庫(Database): 存儲數據的集合
-
表(Table): 數據以表格形式組織
-
列(Column): 表中的一個字段
-
行(Row): 表中的一條記錄
-
主鍵(Primary Key): 唯一標識表中每一行的列
-
外鍵(Foreign Key): 建立表之間關系的列
2. MySQL 數據類型
數值類型
TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT
FLOAT, DOUBLE
DECIMAL(M,D) - 精確小數
字符串類型
CHAR(M) - 固定長度
VARCHAR(M) - 可變長度
TEXT - 長文本
BLOB - 二進制數據
日期時間類型
DATE - YYYY-MM-DD
TIME - HH:MM:SS
DATETIME - YYYY-MM-DD HH:MM:SS
TIMESTAMP - 時間戳
YEAR - 年份
二、數據庫操作
1. 創建數據庫
CREATE DATABASE database_name;
CREATE DATABASE IF NOT EXISTS database_name;
2. 選擇數據庫
USE database_name;
3. 刪除數據庫
DROP DATABASE database_name;
DROP DATABASE IF EXISTS database_name;
4. 查看數據庫
SHOW DATABASES;
三、表操作
1. 創建表
CREATE TABLE table_name (
column1 datatype constraints,
column2 datatype constraints,
...,
PRIMARY KEY (one_or_more_columns)
);
示例:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_active BOOLEAN DEFAULT TRUE
);
2. 查看表結構
DESCRIBE table_name;
DESC table_name; -- 簡寫
SHOW COLUMNS FROM table_name;
3. 修改表
添加列
ALTER TABLE table_name
ADD column_name datatype constraints;
修改列
ALTER TABLE table_name
MODIFY COLUMN column_name new_datatype new_constraints;
刪除列
ALTER TABLE table_name
DROP COLUMN column_name;
重命名表
RENAME TABLE old_name TO new_name;
ALTER TABLE old_name RENAME TO new_name;
4. 刪除表
DROP TABLE table_name;
DROP TABLE IF EXISTS table_name;
5. 查看所有表
SHOW TABLES;
四、數據操作語言(DML)
1. 插入數據
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
多行插入:
INSERT INTO table_name (column1, column2, ...)
VALUES
(value1, value2, ...),
(value1, value2, ...),
...;
2. 查詢數據
基本查詢:
SELECT column1, column2, ...
FROM table_name;
查詢所有列:
SELECT * FROM table_name;
條件查詢:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
3. 更新數據
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
4. 刪除數據
DELETE FROM table_name WHERE condition;
刪除所有數據但保留表結構:
DELETE FROM table_name;
或
TRUNCATE TABLE table_name;
五、數據查詢進階
1. 排序
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;
2. 限制結果
SELECT column1, column2, ...
FROM table_name
LIMIT number;
分頁查詢:
SELECT column1, column2, ...
FROM table_name
LIMIT offset, count;
3. 去重
SELECT DISTINCT column1, column2, ...
FROM table_name;
4. 聚合函數
COUNT(), SUM(), AVG(), MAX(), MIN()
示例:
SELECT COUNT(*) FROM table_name;
SELECT AVG(price) FROM products;
5. 分組
SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1;
6. 過濾分組
SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1
HAVING condition;
7. 連接查詢
內連接
SELECT a.column1, b.column2
FROM table1 a
INNER JOIN table2 b ON a.common_field = b.common_field;
左連接
SELECT a.column1, b.column2
FROM table1 a
LEFT JOIN table2 b ON a.common_field = b.common_field;
右連接
SELECT a.column1, b.column2
FROM table1 a
RIGHT JOIN table2 b ON a.common_field = b.common_field;
全連接
SELECT a.column1, b.column2
FROM table1 a
FULL JOIN table2 b ON a.common_field = b.common_field;
8. 子查詢
SELECT column1, column2
FROM table1
WHERE column1 IN (SELECT column1 FROM table2 WHERE condition);
六、約束
1. 主鍵約束
CREATE TABLE table_name (
id INT PRIMARY KEY,
...
);
或
CREATE TABLE table_name (
id INT,
...,
PRIMARY KEY (id)
);
2. 外鍵約束
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
...,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
3. 唯一約束
CREATE TABLE table_name (
email VARCHAR(100) UNIQUE,
...
);
4. 非空約束
CREATE TABLE table_name (
username VARCHAR(50) NOT NULL,
...
);
5. 默認值
CREATE TABLE table_name (
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
...
);
6. 檢查約束
CREATE TABLE table_name (
age INT CHECK (age >= 18),
...
);
七、索引
1. 創建索引
CREATE INDEX index_name
ON table_name (column1, column2, ...);
2. 唯一索引
CREATE UNIQUE INDEX index_name
ON table_name (column_name);
3. 刪除索引
DROP INDEX index_name ON table_name;
八、視圖
1. 創建視圖
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
2. 使用視圖
SELECT * FROM view_name;
3. 修改視圖
ALTER VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE new_condition;
4. 刪除視圖
DROP VIEW IF EXISTS view_name;
九、存儲過程和函數
1. 創建存儲過程
DELIMITER //
CREATE PROCEDURE procedure_name(parameters)
BEGIN
-- SQL語句
END //
DELIMITER ;
2. 調用存儲過程
CALL procedure_name(arguments);
3. 創建函數
DELIMITER //
CREATE FUNCTION function_name(parameters)
RETURNS datatype
BEGIN
-- SQL語句
RETURN value;
END //
DELIMITER ;
4. 調用函數
SELECT function_name(arguments);
十、觸發器
1. 創建觸發器
DELIMITER //
CREATE TRIGGER trigger_name
BEFORE/AFTER INSERT/UPDATE/DELETE
ON table_name FOR EACH ROW
BEGIN
-- 觸發器邏輯
END //
DELIMITER ;
2. 刪除觸發器
DROP TRIGGER IF EXISTS trigger_name;
十一、事務控制
1. 開始事務
START TRANSACTION;
2. 提交事務
COMMIT;
3. 回滾事務
ROLLBACK;
4. 設置保存點
SAVEPOINT savepoint_name;
5. 回滾到保存點
ROLLBACK TO savepoint_name;
十二、用戶和權限管理
1. 創建用戶
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
2. 授予權限
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host';
GRANT SELECT, INSERT ON database_name.table_name TO 'username'@'host';
3. 撤銷權限
REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'host';
4. 刷新權限
FLUSH PRIVILEGES;
5. 刪除用戶
DROP USER 'username'@'host';
十三、備份與恢復
1. 備份數據庫
mysqldump -u username -p database_name > backup.sql
2. 恢復數據庫
mysql -u username -p database_name < backup.sql
十四、常用函數
1. 字符串函數
CONCAT(), SUBSTRING(), TRIM(), UPPER(), LOWER(), LENGTH()
2. 數值函數
ROUND(), CEIL(), FLOOR(), ABS(), MOD()
3. 日期函數
NOW(), CURDATE(), CURTIME(), DATE_FORMAT(), DATEDIFF()
4. 條件函數
IF(), CASE WHEN THEN ELSE END, COALESCE(), NULLIF()
總結
本文涵蓋了 MySQL 的基礎知識和完整語法結構,從數據庫和表的創建、數據操作到高級查詢、事務控制和用戶管理。MySQL 是一個功能強大且靈活的關系型數據庫系統,掌握這些基礎知識將為您開發數據庫驅動的應用程序打下堅實基礎。
在實際應用中,還需要根據具體業務需求設計合理的數據庫結構,創建適當的索引以提高查詢性能,并使用事務來保證數據的一致性。隨著對 MySQL 的深入理解,您還可以探索更多高級特性,如分區表、復制、集群等。