SQL基礎-----DDL


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(數據庫操縱語句)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM