1 (My)SQL入門
這里用了(My)SQL這樣的標題,目的是介紹標准SQL的同時,也將MySQL在標准SQL上的擴展一同介紹給讀者。
2:SQL分類
SQL語句主要可以划分為以下3個類別
.DDL(Data Definition Languages)語句:數據定義語言,這些語句定義了不同的數據段、數據庫、表、列、索引等數據庫對象。常用的語句關鍵字主要包括create、drop、alter等。
.DML(Data Manipulation Languages)語句:數據操縱語句,用於添加、刪除、更新和查詢數據庫記錄,並檢查數據完整性。常用的語句關鍵字主要包括insert、delete、update和select等。
.DCL(Data Control Language)語句:數據控制語句,用於控制不同數據段直接的許可和訪問級別的語句,這些語句定義了數據庫、表、字段、用戶的訪問權限和安全級別,主要的語句關鍵字包括grant、revoke等。
3:DDL語句
DDL是數據定於語言的縮寫,簡單來說,就是對數據庫內部的對象進行創建、刪除、修改等操作的語言。它和DML語言的最大區別是DML只是對表內部數據操作,而不涉及表的定義,結構的修改,更不會涉及其他對象。DDL語句更多的由數據庫管理員(DBA)使用,開發人員一般很少使用。
下面通過一些例子來介紹MySQL常用DDL語句的使用方法。
1:創建數據庫
啟動MySQL服務之后,輸入以下命令連接到MySQL服務器:
mysql -uroot -p
會出現下面的界面:
在以上命令行中,mysql代表客戶端命令,“-u”后面跟連接的數據庫用戶,“-p”表示需要輸入的密碼。
如果數據庫設置正常,並輸入了正確的密碼,將看到上面一段歡迎界面和一個“mysql>”提示符。在歡迎界面中說明了一下幾部分的內容。
.命令的結束符,用“;”或者“\g”結束。
.客戶端的連接ID,這個數字記錄了MySQL服務到目前為止的連接次數;每個新連接都會自動加1.
.MySQL服務器的版本,本例中是5.5.25。
.通過“help”或者“\h”命令來顯示幫助內容,通過“\c”命令來清除命令行buffer.
因為所有的數據庫都存儲在數據庫中,因此需要學習的第一個命令是創建數據庫。
創建數據庫的語法如下:
CREATE DATABASE dbname;
例如,創建數據庫test1,命令執行如下:
可以發現,執行完創建命令之后,下面有一行提示“Query OK,1 row affected (0.00 sec)”,這段提示可以分為3個部分,“Query OK”表述上面的命令執行成功。讀者可能奇怪,又不是執行查詢操作,為什么顯示查詢成功》其實這是MySQL的一個特點,所有的DDL和DML(不包括SELECT)操作執行成功后都顯示“Query OK”,這里理解為執行成功就可以了,“1 row affected (0.00 sec)”表示操作只影響了數據庫中一行的記錄,“0.00 sec”則記錄了操作執行的時間。
如果這個存在這個數據庫,系統會提示:
可以使用SHOW語句查看在服務器上當前存在什么數據庫
可以發現,在上面的列表中除了剛剛創建的test1外,還有另外4個數據庫,它們都是安裝mysql時系統自動創建的,其各自功能如下:
.information_schema:主要存儲了系統中的一些數據庫對象信息,比如用戶表信息、列信息,權限信息,字符集信息、分區信息等。
.cluster:存儲了系統的集群信息。
.mysql:存儲了系統的用戶權限信息。
.test:系統自動創建的測試數據庫,任何用戶都可以使用
在查看了系統中已有的數據庫后,可以用如下命令選擇要操作的數據庫:
USE dbname;
例如,選擇數據庫test1;
然后再用一下命令來查看test1數據庫中創建的所有數據表:
由於test1是剛創建的數據庫,還沒有表,所以顯示為空。命令行下面的"Empty set"表示操作的結果集為空,如果查看一下mysql數據庫里面的表,則可以得到以下信息:
2:刪除數據庫
刪除數據庫的語法很簡單,如下所示:
drop database dbname;
例如,要刪除test1數據庫可以使用一下語句:
可以發現,提示操作成功后, 后面卻顯示了 0 rows affected (0.08 sec),這個提示可以不用管它,在MySQL里面,drop語句操作的結果都是顯示“0 rows affected”;
注意:數據庫刪除后,下面的所有表數據都會全部刪除,所以刪除前一定要仔細檢查並做好相應備份.
3:創建表
在數據庫中創建一張表的基本語法如下:
CREATE TABLE tablename(
column_name_1 column_type_1 constraints,
column_name_2 column_type_2 constraints,
....
column_name_n column_type_n constraints
)
因為MySQL的表名是一目錄的形式存在於磁盤上的,所以表名的字符可以用任何目錄名允許的字符.column_name是列的名字;column_name 是列的名字;column_type 是列的數據類型;constraints是這個列的約束條件,在后面會講到。
例如,創建一個名稱為employee的表,表中包括ename(名字)、edate(雇佣日期)和 sal(薪水)3個字段,字段類型分別為
varchar(10)、date、int(2).
表創建完畢后,如果需要查看一下表的定義,可以使用如下命令
DESC tablename
例如查看employee表,將輸出以下信息:
雖然desc命令可以查看表定義,但是其輸出的信息還是不夠全面,為了得到更全面的表定義信息,有時就需要查看創建標的SQL語句,可以使用如下命令查看:
從上面創建表的SQL語句中,除了可以看到表定義以外,還可以看到標的engine(存儲引擎)和charset(字符集)等信息。“\
G”選項的含義是使得記錄能夠按照字段豎向排列,以便更好地顯示內容較長的記錄。
4:刪除表
表的刪除命令如下:
DROP TABLE tablename
例如,要刪除數據庫employee可以使用以下命令
5:修改表
對於已經創建好的表,尤其是已經有大量數據的表,如果需要做一些結構上的改變,可以先將表刪除(drop),然后再按照新的表定義重建表,這樣做沒有問題,但是必然要做一些額外的工作,比如數據的重新加載,而且,如果有服務在訪問表,也會對服務產生影響。
因此在大多數情況下,表結構的更改都使用alter table語句,以下是一些常用的命令。
(1):修改表類型,語法如下:
ALTER TABLE tablename MODIFY[COLUMN] column_definition[FIRST\AFTER col_name]
例如,修改表employee的ename字段定義,將varchar(10)改完varchar(20);
(2)增加表字段,語法如下
ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST\AFTER col_name]
例如,在表employee中新增加字段age,類型為int(3):
(3)刪除表字段,語法如下:
ALTER TABLE tablename DROP [COLUMN] col_name;
例如,將字段age刪除掉:
(4)字段改名,語法如下:
ALTER TABLE tablename CHANGE [COLUMN] Old_col_name column_definition [FIRST\AFTER col_name]
例如,將age改名為age1,同時修改字段類型為int(4);
注意:change和modify都可以修改表的定義,不同的是change后面需要些兩次列名,不方面,但是change的優點是可以修改列名稱,modify則不能。
(5)修改字段排列順序。
前面介紹的字段增加和修改語法(ADD/CHANGE/MODIFY)中,都有一個可選項first|after column_name,這個選項可以用來修改字段在表中的位置,ADD 增加的新字段默認是加在表的最后位置,而CHANGE/MODIFY默認都不會改變字段的位置。
例如,將新增的字段birthday date加在ename之后:
修改字段age1,將它放在最前面:
注意:CHANGE/FIRST|AFTER COLUMN 這些關鍵字都屬於MySQL在標准SQL上的擴展,在其他數據庫上不一定適用。
(6)更改表明,語法如下:
ALTER TABLE tablename RENAME [TO] new_tablename;
例如,將表employee改名為myemp,命令如下:
下一篇文章再介紹DML(數據庫操縱語句)