@[TOC]
MYSQL
安裝 MYSQL MYSQL 下載
連接 MYSQL
打開控制臺, 輸入以下命令回車, 會叫我們填寫密碼, 填寫好密碼回車, 如果沒有密碼就直接回車
mysql -u root -p
退出 MYSQL 可用 exit 命令
mysql> exit
如圖是連接成功界面

create 命令創(chuàng)建數(shù)據(jù)庫
我們可以在連接好 MYSQL 后, 使用 create 命令創(chuàng)建數(shù)據(jù)庫, 語法如下 :
CREATE DATABASE 數(shù)據(jù)庫名;
CREATE DATABASE databasename;
如圖是成功創(chuàng)建界面

drop 命令刪除數(shù)據(jù)庫
語法 :
DROP DATABASE 數(shù)據(jù)庫名
DROP DATABASE me;
如圖

use 命令選擇數(shù)據(jù)庫
語法 :
USE 數(shù)據(jù)庫名;
USE me;
如圖

執(zhí)行完 use 命令后我們就選擇了數(shù)據(jù)庫, 后續(xù)操作都會在我們選擇的這個數(shù)據(jù)庫中執(zhí)行
創(chuàng)建數(shù)據(jù)表
語法 :
CREATE TABLE table_name (column_name column_type);
CREATE TABLE IF NOT EXISTS `table01` (
id INT AUTO_INCREMENT,
title VARCHAR(100),
PRIMARY KEY (id)
);
如圖

解析 :
- AUTO_INCREMENT 定義列為自增屬性, 通常用于主鍵, 會自動加一
- PRIMARY KEY 關(guān)鍵字, 用于定義列為主鍵, 可以用多列來定義主鍵, 列之間用逗號隔開
- IF NOT EXISTS 是判斷表是否存在, 如果確定表不存在可以省略
MYSQL 數(shù)據(jù)類型 請移步
MySQL 刪除數(shù)據(jù)表
語法 :
DROP TABLE table_name;
讓我們來把上面我們創(chuàng)建好的 table01 刪了吧
DROP TABLE table01;
如圖

查看表結(jié)構(gòu)的幾種方式
語法 :
SHOW COLUMNS FROM table_name;
DESC table_name;
--- show
SHOW COLUMNS FROM table04;
--- desc
DESC table04;
如圖

MySQL 插入數(shù)據(jù)
語法 :
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
參數(shù)
field1, field2...
這些是列名
value1, value2...
這些是列的值
現(xiàn)在, 讓我們把 table01 創(chuàng)建回去, 再往里面的 title 列添加一些數(shù)據(jù)吧
--- 創(chuàng)建 table01 數(shù)據(jù)表
CREATE TABLE IF NOT EXISTS `table01` (
id INT AUTO_INCREMENT,
title VARCHAR(100),
PRIMARY KEY (id)
);
--- 向 table01 數(shù)據(jù)表里的 title 列添加一行數(shù)據(jù)
INSERT INTO table01 (title) VALUES ('tom');
--- 查詢 table01 數(shù)據(jù)表, 看下我們插入的數(shù)據(jù)
SELECT * FROM table01;
如圖

