1. 程式人生 > 實用技巧 >MySQL複習基礎語句

MySQL複習基礎語句

MySQL 語句

目錄

MySQL語句的規範

  • 關鍵字、函式名,全部大寫
  • 資料庫名、表名、欄位名稱,全部小寫
  • SQL語句必須以分號結尾

MySQL引數

mysql 引數 描述
-D, --database=name 開啟指定資料庫
--delimiter = name 指定分隔符
-h, --host=name 伺服器名稱
-p, --password[=name] 密碼
-P, --port=#
--prompt=name 設定提示符
-u, --user=name 使用者名稱
-V, --version 輸出版本資訊並且退出

登入MySQL

# 第一種 伺服器主機地址+不接密碼
mysql -h localhost -u root -p

# 第二種 伺服器主機地址+密碼
mysql -h localhost -u root -proot

# 第三種 省略伺服器主機地址+不接密碼,預設localhost
mysql -u root -p

# 第四種 省略伺服器主機地址+密碼,預設localhost
mysql -u root -proot

# 第五種 一條語句完全登入,預設埠3306,預設主機IP地址localhost
mysql -u[使用者名稱] -p[密碼] -P3306 -hlocalhost

退出MySQL

# 三選一
mysql> exit;
mysql> quit;
mysql> \q;

啟動/關閉MySQL服務

# 啟動MySQL服務
net start mysql

# 關閉MySQL服務
net stop mysql

檢視當前使用者的加密方式

USE mysql;
SELECT user,plugin FROM user WHERE user='root';

修改MySQL提示符

# 未連線MySQL時,通過引數指定
cmd> mysql -uroot -p[密碼] --prompt

# 連線上MySQL後,通過prompt命令修改
prompt 提示符

MySQL提示符,

可以多個連用。其中簡單的四種:

\D:完整的日期

\d:當前的資料庫

\h:伺服器名稱

\u:當前使用者

例如:"\u@\h \d>",表示“當前使用者@主機 (test)”

將使用者的加密方式改為mysql_native_password

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword'; # 修改YourPassword即可
FLUSH PRIVILEGES;

新建資料庫

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name;
/* {}必選項 |選擇項 []可選項 */

MySQL 中,可以使用 CREATE DATABASE 語句建立資料庫,語法格式如下:

CREATE DATABASE [IF NOT EXISTS] <資料庫名>
[[DEFAULT] CHARACTER SET <字符集名>]
[[DEFAULT] COLLATE <校對規則名>];

[ ]中的內容是可選的。語法說明如下:

  • <資料庫名>:建立資料庫的名稱。MySQL 的資料儲存區將以目錄方式表示 MySQL 資料庫,因此資料庫名稱必須符合作業系統的資料夾命名規則,不能以數字開頭,儘量要有實際意義。注意在 MySQL 中不區分大小寫。
  • [IF NOT EXISTS]:在建立資料庫之前進行判斷,只有該資料庫目前尚不存在時才能執行操作。此選項可以用來避免資料庫已經存在而重複建立的錯誤。
  • [DEFAULT] CHARACTER SET:指定資料庫的字符集。指定字符集的目的是為了避免在資料庫中儲存的資料出現亂碼的情況。如果在建立資料庫時不指定字符集,那麼就使用系統的預設字符集。
  • [DEFAULT] COLLATE:指定字符集的預設校對規則。

MySQL 的字符集(CHARACTER)和校對規則(COLLATION)是兩個不同的概念。字符集是用來定義 MySQL 儲存字串的方式,校對規則定義了比較字串的方式。後面我們會單獨講解 MySQL 的字符集和校對規則。

最簡單的建立 MySQL 資料庫的語句

在 MySQL 中建立一個名為 test_db 的資料庫。在 MySQL 命令列客戶端輸入 SQL 語句CREATE DATABASE test_db;即可建立一個數據庫,輸入的 SQL 語句與執行結果如下。

mysql> CREATE DATABASE test_db;
Query OK, 1 row affected (0.12 sec);

