SQL簡單語法總結

SQL語句分類

  1. DDL(Data Definition Language): 數據定義語言,用來定義數據對象:庫,表,列等。
  2. DML(Data Manipulation Language): 數據操作語言,用來定義數據庫記錄(數據)。
  3. DCL(Data Control Language):數據控制語言,用來定義訪問權限和安全級別。
  4. DQL(Data Query Language):數據查詢語言,用來查詢記錄。

DDL使用

用途 操作
創建數據庫 create database [庫名]
查看數據庫 show databases
查看之前創建的數據庫的定義信息 show create database [庫名]
修改數據庫字符集 alter database [庫名] character set utf8
刪除 drop database[庫名]
查看當前使用的數據庫 select database()
切換數據庫 use [庫名]
創建表 create table [表名] (字段 字段類型(長度) 約束);
查看錶的字段信息 desc [表名]
增加一列 alter table [表名] add [列名] blob
修改一列 alter table [表名] modify [列名]
重命名錶 rename table [表名] to [新表名]
修改列名 alter table [表名] change [列名] [新列名] 字段類型(長度)
刪除一列 alter table [表名] drop [列名]
修改表的字符集 alter table [表名] character set [新字符集]

注:一般DDL並不怎麼使用,自我感覺不如圖形化界面修改方便。而且在一般情況下,數據庫以及表的結構不用去修改。

DML使用

用途 操作
插入 insert into [表名] (列名1,列名2…) values(列值1,列值2);
修改 update [表名] set 列名=列值 where 列名 =值
刪除 delete from [表名] where 列名=值
刪除 truncate table [表名]

注:雖然delete和truncate都是刪除表中數據,但是delete是保留表結構,刪除的數據還可以找回;truncate是將表刪除,然後再創建一個同樣的表,刪除數據不能找回,不過執行速度比delete快。

DCL使用

用途 操作
授權 GRANT
提交 COMMIT
回滾 ROLLBACK

注:commit是提交事務,事務就是一組要麼同時執行成功,要麼同時執行失敗的SQL語句,是數據庫操作的一個執行單元。rollback使用前需要設置保存點。

補充 事務隔離級別分爲四類:

  1. 髒讀:所有事務都可以看到其他未提交事務的執行結果。
  2. 不可重複讀:在同一事務中,同一select返回不同結果。
  3. 幻讀:在讀取某一範圍數據時,另一個事務在該範圍內插入了新行,當用戶再次讀取該範圍數據時,發現有新的“幻影”行。
  4. 可串行化:在每個讀的數據行上加共享鎖,但這個級別可能導致大量超時現象和鎖競爭。
    Mysql默認的是第三級別,Oracle默認是第二級。

DQL使用

用途 操作
條件查詢 where ( in / not in / is null / between and / is not null
模糊查詢 like ‘ [ _ 代表任意一個字母 %代表0或多個任意字符]’
去重 distinct
排序 order by [列名] (asc 正序 desc 倒序) 默認爲正序
分組 group by
過濾 having 跟在分組後對數據進行過濾
限制 limit [begin,end] 查詢從begin行到end行的數據

SQL優化

  1. 儘量避免在where子句中對字段進行null值判斷,避免在where字句中使用!=或<>操作符,避免在where子句中使用or來連接條件,否則將導致引擎放棄索引而進行全表索引。

  2. 應儘量避免全表掃描,應考慮在where及order by 涉及的列上建立索引。

  3. in和not in要慎用,否則會導致全表掃描。

  4. 儘量避免在where子句中對字段進行表達式操作。

  5. 儘量避免在where子句中對字段進行函數操作。

  6. 很多時候用exists代替in是一個好的選擇。

  7. 儘量使用數字型字段。

  8. 儘量使用varchar代替char。

  9. 任何地方都不要用*,不要返回用不到的任何字段。

  10. 儘量使用表變量代替臨時表。

  11. 避免頻繁創建和刪除臨時表。

  12. 在新建臨時表時,如果一次插入數據量很大,使用insert into代替create table;如果數據量不大,先create table 然後insert。

       								summed up by JiaMingcan
       								轉載請署名:JiaMingcan
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章