MySQL 查詢數(shù)據(jù)
語法 :
SELECT column_name, column_name
FROM table_name
[WHERE Clause][limit n][ OFFSET M]
- 查詢語句中你可以使用一個或者多個表,表之間使用逗號(,)分割,并使用 WHERE 語句來設(shè)定查詢條件。
- SELECT 命令可以讀取一條或者多條記錄。
- 你可以使用星號(*)來代替其他字段,SELECT 語句會返回表的所有字段數(shù)據(jù)
- 你可以使用 WHERE 語句來包含任何條件。
- 你可以使用 LIMIT 屬性來設(shè)定返回的記錄數(shù)。
- 你可以通過 OFFSET 指定 SELECT 語句開始查詢的數(shù)據(jù)偏移量。默認(rèn)情況下偏移量為 0。
- OFFSET 要配合 LIMIT 一起使用
為了演示該語法, 讓我們再去添加一些數(shù)據(jù)吧
--- 添加更多的數(shù)據(jù)
INSERT INTO table01 (title) VALUES ('tony');
INSERT INTO table01 (title) VALUES ('lily');
INSERT INTO table01 (title) VALUES ('lucy');
INSERT INTO table01 (title) VALUES ('jack');
--- 查詢所有
SELECT * FROM table01;
--- 只查詢 title 列
SELECT title FROM table01;
--- 只查詢 title 為 tony 的列
SELECT * FROM table01 WHERE title = 'tony';
--- 限制查詢的數(shù)量
SELECT * FROM table01 LIMIT 2;
--- 設(shè)置查詢數(shù)據(jù)的偏移量
SELECT * FROM table01 LIMIT 2 OFFSET 1;
如圖



MySQL WHERE 子句
語法 :
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
- 查詢語句中你可以使用一個或者多個表,表之間使用逗號, 分割,并使用 WHERE 語句來設(shè)定查詢條件。
- 你可以在 WHERE 子句中指定任何條件。
- 你可以使用 AND 或者 OR 指定一個或多個條件。
- WHERE 子句也可以運(yùn)用于 SQL 的 DELETE 或者 UPDATE 命令。
- WHERE 子句類似于程序語言中的 if 條件,根據(jù) MySQL 表中的字段值來讀取指定的數(shù)據(jù)。
-
WHERE 子句可以使用常用的比較運(yùn)算符, 借圖 :
WHERE 子句
SELECT title FROM table01 WHERE title = "tome" AND title = "tony";
SELECT title FROM table01 WHERE title = "tome" OR title = "tony";
如圖

MySQL UPDATE 更新
語法 :
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
- 你可以同時更新一個或多個字段。
- 你可以在 WHERE 子句中指定任何條件。
- 你可以在一個單獨(dú)表中同時更新數(shù)據(jù)。
--- 看下表結(jié)構(gòu)先
SELECT * FROM table01;
--- 修改 title = tome 的字段, 將 tome 改為 newtome
UPDATE table01 SET title = "newtome" WHERE id = 1;
--- 查看修改結(jié)果
SELECT * FROM table01;
如圖

MySQL DELETE 語句
語法 :
DELETE FROM table_name [WHERE Clause]
- 如果沒有指定 WHERE 子句,MySQL 表中的所有記錄將被刪除。
- 你可以在 WHERE 子句中指定任何條件
--- 查看表內(nèi)容
SELECT * FROM table01;
--- 刪除 id = 1 的這一行數(shù)據(jù)
DELETE FROM table01 WHERE id = 1;
--- 再次查看表內(nèi)容
SELECT * FROM table01;
如圖

MySQL LIKE 子句
SQL LIKE 子句中使用百分號 %字符來表示任意字符,類似于 UNIX 或正則表達(dá)式中的星號 *。
如果沒有使用百分號 %, LIKE 子句與等號 = 的效果是一樣的。
語法 :
SELECT field1, field2,...fieldN
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
- 你可以在 WHERE 子句中指定任何條件。
- 你可以在 WHERE 子句中使用 LIKE 子句。
- 你可以使用 LIKE 子句代替等號 =。
- LIKE 通常與 % 一同使用,類似于一個元字符的搜索。
- 你可以使用 AND 或者 OR 指定一個或多個條件。
- 你可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句來指定條件。
- 該字段可用于做模糊查詢
--- 查詢 title 中帶有 y 字符的行
SELECT * FROM table01 WHERE title LIKE "%y";
如圖

