1. 程式人生 > >SQL基礎

SQL基礎

時也 語句 許可 更新 關鍵字 databases fin http condition

P25)SQL分類

DDL(Data Definition Languages)語句:數據定義語句,這些語句定義了不同的數據段、數據庫、表、列、索引等數據庫對象,常用的語句關鍵字主要包括create、drop、alter等。

DML(Data Manipulation Language)語句:數據操縱語句,用於添加、刪除、更新和查詢數據庫記錄,並檢查數據完整性,常用的語句關鍵字主要包括insert、delete、update和select等。

DCL(Data Control Language)語句:數據控制語句,用於控制不同數據段直接的許可和訪問級別的語句。這些語句定義了數據庫、表、字段、用戶的訪問權限和安全級別,主要的語句關鍵字包括grant、revoke等。

連接數據庫

技術分享

mysql代表客戶端命令,“-u”後面跟連接的數據庫用戶,“-p”表示需要輸入密碼。(似乎創建數據庫之前必須先要啟動服務,不然會報錯)

客戶端的連接ID,這個數字記錄了MySQL服務到目前為止的連接次數;每個新連接都會自動加1,本例中是4。


所有的DDl和DML(不包括SELECT)操作執行成功後都顯示“Query OK”,這裏理解為執行成功就可以了。

create DATABASE dbname: create database test1;

show databases;

use dbname: usr test1;

show tables;

drop database dbname: drop database test1;

(drop語句操作的結果都是顯示“0 rows affected”)

因為MySQL的表名是以目錄的形式存在於磁盤上的,所以表名的字符可以用任何目錄名允許的字符。表創建完畢後,如果需要查看一下表的定義,可以使用如下命令:

DESC tablename: desc emp;

雖然desc命令可以查看表定義,但是其輸出的信息還是不夠全面。如果需要查看創建表的SQL語句,可以使用:show create table emp\G

這個命令同時也展示了表的engine(存儲引擎)和charset(字符集)等信息。“\G”選項的含義是使得記錄能夠按照字段豎向排列,以便更好的顯示內容較長的記錄。


P29)修改表

修改表的列類型:ALTER TABLE tablename MODIFY [COLUMN] column_definition [FIRST | AFTER col_name];

增加表字段:ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST | AFTER col_name];

刪除表字段:ALTER TABLE tablename DROP [COLUMN] col_name;

字段改名:ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition [FIRST | AFTER col_name];

更改表名:ALTER TABLE tablename RENAME [TO] new_tablename;

P33)插入記錄

insert語句的values子句含可空字段、非空但是含默認值的字段、自增字段,可以不用在insert後的字段列表裏面出現,values後面只寫對應字段名稱的value。這些沒寫的字段可以自動設置為NULL、默認值、自增的下一個數字,這樣在某些情況寫可以大大縮短SQL語句的復雜性。

在MySQL中,insert語句還有一個很好的特性,可以一次性插入多條記錄,語法如下:

INSERT INTO tablename (field1, field2, ...,fieldn)

VALUES

(record1_value1, record1_value2, ..., record1_valuen),

(record2_value1, record2_value2, ..., record2_valuen),

...

(recordn_value1, recordn_value2, ..., recordn_valuen);

這個特性可以使得MySQL在插入大量記錄時,節省很多的網絡開銷,大大提高插入效率。

P35)更新記錄

在MySQL中,update命令可以同時更新多個表中數據,語法如下:

UPDATE t1, t2, ..., tn set t1.field1=expr1, tn.fieldn=exprn [WHERE CONDITION];

P36)刪除記錄

在MySQL中可以一次刪除多個表的數據,語法如下:

DELETE t1, t2, ..., tn FROM t1, t2, ..., tn [WHERE CONDITION];

如果from後使用別名,則delete後面也要用相應的別名,否則會提示語法錯誤。

P38)查詢記錄

有時需要將表中的記錄去掉重復後顯示出來,可以用distinct關鍵字來實現。

DESC和ASC是排序順序關鍵字,DESC表示按照字段進行降序排序,ASC則表示升序排序,如果不寫關鍵字默認是升序排列。ORDER BY後面可以跟多個不同的排序字段,並且每個排序字段可以有不同的排序順序。

如果排序字段的值一樣,則值相同的字段按照第二個排序字段進行排序,依次類推。如果只有一個排序字段,則這些字段相同(相等)的記錄將會無序排列。

對於排序後的記錄,如果希望只顯示一部分,而不是全部,這時就可以使用LIMIT關鍵字來實現,LIMIT的語法如下:

SELECT ...[LIMIT OFFSET_start, row_count]; 從偏移量開始共幾行

在默認情況下,起始偏移量為0(對應第1條記錄)。

limit經常和order by一起配合使用來進行記錄的分頁操作。

註:limit屬於MySQL拓展SQL92後的語法,在其他數據庫上並不能通用。

從大類上分,表連接分為內連接和外連接,他們之間最主要的區別是,內連接僅選出兩張表中互相匹配的記錄,而外連接會選出其他不匹配的記錄

外連接又分為左連接右連接,具體定義如下:

左連接:包含所有的左邊表中的記錄甚至是右邊表中沒有和它匹配的記錄。

右連接與左連接類似。

SELECT ... FROM t1 LEFT | RIGHT [OUTER | INNER] JOIN t2 on CONDITION;

如果不顯式寫OUTER或者INNER,那麽默認是外連接。通過WHERE子句實現的表連接是內連接。

P44)子查詢

用於子查詢的關鍵字主要包括in、not in、=、!=、exists、not exists等。

如果子查詢記錄數唯一,還可以用=代替in。

P46)記錄聯合

SELECT* FROM t1

UNION|UNION ALL

SELECT* FROM t2

...

UNION|UNION ALL

SELECT* FROM tn;

UNION和UNION ALL的主要區別是UNION ALL是把結果集直接合並在一起,而UNION是將UNION ALL後的結果進行一次DISTINCT,去除重復記錄後的結果。

P47)DCL語句

一些簡單的例子:

創建一個數據庫用戶zl,具有對sakila數據庫中所有表的SELECT/INSERT權限:

grant select, insert on sakila.* to [email protected] identified by ‘123‘;

在終端登錄:

mysql -uzl -p123

由於權限變更,需要將zl的權限變更,收回INSERT,只能對數據進行SELECT操作:

revoke insert on sakila.* from [email protected];


P48)幫助的使用

如果不知道幫助能夠提供些什麽,那麽可以用“? contents”命令來顯示所有可供查詢的分類。

對於列出的分類,可以使用“? 類別名稱”的方式對用戶感興趣的內容做進一步的查看。

快速查閱幫助

如果需要快速查閱某項語法時,可以使用關鍵字進行快速查閱。例如:

? show

? create table

SQL基礎