“Query OK, 1 row affected (0.12 sec);”提示中,“Query OK”表示上面的命令執行成功,“1 row affected”表示操作隻影響了資料庫中一行的記錄,“0.12 sec”則記錄了操作執行的時間。

若再次輸入CREATE DATABASE test_db;語句,則系統會給出錯誤提示資訊,如下所示:

mysql> CREATE DATABASE test_db;
ERROR 1007 (HY000): Can't create database 'test_db'; database exists

提示不能建立“test_db”資料庫,資料庫已存在。MySQL 不允許在同一系統下建立兩個相同名稱的資料庫。

可以加上IF NOT EXISTS從句,就可以避免類似錯誤,如下所示:

mysql> CREATE DATABASE IF NOT EXISTS test_db;
Query OK, 1 row affected (0.12 sec)

建立 MySQL 資料庫時指定字符集和校對規則

使用 MySQL 命令列工具建立一個測試資料庫,命名為 test_db_char,指定其預設字符集為 utf8,預設校對規則為 utf8_chinese_ci(簡體中文,不區分大小寫),輸入的 SQL 語句與執行結果如下所示:

mysql> CREATE DATABASE IF NOT EXISTS test_db_char
-> DEFAULT CHARACTER SET utf8
-> DEFAULT COLLATE utf8_chinese_ci;
Query OK, 1 row affected (0.03 sec)

這時,可以使用SHOW CREATE DATABASE檢視 test_db_char 資料庫的定義宣告,發現該資料庫的指定字符集為 utf8,執行結果如下所示:

mysql> SHOW CREATE DATABASE test_db_char;
+--------------+-----------------------------------------------------+
| Database     | Create Database                                     |
+--------------+-----------------------------------------------------+
| test_db_char | CREATE DATABASE `test_db_char` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+--------------+-----------------------------------------------------+
1 row in set (0.00 sec)

“1 row in set (0.00 sec)”表示集合中有 1 行資訊,處理時間為 0.00秒。時間為 0.00 秒並不代表沒有花費時間,而是時間非常短,小於 0.01 秒。

查詢資料庫

資料庫可以看作是一個專門儲存資料物件的容器,每一個數據庫都有唯一的名稱,並且資料庫的名稱都是有實際意義的,這樣就可以清晰的看出每個資料庫用來存放什麼資料。在 MySQL 資料庫中存在系統資料庫和自定義資料庫,系統資料庫是在安裝 MySQL 後系統自帶的資料庫,自定義資料庫是由使用者定義建立的資料庫。

在 MySQL 中,可使用 SHOW DATABASES 語句來檢視或顯示當前使用者許可權範圍以內的資料庫。檢視資料庫的語法格式為:

SHOW DATABASES [LIKE '資料庫名'];

語法說明如下:

  • LIKE 從句是可選項,用於匹配指定的資料庫名稱。LIKE 從句可以部分匹配,也可以完全匹配。
  • 資料庫名由單引號' '包圍。

檢視所有資料庫/資料庫列表

列出當前使用者可檢視的所有資料庫:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| world              |
+--------------------+
6 row in set (0.22 sec)

可以發現,在上面的列表中有 6 個數據庫,它們都是安裝 MySQL 時系統自動建立的,其各自功能如下:

  • information_schema:主要儲存了系統中的一些資料庫物件資訊,比如使用者表資訊、列資訊、許可權資訊、字符集資訊和分割槽資訊等。
  • mysql:MySQL 的核心資料庫,類似於 SQL Server 中的 master 表,主要負責儲存資料庫使用者、使用者訪問許可權等 MySQL 自己需要使用的控制和管理資訊。常用的比如在 mysql 資料庫的 user 表中修改 root 使用者密碼。
  • performance_schema:主要用於收集資料庫伺服器效能引數。
  • sakila:MySQL 提供的樣例資料庫,該資料庫共有 16 張表,這些資料表都是比較常見的,在設計資料庫時,可以參照這些樣例資料表來快速完成所需的資料表。
  • sys:MySQL 5.7 安裝完成後會多一個 sys 資料庫。sys 資料庫主要提供了一些檢視,資料都來自於 performation_schema,主要是讓開發者和使用者更方便地檢視效能問題。
  • world:world 資料庫是 MySQL 自動建立的資料庫,該資料庫中只包括 3 張資料表,分別儲存城市,國家和國家使用的語言等內容。