MySQL UNION 操作符
MySQL UNION 操作符用于連接兩個以上的 SELECT 語句的結(jié)果組合到一個結(jié)果集合中。多個 SELECT 語句會刪除重復(fù)的數(shù)據(jù)。
語法 :
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
- expression1, expression2, ... expression_n: 要檢索的列。
- tables: 要檢索的數(shù)據(jù)表。
- WHERE conditions: 可選, 檢索條件。
- DISTINCT: 可選,刪除結(jié)果集中重復(fù)的數(shù)據(jù)。默認(rèn)情況下 UNION 操作符已經(jīng)刪除了重復(fù)數(shù)據(jù),所以 DISTINCT 修飾符對結(jié)果沒啥影響。
- ALL: 可選,返回所有結(jié)果集,包含重復(fù)數(shù)據(jù)。
--- 再建一個表 table02
CREATE TABLE table02 ( id INT AUTO_INCREMENT, title VARCHAR(100), PRIMARY KEY (id) );
--- 往 table02 中插入幾條數(shù)據(jù), 數(shù)據(jù)中包含幾個和 table01 重復(fù)的數(shù)據(jù)
INSERT INTO table02 (title) VALUES ("tony");
INSERT INTO table02 (title) VALUES ("lily");
INSERT INTO table02 (title) VALUES ("lucy");
INSERT INTO table02 (title) VALUES ("tome");
INSERT INTO table02 (title) VALUES ("haha");
--- 用 union 整合數(shù)據(jù)
SELECT * FROM table01 UNION DISTINCT SELECT * FROM table02;
SELECT title FROM table01 UNION DISTINCT SELECT title FROM table02;
如圖


注意 : 如圖, select 必須要指定檢索的列, 否則不能去重
MySQL 排序
語法 :
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默認(rèn) asc]], [field2...]ASC [DESC][默認(rèn) asc]]
- 你可以使用任何字段來作為排序的條件,從而返回排序后的查詢結(jié)果。
- 你可以設(shè)定多個字段來排序。
- 你可以使用 ASC 或 DESC 關(guān)鍵字來設(shè)置查詢結(jié)果是按升序或降序排列。 默認(rèn)情況下,它是按升序排列。
- 你可以添加 WHERE...LIKE 子句來設(shè)置條件。
--- 將 table01 的數(shù)據(jù)以 id 降序來查詢
SELECT * FROM table01 ORDER BY id DESC;
如圖

MySQL GROUP BY 語句(分組)
GROUP BY 語句根據(jù)一個或多個列對結(jié)果集進(jìn)行分組。
在分組的列上我們可以使用 COUNT, SUM, AVG,等函數(shù)。
語法 :
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
function(column_name) 是 COUNT, SUM, AVG 等函數(shù), column_name 是要操作的列名
用 SELECT 查詢出來的列可以用 AS 來重命名
WITH ROLLUP 可以實現(xiàn)在分組統(tǒng)計數(shù)據(jù)基礎(chǔ)上再進(jìn)行相同的統(tǒng)計(SUM,AVG,COUNT…)
-
使用 coalesce 來設(shè)置一個可以取代 NUll 的名稱
語法
select coalesce(a,b,c);
- 如果 a==null,則選擇 b;如果 b==null,則選擇 c;如果 a!=null,則選擇 a;如果 a b c 都為 null ,則返回為 null(沒意義)
--- 將 table01 中的數(shù)據(jù)以 title 來分組
SELECT title, COUNT(*) FROM table01 GROUP BY title;
--- 用 as 將查詢的數(shù)據(jù)重命名
SELECT title, COUNT(*) AS title_count FROM table01 GROUP BY title;
--- 用 WITH ROLLUP 對數(shù)據(jù)進(jìn)行再次統(tǒng)計
SELECT title, COUNT(*) AS title_count FROM table01 GROUP BY title WITH ROLLUP;
--- 用 coalesce 處理 NULL
SELECT COALESCE(title, "total"), COUNT(*) AS title_count FROM table01 GROUP BY title WITH ROLLUP;
如圖


