09、操作資料庫的神器,SQL語言
1、SQL簡介
對資料庫進行查詢和修改操作的語言叫做 SQL(Structured Query Language,結構化查詢語言)。SQL 語言是目前廣泛使用的關係資料庫標準語言,是各種資料庫互動方式的基礎。著名的大型商用資料庫 Oracle、DB2、Sybase、SQL Server,開源的資料庫 PostgreSQL、MySQL,甚至一些小型的資料庫 Access 等都支援 SQL。近些年蓬勃發展的 NoSQL 系統最初是宣稱不再需要 SQL 的,後來也不得不修正為 Not Only SQL,來擁抱 SQL。
1、SQL是什麼
SQL 是一種資料庫查詢和程式設計語言,用於存取資料以及查詢、更新和管理關係資料庫系統。與其他程式設計語言(如 C語言、Java 等)不同的是,SQL 由很少的關鍵字組成,每個 SQL 語句通過一個或多個關鍵字構成。
- SQL 具有如下優點:
- 一體化:SQL 集資料定義、資料操作和資料控制於一體,可以完成資料庫中的全部工作。
- 使用方式靈活:SQL 具有兩種使用方式,可以直接以命令方式互動使用;也可以嵌入使用,嵌入C、C++、Fortran、COBOL、Java 等語言中使用。
- 非過程化:只提操作要求,不必描述操作步驟,也不需要導航。使用時只需要告訴計算機“做什麼”,而不需要告訴它“怎麼做”,儲存路徑的選擇和操作的執行由資料庫管理系統自動完成。
- 語言簡潔、語法簡單:該語言的語句都是由描述性很強的英語單片語成,而且這些單詞的數目不多。
1)資料定義語言(Data Definition Language,DDL)
用來建立或刪除資料庫以及表等物件,主要包含以下幾種命令:
- DROP:刪除資料庫和表等物件
- CREATE:建立資料庫和表等物件
- ALTER:修改資料庫和表等物件的結構
2)資料操作語言(Data Manipulation Language,DML)
用來變更表中的記錄,主要包含以下幾種命令:
- SELECT:查詢表中的資料
- INSERT:向表中插入新資料
- UPDATE:更新表中的資料
- DELETE:刪除表中的資料
3)資料查詢語言(Data Query Language,DQL)
用來查詢表中的記錄,主要包含 SELECT 命令,來查詢表中的資料。
4)資料控制語言(Data Control Language,DCL)
用來確認或者取消對資料庫中的資料進行的變更。除此之外,還可以對資料庫中的使用者設定許可權。主要包含以下幾種命令:
- GRANT:賦予使用者操作許可權
- REVOKE:取消使用者的操作許可權
- COMMIT:確認對資料庫中的資料進行的變更
- ROLLBACK:取消對資料庫中的資料進行的變更
標準 SQL 是指符合國際標準的 SQL,而非某個資料庫廠商的 SQL 語法(如:Microsoft SQL Server 的 T-SQL,Oracle 的 PL/SQL,MySQL)。
標準 SQL 可以在任何資料庫中使用,而資料庫廠商的 SQL 只適合它們對應的資料庫,如 T-SQL 只適合 Microsoft SQL Server。
2、SQL的基本規則
對於 SQL 初學者,在寫 SQL 語句時,只要遵守下面幾個書寫規則,就可以避免很多錯誤。這些規則都非常簡單,下面我們來逐一介紹。
1)SQL 語句要以分號(;)或\G結尾
在 RDBMS (關係型資料庫)當中,SQL 語句是逐條執行的,一條 SQL 語句代表著資料庫的一個操作。我們通常在句子的句尾加註標點表示這句話結束,中文句子以句號。結尾,英文以點號.結尾,而 SQL 語句則使用英文分號;結尾。
2)SQL 語句不區分大小寫
SQL 不區分關鍵字的大小寫。例如,不管寫成 SELECT 還是 select,解釋都是一樣的。表名和列名也是如此。
提示:關鍵字是資料庫事先定義的,有特別意義的單詞。
雖然可以根據個人喜好選擇大寫還是小寫(或大小寫混雜),但為了理解起來更加容易。
- 關鍵字大寫
- 資料庫名、表名和列名等小寫
需要注意的是,插入到表中的資料是區分大小寫的。例如,向資料庫中插入單詞 Computer、COMPUTER 或 computer,這三個是不一樣的資料。
3)SQL的註釋
SQL語言的註釋是:--
mysql> -- show databases;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
2、MySQL資料庫
在SQL語言中,資料庫相當於資料夾。
1、檢視資料庫
- 檢視所有資料庫
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
7 rows in set (0.00 sec)
mysql>
- 檢視資料庫定義
mysql> show create database test01;
+----------+-------------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------------+
| test01 | CREATE DATABASE `test01` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+-------------------------------------------------------------------+
1 row in set (0.00 sec)
- 檢視正在使用的資料庫
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select database();
+------------+
| database() |
+------------+
| mysql |
+------------+
1 row in set (0.00 sec)
2、建立資料庫
- 釋義
- <資料庫名>:建立資料庫的名稱。MySQL 的資料儲存區將以目錄方式表示 MySQL 資料庫,因此資料庫名稱必須符合作業系統的資料夾命名規則,不能以數字開頭,儘量要有實際意義。注意在 MySQL 中不區分大小寫。
- IF NOT EXISTS:在建立資料庫之前進行判斷,只有該資料庫目前尚不存在時才能執行操作。此選項可以用來避免資料庫已經存在而重複建立的錯誤。
- [DEFAULT] CHARACTER SET:指定資料庫的字符集。指定字符集的目的是為了避免在資料庫中儲存的資料出現亂碼的情況。如果在建立資料庫時不指定字符集,那麼就使用系統的預設字符集。
- [DEFAULT] COLLATE:指定字符集的預設校對規則。
- 格式
CREATE DATABASE [IF NOT EXISTS] <資料庫名>
[[DEFAULT] CHARACTER SET <字符集名>]
[[DEFAULT] COLLATE <校對規則名>];
- 案例
mysql> CREATE DATABASE IF NOT EXISTS test01 CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db1 |
| mysql |
| performance_schema |
| sys |
| test |
| test01 |
+--------------------+
7 rows in set (0.00 sec)
3、修改資料庫
在 MySQL 資料庫中只能對資料庫使用的字符集和校對規則進行修改,資料庫的這些特性都儲存在 db.opt 檔案中。下面我們來介紹一下修改資料庫的基本操作。
注:字符集和校驗規則是儲存資料庫的一種方式。
在 MySQL 中,可以使用 ALTER DATABASE 來修改已經被建立或者存在的資料庫的相關引數。修改資料庫的語法格式為:
ALTER DATABASE [資料庫名] {
[ DEFAULT ] CHARACTER SET <字符集名> |
[ DEFAULT ] COLLATE <校對規則名>}
- 語法說明如下:
- ALTER DATABASE 用於更改資料庫的全域性特性。
- 使用 ALTER DATABASE 需要獲得資料庫 ALTER 許可權。
- 資料庫名稱可以忽略,此時語句對應於預設資料庫(最新指定資料庫)。
- CHARACTER SET 子句用於更改預設的資料庫字符集。
- 案例
mysql> show create database test01;
+----------+-------------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------------+
| test01 | CREATE DATABASE `test01` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+-------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> ALTER DATABASE test01
-> DEFAULT CHARACTER SET utf8
-> DEFAULT COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> show create database test01;
+----------+-----------------------------------------------------------------+
| Database | Create Database |
+----------+----------------------------