建立並檢視資料庫

先建立一個名為 test_db 的資料庫:

mysql> CREATE DATABASE test_db;
Query OK, 1 row affected (0.12 sec)

再使用 SHOW DATABASES 語句顯示許可權範圍內的所有資料庫名,如下所示:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| test_db            |
| world              |
+--------------------+
7 row in set (0.22 sec)

你看,剛才建立的資料庫已經被顯示出來了。

使用 LIKE 從句

先建立三個資料庫,名字分別為 test_db、db_test、db_test_db。

  1. 使用 LIKE 從句,檢視與 test_db 完全匹配的資料庫:
mysql> SHOW DATABASES LIKE 'test_db';
+--------------------+
| Database (test_db) |
+--------------------+
| test_db            |
+--------------------+
1 row in set (0.03 sec)
  1. 使用 LIKE 從句,檢視名字中包含 test 的資料庫:
mysql> SHOW DATABASES LIKE '%test%';
+--------------------+
| Database (%test%)  |
+--------------------+
| db_test            |
+--------------------+
| db_test_db         |
+--------------------+
| test_db            |
+--------------------+
3 row in set (0.03 sec)
  1. 使用 LIKE 從句,檢視名字以 db 開頭的資料庫:
mysql> SHOW DATABASES LIKE 'db%';
+----------------+
| Database (db%) |
+----------------+
| db_test        |
+----------------+
| db_test_db     |
+----------------+
2 row in set (0.03 sec)
  1. 使用 LIKE 從句,檢視名字以 db 結尾的資料庫:
mysql> SHOW DATABASES LIKE '%db';
+----------------+
| Database (%db) |
+----------------+
| db_test_db     |
+----------------+
| test_db        |
+----------------+
2 row in set (0.03 sec)

檢視資料庫的建立資訊/定義宣告

SHOW CREATE DATABASE <DB>;

修改資料庫

在 MySQL 中,可以使用 ALTER DATABASE 來修改已經被建立或者存在的資料庫的相關引數。修改資料庫的語法格式為:

ALTER DATABASE [資料庫名] { 
[ DEFAULT ] CHARACTER SET <字符集名> |
[ DEFAULT ] COLLATE <校對規則名>}

語法說明如下:

  • ALTER DATABASE 用於更改資料庫的全域性特性。
  • 使用 ALTER DATABASE 需要獲得資料庫 ALTER 許可權。
  • 資料庫名稱可以忽略,此時語句對應於預設資料庫。
  • CHARACTER SET 子句用於更改預設的資料庫字符集。

修改資料庫字符集

檢視 test_db 資料庫的定義宣告的執行結果如下所示:

mysql> SHOW CREATE DATABASE test_db;
+----------+--------------------------------------------------------+
| Database | Create Database                                        |
+----------+--------------------------------------------------------+
| test_db  | CREATE DATABASE `test_db` /*!40100 DEFAULT CHARACTER SET utf8 */|
+----------+--------------------------------------------------------+
1 row in set (0.05 sec)

使用命令列工具將資料庫 test_db 的指定字符集修改為 gb2312,預設校對規則修改為 utf8_unicode_ci,輸入 SQL 語句與執行結果如下所示:

mysql> CREATE DATABASE test_db
    -> DEFAULT CHARACTER SET gb2312
    -> DEFAULT COLLATE gb2312_chinese_ci;