MySQL 連接的使用
本章節(jié)我們將向大家介紹如何使用 MySQL 的 JOIN 在兩個或多個表中查詢數(shù)據(jù)。
你可以在 SELECT, UPDATE 和 DELETE 語句中使用 Mysql 的 JOIN 來聯(lián)合多表查詢。
語法 : JOIN 按照功能大致分為如下三類:
- INNER JOIN(內(nèi)連接,或等值連接):獲取兩個表中字段匹配關(guān)系的記錄。
- LEFT JOIN(左連接):獲取左表所有記錄,即使右表沒有對應(yīng)匹配的記錄。
- RIGHT JOIN(右連接): 與 LEFT JOIN 相反,用于獲取右表所有記錄,即使左表沒有對應(yīng)匹配的記錄。
--- 使用 INNER JOIN (也可以省略 INNER 使用 JOIN,效果一樣)
SELECT a.id, b.title FROM table01 a INNER JOIN table02 b ON a.id = b.id;
--- 使用 LEFT JOIN 獲取左表所有記錄,即使右表沒有對應(yīng)匹配的記錄。
SELECT a.id, b.title FROM table01 a LEFT JOIN table02 b ON a.id = b.id;
--- 使用 RIGHT JOIN 獲取右表所有記錄,即使左表沒有對應(yīng)匹配的記錄
SELECT a.id, b.title FROM table01 a RIGHT JOIN table02 b ON a.id = b.id;
如圖


MySQL NULL 值處理
我們已經(jīng)知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句來讀取數(shù)據(jù)表中的數(shù)據(jù),但是當(dāng)提供的查詢條件字段為 NULL 時,該命令可能就無法正常工作
語法 : MySQL 提供了三大運(yùn)算符
- IS NULL: 當(dāng)列的值是 NULL,此運(yùn)算符返回 true。
- IS NOT NULL: 當(dāng)列的值不為 NULL, 運(yùn)算符返回 true。
- <=>: 比較操作符(不同于 = 運(yùn)算符),當(dāng)比較的的兩個值相等或者都為 NULL 時返回 true。
關(guān)于 NULL 的條件比較運(yùn)算是比較特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值
在 MySQL 中,NULL 值與任何其它值的比較(即使是 NULL)永遠(yuǎn)返回 NULL,即 NULL = NULL 返回 NULL
MySQL 中處理 NULL 使用 IS NULL 和 IS NOT NULL 運(yùn)算符
注意 :
select *, columnName1 + ifnull(columnName2,0) from tableName;
columnName1,columnName2 為 int 型,當(dāng) columnName2 中,有值為 null 時,columnName1+columnName2=null, ifnull(columnName2,0) 把 columnName2 中 null 值轉(zhuǎn)為 0
--- 創(chuàng)建 table03
CREATE TABLE table03 (id INT AUTO_INCREMENT, title VARCHAR(100), age INT, PRIMARY KEY (id));
--- 添加 5 條數(shù)據(jù)給 table03
INSERT INTO table03 (title) VALUES ("TOMS");
INSERT INTO table03 (title, age) VALUES ("ALPHA", 16);
INSERT INTO table03 (title, age) VALUES ("BLOON", 18);
INSERT INTO table03 (title, age) VALUES ("CRITR", 20);
INSERT INTO table03 (title) VALUES ("DIRROO");
--- 查詢 age 為空的數(shù)據(jù)
SELECT * FROM table03 WHERE age IS NULL;
--- 查詢 age 不為空的數(shù)據(jù)
SELECT * FROM table03 WHERE age IS NOT NULL;
--- 把 id 和 age 相加
SELECT *, id + ifnull(age, 0) FROM table03;
如圖

MySQL 正則表達(dá)式
借圖

SELECT column1, column2... FROM table_name WHERE column1 REGEXP regexp, column...;
--- 篩選 title 中帶 y 的數(shù)據(jù)
SELECT title FROM table01 WHERE title REGEXP 'y';
--- 篩選 title 中帶 o 的數(shù)據(jù)
SELECT title FROM table01 WHERE title REGEXP 'o';
如圖

