1. 程式人生 > >讀MYSQL必知必會的總結

讀MYSQL必知必會的總結

pda 視圖 撤銷 參數 正則表達式 更新 表現 into 解鎖

看到了mysql必知必會

總結了以下幾個以後很有可能用到的知識點:

1.在檢索多列的時候,需要再列名之間用“,”進行分開,最後的列名後面不加。

select id,uid,name from 表名; select* form 表名 代表檢索所有的列

2.在檢索指定從第幾行開始後的幾行

select id from 表名 limit 3,4;3行開始的後4行,要註意的是檢測出來的第一行為0.

3.可以用 order by 語句對檢測數來的進行排序,因為數據會受到修改編輯的影響導致順序錯亂。

4.同理,行的檢索。在列 select id,uid,name from 表名 order by name ,uid

進行排序(接下來就是對order by的延伸,比如指定關鍵字進行排序,用DESC

5.利用我們在TP中常用的whereselect id,name from 表名 where name XX

只會返回名字XX的數據,而且只會返回id name兩列,where語句的大小於比較使用的還是 > < = (where列名is null可以用於檢測該列數據為空的數據)

6.當使用where進行條件篩選的時候,可以用AND進行刪選條件的增加。OR的話是讓MYSQL檢索匹配任一條件進行。AND的優先級高於OR,在進行組合的時候需要註意。

7.where 可以用In來進行數據過濾:where

條件 in 1,2(一般是指範圍);類似於OR的功能。NOT可放在IN進行否定的條件篩選。

8.通配符,用於查詢未知範圍或數值的的數據。需要用到LIKE進行操作。

:where uid like “ab%” 就會出現ab123 ab222等等;註意點是數據搜索的時候是最好尾部加一個%避免空格的影響。”_”和”%”類似,但是”_”只能對一個字符進行篩選。

9.正則表達式 where id REGEXP “.000”將解鎖出1000.2000.3000......

如果我們的id數據有10002000

(1)where id LIKE 1000,返回為空;(2where id REGEXP 1000,返回1000

10.OR在正則中表現形式為

where id REGEXP”1000|2000”

匹配字符 where id REGEXP “[123]people”

如果數據存在,id輸出1 people;2 people;3 people

[]可以用來[1-5][a-c]

  1. 比如我們想找存在.的數據,需要進行\\.來進行操作,稱之為前導。通配符類詳情P58

12.定位符 ^ ,可以規定搜索匹配開始的位置。5^[0-9] 0-100中,會搜索出50-59

13.字符串的拼接:Concat()函數可以用來拼接兩個列(這個是MYSQL特別之處,其他SQL可能使用”+”或者是”||” Concat(name,” (“,uid,”)”) 輸出::名字 (10);註意名字和(10)之前有空格!!!

14.函數。RTrim()去除列值右邊的空格;Upper()將文本轉為大寫,數據輸出的時候會出現兩次。語法 Upper(uid) AS uid_upcase 1.AC ab 2.AC AB

有個神奇的函數 Soundex()函數可以匹配所有發音類似的名字,時間的函數詳看P71,數值處理P74

15.聚集函數 AVG() COUNT(確定表中行的數目或符合特定條件的行的數目) MAX() MIN() SUM()

DISTINCT參數與ALL不同,只會選擇輸出不同的值,ALL為默認行為。

16.分組數據,使用GROUP BY指示MySQL分組的數據,將對選出的組進行聚集,不會對整個結果進行。HAVING可以代替WHERE,區別是HAVING可以過濾篩選分組,WHERE只能過濾篩選行。註:在使用GROUP BY會出現一定順序問題,需要使用ORDER BY對其進行重新排序。

17.子查詢。顧名思義,就是在查詢內再套一層查詢,但是子查詢優先級高。

18.聯結:關系表:利用主鍵和外鍵。主鍵為唯一標識,外鍵包含另一個表的主鍵值,定義了兩個表之間的關系。

19.組合查詢。我們可以用UNION將兩句SQL語句進行組合查詢,且輸出組合原單個查詢的結果集。UNION在查詢的時候會自動去除重復的行。

20.全文本搜索。可以使用 Match()Against()執行全文本的搜索,Match()指定被搜索的列,Against()指定要使用的搜索表達式

21.布爾文本搜索。操作符在P128,簡單來說,就是在檢索的時候增加條件。

-------------------------------------------------------------------------------------------------------------------

22.數據插入。INSERT為數據插入,SELECT為數據查詢。

基本語法INSERT INTO 表名

VALUSE(按列所需要的數據進行,註,由於第一列為自增,所以填NULL

NSERT插入多行的時候用”;”區分。

23.INSERT SELECT就是插入檢索出的數據。基本語法:

INSERT INTO 表名1idname) SELECT id,name FROM 表名2

註意的是,MYSQL關心的是位置而不是列名。

----------------------------------------------------------------------------------------------------------------------

24.更新表中特定的行UPDATE ; 刪除數據DELETE

基本語法 UPDATE 表名 SET name=”fjf ” WHERE id = 1;

DELETE 表名 SET name=”fjf ” WHERE id = 1;

25.NULL的使用。 CREATE TABLE(創建表)

CREATE TABLE 表名(

id int NOT NULL,

name int NOT NULL,

content text NULL,

PRIMARY KEY (order_num)

ENGINE=InnoDB;

表示idname字段不能為空,content字段可以為空(主鍵是默認不能為NULL的)

可以使用DEFAULT來指定默認值,在NOT NULL的條件下。

content text NOT NULL DEFAULT 123456789 ,

26.AUTO_INCREMENT確定了哪一個字段可以成為主鍵。每個表只能允許存在一個。

27.ENGINE=InnoDB;為指定引擎,如果省略這個,會使用默認引擎。MYSQL使用多個引擎處理。(P151)註:外鍵不能跨引擎使用。

28.ALTER TABLE:用於定義外鍵,可以使眾多表一起修改列的信息

DROP TABLE:用於刪除表

RENAME TABLE:用於重命名表

----------------------------------------------------------------------------------------------------------------------

29.使用視圖。可以將查詢包裝成一個虛擬表。虛擬表不包含表中應有的任何列或者數據,只包含SQL語句。類似於封裝,把需要的東西封裝好,我們只需要知道調用的時候輸入什麽就可以了。

註:

1)視圖表唯一的名稱;

2)視圖表可以使用ORDER BY,但是SELECT出來的數據含有ORDER BY,則視圖中的ORDER BY將會被覆蓋掉;

3)視圖表不能索引,也不會有關聯的觸發器和默認值。

4)視圖表可以和表在一起使用,如編寫一條聯結表和視圖的SELECT語句。

30.視圖用CREATE VIEW語句創建。使用SHOW CREATE VIEW viewname查看創建視圖的語句。

使用DROP可以刪除視頻,其語法為DROP VIEW viewname

更新視圖的時候,可以先用DROP再用CREATE,也可以直接使用CREATE OR REPLACE VIEW(如果視圖不存在,第二條語句會創建一個視圖;如果更新的視圖存在,第二條語句會替換原有視圖)

31.視圖的更新。可以使用INSERT,UPDATEDELETE進行更新。

----------------------------------------------------------------------------------------------------------------------

32.存儲過程。

1MYSQL的存儲語句為CALL。例:CALL productpricing@hight@low@average;執行了名為productpricing的存儲過程。 註:所有MYSQL變量都必須@開始

2)在創建存儲過程中:

CREATE PORCEDURE productpricing()

BEGIN

SELECT Avg(prod_price) AS priceaverage

FROM products;

END;

可以使用BEGINEND來限定存儲的過程體。

3CALL productpricing()執行剛創建的存儲過程並顯示返回的結果。存儲實際上是一種函數,所以在存儲過程名後需要加()

33.刪除存儲過程。 DROP PROCEDURE productpricing

刪除的時候productpricing後面沒有加()。為了防止指定的過程不存在而報錯,可以使用

DROP PROCEDURE IF EXISTS,即指定的過程存在才刪除。