mysql> SHOW CREATE DATABASE test_db;
+----------+--------------------------------------------------------+
| Database | Create Database                                        |
+----------+--------------------------------------------------------+
| test_db  | CREATE DATABASE `test_db` /*!40100 DEFAULT CHARACTER SET gb2312 */|
+----------+--------------------------------------------------------+
1 row in set (0.00 sec)

刪除資料庫

當資料庫不再使用時應該將其刪除,以確保資料庫儲存空間中存放的是有效資料。刪除資料庫是將已經存在的資料庫從磁碟空間上清除,清除之後,資料庫中的所有資料也將一同被刪除。

MySQL 中,當需要刪除已建立的資料庫時,可以使用 DROP DATABASE 語句。其語法格式為:

DROP DATABASE [ IF EXISTS ] <資料庫名>

語法說明如下:

  • <資料庫名>:指定要刪除的資料庫名。
  • IF EXISTS:用於防止當資料庫不存在時發生錯誤。
  • DROP DATABASE:刪除資料庫中的所有表格並同時刪除資料庫。使用此語句時要非常小心,以免錯誤刪除。如果要使用 DROP DATABASE,需要獲得資料庫 DROP 許可權。

注意:MySQL 安裝後,系統會自動建立名為 information_schema 和 mysql 的兩個系統資料庫,系統資料庫存放一些和資料庫相關的資訊,如果刪除了這兩個資料庫,MySQL 將不能正常工作。

資料庫列表中刪除

下面在 MySQL 中建立一個測試資料庫 test_db_del。

mysql> CREATE DATABASE test_db_del;
Query OK, 1 row affected (0.08 sec)
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| test_db            |
| test_db_char       |
| test_db_del        |
| world              |
+--------------------+
9 rows in set (0.00 sec)

使用命令列工具將資料庫 test_db_del 從資料庫列表中刪除,輸入的 SQL 語句與執行結果如下所示:

mysql> DROP DATABASE test_db_del;
Query OK, 0 rows affected (0.57 sec)
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| test_db            |
| test_db_char       |
| world              |
+--------------------+
8 rows in set (0.00 sec) 

此時資料庫 test_db_del 不存在。再次執行相同的命令,直接使用 DROP DATABASE test_db_del,系統會報錯,如下所示:

mysql> DROP DATABASE test_db_del;
ERROR 1008 (HY000): Can't drop database 'test_db_del'; database doesn't exist

如果使用IF EXISTS從句,可以防止系統報此類錯誤,如下所示:

mysql> DROP DATABASE IF EXISTS test_db_del;
Query OK, 0 rows affected, 1 warning (0.00 sec)

使用 DROP DATABASE 命令時要非常謹慎,在執行該命令後,MySQL 不會給出任何提示確認資訊。DROP DATABASE 刪除資料庫後,資料庫中儲存的所有資料表和資料也將一同被刪除,而且不能恢復。因此最好在刪除資料庫之前先將資料庫進行備份。

選擇/開啟資料庫

在 MySQL 中,USE 語句用來完成一個數據庫到另一個數據庫的跳轉。

當用 CREATE DATABASE 語句建立資料庫之後,該資料庫不會自動成為當前資料庫,需要用 USE 來指定當前資料庫。其語法格式為:

USE <資料庫名>;

該語句可以通知 MySQL 把<資料庫名>所指示的資料庫作為當前資料庫。該資料庫保持為預設資料庫,直到語段的結尾,或者直到遇見一個不同的 USE 語句。

只有使用 USE 語句來指定某個資料庫作為當前資料庫之後,才能對該資料庫及其儲存的資料物件執行操作。

設定預設資料庫

使用命令列工具將資料庫 test_db 設定為預設資料庫,輸入的 SQL 語句與執行結果如下所示:

mysql> USE test_db;
Database changed

在執行選擇資料庫語句時,如果出現“Database changed”提示,則表示選擇資料庫成功。

檢視資料庫引擎

SHOW ENGINES;

詳細,見http://c.biancheng.net/view/2418.html

檢視當前伺服器版本

SELECT VERSION();