MySQL 事務(wù)
MySQL 事務(wù)主要用于處理操作量大,復(fù)雜度高的數(shù)據(jù)。比如說,在人員管理系統(tǒng)中,你刪除一個人員,你既需要刪除人員的基本資料,也要刪除和該人員相關(guān)的信息,如信箱,文章等等,這樣,這些數(shù)據(jù)庫操作語句就構(gòu)成一個事務(wù)!
- 在 MySQL 中只有使用了 Innodb 數(shù)據(jù)庫引擎的數(shù)據(jù)庫或表才支持事務(wù)。
- 事務(wù)處理可以用來維護(hù)數(shù)據(jù)庫的完整性,保證成批的 SQL 語句要么全部執(zhí)行,要么全部不執(zhí)行。
- 事務(wù)用來管理 insert,update,delete 語句
事務(wù)控制語句 :
BEGIN或START TRANSACTION顯式地開啟一個事務(wù);
COMMIT也可以使用COMMIT WORK,不過二者是等價的。COMMIT 會提交事務(wù),并使已對數(shù)據(jù)庫進(jìn)行的所有修改成為永久性的;
ROLLBACK也可以使用ROLLBACK WORK,不過二者是等價的。回滾會結(jié)束用戶的事務(wù),并撤銷正在進(jìn)行的所有未提交的修改;
SAVEPOINT identifier,SAVEPOINT允許在事務(wù)中創(chuàng)建一個保存點(diǎn),一個事務(wù)中可以有多個 SAVEPOINT;
RELEASE SAVEPOINT identifier刪除一個事務(wù)的保存點(diǎn),當(dāng)沒有指定的保存點(diǎn)時,執(zhí)行該語句會拋出一個異常;
ROLLBACK TO identifier把事務(wù)回滾到標(biāo)記點(diǎn);
SET TRANSACTION用來設(shè)置事務(wù)的隔離級別。InnoDB 存儲引擎提供事務(wù)的隔離級別有 READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。
MYSQL 事務(wù)處理主要有兩種方法:
-
用 BEGIN, ROLLBACK, COMMIT 來實現(xiàn)
- BEGIN 開始一個事務(wù)
- ROLLBACK 事務(wù)回滾
- COMMIT 事務(wù)確認(rèn)
-
直接用 SET 來改變 MySQL 的自動提交模式 :
- SET AUTOCOMMIT=0 禁止自動提交
- SET AUTOCOMMIT=1 開啟自動提交
這里就只舉例事務(wù)的 BEGIN, ROLLBACK, COMMIT, 其他的下次另起一文探討
--- 創(chuàng)建數(shù)據(jù)表并連續(xù)插入3條數(shù)據(jù)
CREATE TABLE table04 (id INT AUTO_INCREMENT, title VARCHAR(100), PRIMARY KEY (id));
--- 開始事務(wù)
BEGIN;
INSERT INTO table04 (title) VALUES ("HTML");
INSERT INTO table04 (title) VALUES ("CSS");
INSERT INTO table04 (title) VALUES ("JAVASCRIPT");
--- 提交事務(wù)
COMMIT;
SELECT * FROM table04;
--- 開始事務(wù)
BEGIN;
INSERT INTO table04 (title) VALUES ("JAVASE");
INSERT INTO table04 (title) VALUES ("JAVAEE");
--- 回滾事務(wù)
ROLLBACK;
--- 提交事務(wù)
COMMIT;
SELECT * FROM table04;
如圖


