MYSQL 基本語法(上篇)

@[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)建界面

創(chuàng)建數(shù)據(jù)庫成功

drop 命令刪除數(shù)據(jù)庫


語法 :

DROP DATABASE 數(shù)據(jù)庫名

DROP DATABASE me;

如圖

刪除數(shù)據(jù)庫

use 命令選擇數(shù)據(jù)庫


語法 :

USE 數(shù)據(jù)庫名;

USE me;

如圖

選擇數(shù)據(jù)庫

執(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)
);

如圖

創(chuàng)建數(shù)據(jù)表

解析 :

  • 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;

如圖

刪除數(shù)據(jù)表

查看表結(jié)構(gòu)的幾種方式

語法 :

SHOW COLUMNS FROM table_name;

DESC table_name;

--- show
SHOW COLUMNS FROM table04;

--- desc
DESC table04;

如圖

刪除數(shù)據(jù)表

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;

如圖

插入數(shù)據(jù)

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;

如圖

查詢數(shù)據(jù)


查詢數(shù)據(jù)


查詢數(shù)據(jù)

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";

如圖

WHERE 子句

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;

如圖

UPDATE 更新

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;

如圖

DELETE 語句

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";

如圖

LIKE 子句

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;

如圖

UNION 操作符

UNION 操作符

注意 : 如圖, 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;

如圖

NULL 值處理

MySQL 正則表達(dá)式


借圖

正則表達(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';

如圖

正則表達(dá)式

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ù)控制語句 :

BEGINSTART 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ù)處理主要有兩種方法:

  1. 用 BEGIN, ROLLBACK, COMMIT 來實現(xiàn)

    • BEGIN 開始一個事務(wù)
    • ROLLBACK 事務(wù)回滾
    • COMMIT 事務(wù)確認(rèn)
  2. 直接用 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;

如圖

事務(wù)


事務(wù)

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;

如圖

ALTER 命令


ALTER 命令


ALTER 命令


ALTER 命令

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);

如圖

復(fù)制表

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ù)不敏感

處理重復(fù)數(shù)據(jù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是數(shù)據(jù)庫? 數(shù)據(jù)庫是存儲數(shù)據(jù)的集合的單獨(dú)的應(yīng)用程序。每個數(shù)據(jù)庫具有一個或多個不同的API,用于創(chuàng)建,訪問,管理...
    chen_000閱讀 4,141評論 0 19
  • 一、SQL速成 結(jié)構(gòu)查詢語言(SQL)是用于查詢關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言,它包括若干關(guān)鍵字和一致的語法,便于數(shù)據(jù)庫元件...
    shadow雨軒閱讀 582評論 0 3
  • 1. 了解SQL 1.1 數(shù)據(jù)庫基礎(chǔ) ? 學(xué)習(xí)到目前這個階段,我們就需要以某種方式與數(shù)據(jù)庫打交道。在深入學(xué)習(xí)MyS...
    鋒享前端閱讀 1,320評論 0 1
  • 終于,終于,終于有了發(fā)郵件的庫感動得快哭了,不用自己寫一大坨 import yagmail 鏈接郵箱服務(wù)器 wy ...
    我想回精神病院住閱讀 487評論 0 0
  • 提到醫(yī)生,你會想到什么? 今天想給大家分享的手作人,是個有5年內(nèi)科醫(yī)生工作經(jīng)歷的姑娘 很天蝎的天平座姑娘,現(xiàn)居福建...
    Acorner一角閱讀 609評論 2 4

友情鏈接更多精彩內(nèi)容