檢視當前日期時間

SELECT NOW();

檢視當前使用者

SELECT  USER();

檢視錯誤資訊

SHOW WARNINGS;

建立資料表

CREATE TABLE [IF NOT EXSITS] table_name(
column_name data_type [約束條件1] [約束條件2] [...],
....
);

注意,約束條件如下:

  1. 如果規定其資料型別data_type為整形無符號值,在其隨後加上**UNSIGNED **即可。
  2. 欄位值為空:NULL非空:NOT NULL
  3. AUTO_INCREMENT定義列為自增的屬性,一般用於主鍵,數值會自動加1。AUTO_INCREMENT要和主鍵一起使用,但是主鍵不一定要用AUTO_INCREMENT。
  4. PRIMARY KEY關鍵字用於定義列為主鍵。 另外可以使用多列來定義主鍵,列間以逗號分隔。
  5. UNIQUE KEY:唯一約束。保證記錄的唯一性。唯一約束的欄位可以為空值(NULL),但是如果儲存了多個NULL,最終只會保留1個。 每張表可以存在多個UNIQUE KEY。
  6. ENGINE 設定儲存引擎,CHARSET 設定編碼。
  7. DEFAULT:預設值。當插入記錄時,如果沒有明確為欄位賦值,則自動賦予預設值。

例項:

CREATE TABLE IF NOT EXISTS `user`(
   `user_id` INT UNSIGNED AUTO_INCREMENT,
   `user_title` VARCHAR(100) NOT NULL,
   `user_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `user_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

檢視資料表

檢視資料表列表

SHOW TABLES [FROM db_name] 
[LIKE 'pattern' | WHERE expr];

注意兩點:

  1. 若執行命令 USE db_name ,像得到db_name中的資料表列表,則 SHOW TABLES; 即可。
  2. 在使用SHOW TABLES FROM other_db_name;後,不會更改當前正在使用的資料庫,即不需要再USE db_name

檢視資料表的建立資訊/定義宣告

同“檢視資料表的儲存引擎/檢視資料表的字符集”:

SHOW CREATE TABLE table_name;

檢視資料表結構

SHOW COLUMNS FROM tb_name;

修改資料表

修改資料表的操作分為增、刪、改、查。

插入記錄/資料

INSERT [INTO] table_name [(columns_anme1,...)] 
VALUES(value1,...);

注意:如果資料是字元型必須使用單引號或者雙引號,如:"value"

查詢記錄/資料

SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M];
  • 查詢語句中你可以使用一個或者多個表,表之間使用逗號(,)分割,並使用WHERE語句來設定查詢條件。
  • SELECT 命令可以讀取一條或者多條記錄。
  • 你可以使用星號(*)來代替其他欄位,SELECT語句會返回表的所有欄位資料
  • 你可以使用 WHERE 語句來包含任何條件。
  • 你可以使用 LIMIT 屬性來設定返回的記錄數。
  • 你可以通過OFFSET指定SELECT語句開始查詢的資料偏移量。預設情況下偏移量為0。

修改記錄/資料


刪除記錄/資料

檢視索引狀態

SHOW INDEX FROM tbl_name [FROM db_name];

# 以網格顯示索引
SHOW INDEXES FROM tbl_name\G;

如果seq_in_index:後有值,說明建立了索引。

MySQL檢查長度

可用SQL語言:

SELECT LENGTH(fieldname) FROM tablename;
#例子
SELECT length(name_chn) FROM str_test;

詳細見 MySQL中字元的長度

區別大小寫字母

# 將查詢條件用binary()括起來
SELECT * FROM emp WHERE binary username= 'jack';

# 修改該欄位的collation 為 binary
ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;

# 建表時時候加以標識
CREAT TABLE emp(
   username varchar(20) binary
)

# 查詢區分大小寫,加上binary屬性
SELECT * FROM emp WHERE binary username='jack'
SELECT * FROM emp WHERE binary username='JACK'

更多見MySQL區別大小寫的問題