MySQL ALTER 命令
當(dāng)我們需要修改數(shù)據(jù)表名或者修改數(shù)據(jù)表字段時,就需要使用到 MySQL ALTER 命令。
數(shù)據(jù)表的更改 及 數(shù)據(jù)表字段的增刪改, 下文 type 是數(shù)據(jù)類型:
增 : MySQL 在 ALTER 命令中使用 ADD 子句來向數(shù)據(jù)表中添加列
ALTER TABLE table_name ADD column_name type;刪 : MySQL 在 ALTER 命令中使用 DROP 子句來刪除原本表中存在的字段
ALTER TABLE table_name DROP column_name;改 : MySQL 在 ALTER 命令中使用 MODIFY 或 CHANGE 子句 來修改字段類型及名稱
使用 MODIFY 子句更改字段類型
ALTER TABLE table_name MODIFY column_name type;使用 CHANGE 子句, 語法有很大的不同。 在 CHANGE 關(guān)鍵字之后,緊跟著的是你要修改的字段名,然后指定新字段名及類型。
ALTER TABLE table_name CHANGE old_column_name new_column_name type;ALTER TABLE 對 Null 值和默認(rèn)值的影響, 當(dāng)你修改字段時,你可以指定是否包含值或者是否設(shè)置默認(rèn)值
如果你不設(shè)置默認(rèn)值,MySQL 會自動設(shè)置該字段默認(rèn)為 NULL
ALTER TABLE table_name MODIFY column_name type NOT NULL DEFAULT type_value;使用 ALTER 來修改字段的默認(rèn)值
ALTER TABLE table_name ALTER column_name SET DEFAULT type_value;使用 ALTER 命令及 DROP 子句來刪除字段的默認(rèn)值
ALTER TABLE table_name ALTER column_name DROP DEFAULT;修改表名
ALTER TABLE table_name RENAME TO new_table_name;
--- 查看 table4 的表結(jié)構(gòu)
SHOW COLUMNS FROM table04;
--- 往 table04 中添加一列, 列名為 sex, 類型為 varchar(2)
ALTER TABLE table04 ADD sex varchar(2);
--- 再次查看 table4 的表結(jié)構(gòu), 新增了 sex 列
SHOW COLUMNS FROM table04;
--- 刪除剛剛創(chuàng)建的列 sex
ALTER TABLE table04 DROP sex;
--- 再次查看 table4 的表結(jié)構(gòu), 明顯沒有了 sex 列
SHOW COLUMNS FROM table04;
--- 更改 table4 中 title 字段的類型為 varchar(50)
ALTER TABLE table04 MODIFY title VARCHAR(50);
--- 再次查看 table4 的表結(jié)構(gòu), title 字段的 varchar(100) 變成了 varchar(50)
SHOW COLUMNS FROM table04;
--- 更改 table04 中 title 字段名為 name
ALTER TABLE table04 CHANGE title name VARCHAR(50);
--- 再次查看 table4 的表結(jié)構(gòu), title 字段名變成了 name
SHOW COLUMNS FROM table04;
如圖




MySQL 臨時表
如果你使用了其他 MySQL 客戶端程序連接 MySQL 數(shù)據(jù)庫服務(wù)器來創(chuàng)建臨時表,那么只有在關(guān)閉客戶端程序時才會銷毀臨時表,當(dāng)然你也可以手動銷毀
語法 : 與普通的表操作一樣, 只不過創(chuàng)建的時候要在 TABLE 前加 TEMPORARY
CREATE TEMPORARY TABLE table_name (column_name1 type, column_name2 type, ...);
CREATE TEMPORARY TABLE temp (id INT PRIMARY KEY, name VARCHAR(20));
MySQL 復(fù)制表
語法 :
CREATE TABLE clone_table (column1 type, column2 type...);
INSERT INTO clone_table (column1, column2...) SELECT column1, column2... FROM table_name;
CREATE TABLE targetTable LIKE sourceTable;
INSERT INTO targetTable SELECT * FROM sourceTable;
創(chuàng)建表的同時定義表中的字段信息, 新表列必須是原表里有的
CREATE TABLE new_table (column1 type, column2...) AS (SELECT * FROM sourceTable);
拷貝一個表中其中的一些字段
CREATE TABLE new_table AS (SELECT column_name1, column_name2 FROM sourceTable);
可以將新建的表的字段改名
CREATE TABLE new_table AS (SELECT column_name1, column_name2 AS new_column_name2... FROM sourceTable);
--- 方式一
CREATE TABLE table05 (id INT PRIMARY KEY, name VARCHAR(50));
INSERT INTO table05 (id, name) SELECT id, name FROM table04;
--- 方式二
CREATE TABLE table06 LIKE table05;
INSERT INTO table06 SELECT * FROM table05;
--- 方式三
CREATE TABLE table07 (id INT) AS (SELECT * FROM table06);
如圖