34.檢查存儲過程。SHOW CREATE PROCEDURE。獲取建表詳情:SHOW PROCEDURE STATUS

----------------------------------------------------------------------------------------------------------------------

35.遊標。遊標是一個存儲在MYSQL服務器上的數據庫查詢,是被語句檢索出來的結果集。遊標可以用DECLARE語句創建

例:CREATE PROCEDURE 過程名()

BEGIN

DECLARE 遊標名 CURSOR

FOR

SELECT 字段 FROM 表名;

END;

註:遊標在存儲完成之後會消失。

36.遊標打開。由OPEN CURSOR語句打開。聲明遊標之後,再次打開OPEN+遊標名;關閉 CLOSE+遊標名,釋放遊標使用的資源和內存。如果不用CLOSE,當END語句會自動關閉。

遊標的數據可以使用FETCH進行訪問

----------------------------------------------------------------------------------------------------------------------

37.使用ROLLBACK可以撤銷MYSQL語句;COMMIT可以確保明確提交。

38.保留點。設置:SAVEPOINT 標點名。 回退保留點ROLLBACK TO 標點名。

39.SET autocommit=0;可以讓數據庫不會自動提交更改。不管COMMIT語句,直到autocommit被設置為真時。

40.使用字符集和校對順序。SHOW CHARACTER SET。顯示所有可用的字符集以及每個字符集的描述和默認校對。SHOW COLLATION,顯示所有可用的校對,以及他們使用的字符集。

41.CREATE USER創建新用戶賬號

CREATE USER 用戶名 IDENTIFIED BY 口令;RENME UESR aaa TO bbb;名字從aaa變成bbb

DROP USER 用戶名,刪除了用戶賬號。

SHOW GRANTS FOR,設置賬號的權限,可以登入,但是無法修改數據。

更好的是使用GRANT語句來設置權限。需要賦予的權限,賦予權限的數據庫或者表,用戶名。

GRANT SELECT ON 數據庫名.*(這個數據庫所有表) TO 用戶名:表示用戶在這個數據庫上所有表只能執行查詢的功能。

42.REVOKE為撤銷賦予的權限。

REVOKE SELECT ON 數據庫名.*(這個數據庫所有表) TO 用戶名;撤銷的時候,權限必須在,否則容易出錯。

43.GRANTREVOKE可以在幾個層次上使用

這個服務器,使用GRANT/REVOKE ALL ;整個數據庫 GRANT/REVOKE ON 數據庫名.*

特定的表 GRANT/REVOKE ON 數據庫名.表名 ; 特定的列 ; 特定的存儲過程。P202-203

44.SET PASSWORD FOR 用戶名 = Password(‘新口令’)

SET PASSWORD = Password(‘新口令’);設置自己的密碼

45.mysqldump將所有數據庫內容到某個外部的文件。mysqlhotcopy從一個數據庫復制所有數據。

BACKUP TABLE或者SELECT INTO OUTFILE轉儲所有數據到某個外部文件。這兩個語句都接受要創建的系統文件名,此系統文件必須不存在,否則會出錯。數據可以用RESTORE TABLE來復原。

46.ANALYZE TABLE檢查表鍵是否正確;CHECK TABLE用來針對許多問題對表進行檢查。CHANGED檢查最後一次檢查以來改動的表。MEDIUM檢查所有被刪除的鏈接並進行鍵檢驗。QUICK只進行快速掃描。

47.日誌文件。

錯誤日誌:通常命名為hostname.err,位於data目錄中,該日誌可以使用--log-error命令行選項更改.

查詢日誌。他記錄MYSQL所有活動,通常命名為hostname.log,位於data目錄中,該日誌可以使用--log命令行選項更改.

二進制日誌:記錄更新過的數據,或者可能更新過數據的所有語句。通常命名為hostname.bin,位於data目錄中,該日誌可以使用--log-bin命令行選項更改.

緩慢插敘日誌。這個日誌記錄執行緩慢的任何查詢。可以優化數據庫。通常命名為hostname-slow.log,位於data目錄中,該日誌可以使用--log-slow-queries命令行選項更改.

讀MYSQL必知必會的總結