MySQL 元數(shù)據(jù)
獲取服務(wù)器元數(shù)據(jù)
| 命令 | 描述 |
|---|---|
| SELECT VERSION( ) | 服務(wù)器版本信息 |
| SELECT DATABASE( ) | 當(dāng)前數(shù)據(jù)庫名 (或者返回空) |
| SELECT USER( ) | 當(dāng)前用戶名 |
| SHOW STATUS | 服務(wù)器狀態(tài) |
| SHOW VARIABLES | 服務(wù)器配置變量 |
MySQL 序列使用
MySQL 序列是一組整數(shù):1, 2, 3, ...,由于一張數(shù)據(jù)表只能有一個字段自增主鍵, 如果你想實現(xiàn)其他字段也實現(xiàn)自動增加,就可以使用 MySQL 序列來實現(xiàn)
語法 :
使用 AUTO_INCREMENT
CREATE TABLE table_name ( id INT PRIMARY KEY AUTO_INCREMENT );
重置序列
如果你刪除了數(shù)據(jù)表中的多條記錄,并希望對剩下數(shù)據(jù)的 AUTO_INCREMENT 列進(jìn)行重新排列,那么你可以通過刪除自增的列,然后重新添加來實現(xiàn)。 不過該操作要非常小心,如果在刪除的同時又有新記錄添加,有可能會出現(xiàn)數(shù)據(jù)混亂。ALTER TABLE table_name DROP id;
ALTER TABLE table_name ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id);
--- 我們來重置一下 table05 的序列吧
SELECT * FROM table05;
ALTER TABLE table05 DROP id;
ALTER TABLE table05 ADD id INT PRIMARY KEY AUTO_INCREMENT;
--- 如果需要 id 在第一列顯示, 在 add 命令中加 first 字段即可
ALTER TABLE table05 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST;
如圖

MySQL 處理重復(fù)數(shù)據(jù)
在 MySQL 數(shù)據(jù)表中設(shè)置指定的字段為 PRIMARY KEY(主鍵) 或者 UNIQUE(唯一) 索引來保證數(shù)據(jù)的唯一性。
_ 如果你設(shè)置了雙主鍵,那么那個鍵的默認(rèn)值不能為 NULL,可設(shè)置為 NOT NULL_
CREAT TABLE table_name (coumn type PRIMARY KEY);
CREATE TABLE table_name ( column1 type NOT NULL, column2 type NOT NULL, PRIMARY KEY (column1, column2) );
用 INSERT IGNORE INTO 代替 INSERT INTO 來插入數(shù)據(jù)
INSERT IGNORE INTO 與 INSERT INTO 的區(qū)別就是 INSERT IGNORE 會忽略數(shù)據(jù)庫中已經(jīng)存在的數(shù)據(jù),如果數(shù)據(jù)庫沒有數(shù)據(jù),就插入新的數(shù)據(jù),如果有數(shù)據(jù)的話就跳過這條數(shù)據(jù)。
REPLACE INTO 代替 INSERT INTO
REPLACE INTO 如果存在 primary 或 unique 相同的記錄,則先刪除掉。再插入新記錄
CREATE TABLE table08 (id INT AUTO_INCREMENT, title VARCHAR(20), age INT UNIQUE, PRIMARY KEY (id, title));
INSERT INTO table08 (title, age) VALUES ("tom", 25);
INSERT IGNORE INTO table08 (title, age) VALUES ("tom", 25);
REPLACE INTO table08 (title, age) VALUES ("tom", 20);
REPLACE INTO table08 (title, age) VALUES ("tony", 20);
如圖, 用 REPLACE INTO 插入的數(shù)據(jù)對 INSERT INTO 插入的數(shù)據(jù)不敏感

