【MySQL】mysql數據庫操作指南

【MySQL】MySQL安裝版安裝流程

目錄

 1. MySQL數據類型

1.1 整數類型:

 1.2 浮點數類型和定點數類型:

 1.3 日期與時間類型:

1.3.1 YEAR類型

1.3.2 TIME類型

1.3.3 DATE類型

1.3.4 DATETIME類型

1.3.5 TIMESTAMP類型

1.4 字符串類型:

1.4.1 CHAR類型和VARCHAR類型

1.4.2 TEXT類型

1.4.3 ENUM類型

1.4.4  SET類型

1.5 二進制類型:

1.5.1 BINARY和VARBINARY類型

1.5.2 BIT類型

1.5.3 BLOB類型

1.6 BOOL和BOOLEAN

2. 操作數據庫

2.1 創建數據庫:

2.2 刪除數據庫:

2.3 數據庫的存儲引擎:

2.3.1 InnoDB存儲引擎:

2.3.2 MyISAM存儲引擎:

2.3.3 MEMORY存儲引擎

2.4 如何選擇存儲引擎:

3. 數據表的操作

3.1 創建表的方法:

3.2 查看錶結構的方法:

3.3 修改表的方法:

3.4 對數據表內數據進行處理:

3.5 刪除表的方法:

4. 索引

• 4.1 索引的含義和特點:

• 4.2 索引的分類:

• 4.3 如何設計索引:

• 4.4 如何創建索引:

• 4.5 如何刪除索引:

•4.6 索引、主鍵和惟一性的區別:

5. 視圖

5.1 視圖的含義和作用:

5.2 如何創建視圖:

5.3  如何修改視圖:

5.4 如何查看視圖:

5.5 如何刪除視圖:

6. 觸發器

6.1 觸發器的含義和作用:

6.2 如何創建觸發器:

6.3 如何查看觸發器:

6.4 如何刪除觸發器:

7.查找數據

7.1 查詢語句的基本語法

7.2 在單表上查詢數據

7.3 使用聚合函數查詢數據

7.4 多表上聯合查詢

7.5 子查詢

7.6 合併查詢結果

7.7 爲表和字段取別名

7.8 使用正則表達式查詢

8.插入、更新與刪除數據

8.1 插入新紀錄:

8.2 更新數據:

8.3 刪除記錄:

9. 存儲過程和函數

9.1 創建存儲過程           

9.2 創建存儲函數

9.3 變量的使用       

9.4 流程控制的使用

9.5 調用存儲過程和函數   

9.6 查看存儲過程和函數

9.7 修改存儲過程和函數    

9.8 刪除存儲過程和函數

 


 

 1. MySQL數據類型

數據類型是數據的一種屬性,其可以決定數據的存儲格式、有效範圍和相應的限制

1.1 整數類型:

 整數類型是數據庫中最基本的數據類型。標準SQL支持INTEGERSMALLINT這兩類整數類型MySQL數據庫除了支持這兩種類型以外,還擴展支持了TINYINTMEDIUMINTBIGINT 

 需要無符號時在定義時在類型盤加unsigned, 如 int unsigned,不加則認爲是有符號的。

 1.2 浮點數類型和定點數類型:

MySQL中使用浮點數類型和定點數類型來表示小數。浮點數類型包括單精度浮點數( FLOAT型)和雙精度浮點數( DOUBLE)。定點數類型就是DECIMAL型。

 在MySQL中,定點數以字符串形式存儲,因此,其精度比浮點數要高,而且浮點數會出現誤差,這是浮點數一直存在的缺陷。如果要對數據的精度要求比較高,還是選擇定點數decimal比較安全

 1.3 日期與時間類型:

日期與時間類型是爲了方便在數據庫中存儲日期和時間而設計的。 MySQL中有多種表示日期和時間的數據類型。其中YEAR類型表示年份; DATE類型表示日期; TIME類型表示時間; DATETIMETIMESTAMP表示日期和時間。

1.3.1 YEAR類型

個字節

4位字符串或者數字表示‘YYYY’或YYYY

範圍1901——2155

用兩位字符串表示  ‘00’-’69’,  ’70’-’99’

用兩位數字表示1-6970-990和‘0’的不同 ,‘0’爲2000年,0爲0000年

1.3.2 TIME類型

3個字節‘HH:MM:SS’    -‘838:59:59’----‘838:59:59’字符串

•‘D HH:MM:SS’    D天數0-34     D*24+HH 例如: 2 11:30:50

可以不按格式,可以 ‘HH:MM:SS’‘HH:MM’ , D HH , ‘D HH:MM, SS’ 等(用到:符號就需要用‘’的字符串類型)

‘HHMMSS’字符串和HHMMSS數字  0’0’相同

使用CURRENT_TIMENow()輸入系統當前時間

1.3.3 DATE類型

4個字節YYYY-MM-DD 1000-01-01  9999-12-31

‘YYYY-MM-DD’’YYYYMMDD’的格式任何標點都可以作爲標識符

YY-MM-DD‘YYMMDD格式,其中YY格式與YEAR類型相似

YYYYMMDDYYMMDD數字格式

CURRENT_DATENOW()當前日期

1.3.4 DATETIME類型

8個字節表示日期時間          ‘YYYY-MM-DD HH:MM:SS’ ‘YYYYMMDDHHMMSS’字符串格式

支持不嚴格的語法格式

‘YY-MM-DD HH:MM:SS’ ‘YYMMDDHHMMSS’

YYYYMMDDHHMMSS YYMMDDHHMMSS數字表示

使用NOW()輸入當前的系統日期時間

1.3.5 TIMESTAMP類型

4個字節‘YYYY-MM-DD HH:MM:SS’

1970-01-01 08:00:012038-01-19 11:14:07

TIMESTAMPDATETIME不同之處:

範圍較小

使用CURRENT_TIMESTAMP

輸入NULL

任何輸入時

根據時區顯示

 

1.4 字符串類型:

 

1.4.1 CHAR類型和VARCHAR類型

創建表的時候就指定了最大長度  CHAR(4)

CHAR是固定長度  0-255

VARCHAR是可變長度 0-65535   VARCHAR(100) 根據需要分配長度  字符串實際長度加1

VARCHAR有效節約系統空間

1.4.2 TEXT類型

特殊的字符串類型,只能保存字符數據

TINYTEXT, 0-255      +2

TEXT,     0-65535      +2

MEDIUMTEXT,   0-167772150   +3

LONGTEXT          0-4294967295 +4

1.4.3 ENUM類型

在創建表時,其取值範圍就以列表的形式指定了  65535個元素

插入的是編號

1.4.4  SET類型

形式與枚舉類型相似

區別:枚舉類型的值只能取一個元素,SET類型的值可以取列表中一個或多個元素的組合(最多64個元素組合)

插入記錄時,元素順序無關緊要,mysql自動按照定義的順序顯示

 

1.5 二進制類型:

 

1.5.1 BINARYVARBINARY類型

創建表的時候指定最大長度

BINARY長度固定,不足長度用’\0’補全

VARBINARY長度可變,0到最大長度之間 +1

1.5.2 BIT類型

創建表的時候指定最大長度   最大64

BIT(4) 最大能插入15  1111

查詢BIT類型字段時,要用函數BIN(字段名+0)將值轉爲二進制顯示

1.5.3 BLOB類型

種特殊的二進制類型,如存圖片

類似TEXT類型,4

1.6 BOOLBOOLEAN

•是否類型,等價爲TINYINT(1),長度爲1

 


 

2. 操作數據庫

 

2.1 創建數據庫:

        創建數據庫是指在數據庫系統中劃分一塊空間,用來存儲相應的數據。這是進行表操作的基礎,也是進行數據庫管理的基礎MySQL中,創建數據庫是通過SQL語句CREATE DATABASE實現的。其語法形式如下:

•CREATE DATABASE 數據庫名 ;

2.2 刪除數據庫:

        刪除數據庫是指在數據庫系統中刪除已經存在的數據庫。刪除數據庫之後,原來分配的空間將被收回。值得注意的是,刪除數據庫會刪除該數據庫中所有的表和所有數據。因此,應該特別小心MySQL中,刪除數據庫是通過SQL語句DROP DATABASE實現的。其語法形式如下:

•DROP DATABASE 數據庫名 ;

2.3 數據庫的存儲引擎:

MySQL中提到了存儲引擎的概念。簡而言之,存儲引擎就是指表的類型。數據庫的存儲引擎決定了表在計算機中的存儲方式。存儲引擎的內容和分類,如何選擇合適的存儲引擎

存儲引擎的概念是MySQL的特點,而且是一種插入式的存儲引擎概念。這決定了MySQL數據庫中的表可以用不同的方式存儲。用戶可以根據自己的不同要求,選擇不同的存儲方式、是否進行事務處理等。

查看MySQL數據庫支持的存儲引擎類型方法如下:

•SHOW ENGINES ;   

分佈式交易處理的XA規範

修改默認存儲引擎的方法:

關閉mysql服務: net stop mysql
找到mysql安裝目錄下的my.ini文件:
找到default-storage-engine=INNODB 改爲default-storage-engine=MYISAM
啓動mysql服務:net start mysql

2.3.1 InnoDB存儲引擎:

優缺點:

InnoDB存儲引擎中支持自動增長AUTO_INCREMENT。自動增長列的值不能爲空,且值必須惟一。 MySQL中規定自增列必須爲主鍵

支持外鍵FOREIGN KEY

表結構存儲在.frm中,數據放innodb_data_home_dir表空間,索引innodb_data_file_path

良好的事務管理、崩潰修復能力和併發控制

讀寫效率低,佔用的數據空間大

2.3.2 MyISAM存儲引擎:

         MyISAM存儲引擎的表存儲成三個文件。文件的名字與表名相同。擴展名包括frmMYD MYI。其中, frm爲擴展名的文件存儲表的結構; MYD爲擴展名的文件存儲數據; MYI爲擴展名的文件存儲索引。

佔用空間小,處理速度快

支持事物的完整性,併發性

2.3.3 MEMORY存儲引擎

        MEMORY存儲引擎是MySQL中的一類特殊的存儲引擎。其使用存儲在內存中的內容來創建表,而且所有數據也放在內存中。這些特性都與InooDB存儲引擎、 MyISAM存儲引擎不同

        每個基於MEMORY存儲引擎的表實際對應一個磁盤文件。該文件的文件名與表名相同,類型爲frm類型。該文件中只存儲表的結構。而其數據文件,都是存儲在內存中

可以快速處理

大小有限制於兩個參數max_rows,max_heap_table_size

容易丟失

2.4 如何選擇存儲引擎:


 

3. 數據表的操作

 

3.1 創建表的方法:

MySQL中,創建表是通過SQL語句CREATE TABLE實現的。其語法形式如下:

CREATE TABLE 表名 ( 字段名 數據類型 [完整性約束條件],字段名 數據類型 [完整性約束條件],......,字段名 數據類型[完整性約束條件]);

主鍵(PRIMARY KEY) 

外鍵(FOREIGN KEY)         CONSTRAINT 外鍵別名 FOREIGN KEY(屬性名 數據類型)REFERENCES 其他表(屬性名 數據類型)

不爲空(NOT NULL)                         屬性名 數據類型 NOT NULL

 唯一(UNIQUE)                                屬性名 數據類型 UNIQUE

自增長(AUTO_INCREMENT)          屬性名 數據類型 AUTO_INCREMENT

默認值(DEFAULT)                           屬性名 數據類型 DEFAULT 默認值

3.2 查看表結構的方法:

 

查看錶基本結構語句DESCRIBE:

MySQL中, DESCRIBE語句可以查看錶的基本定義。其中包括,字段名、字段數據類型、是否爲主鍵和默認值等。 DESCRIBE語句的語法形式如下:

DESCRIBE 表名;

 

查看錶詳細結構語句: 

MySQL中, SHOW CREATE TABLE語句可以查看表的詳細定義。該語句可以查看錶的字段名、字段的數據類型、完整性約束條件等信息。除此之外,還可以查看錶默認的存儲引擎和字符編碼。 SHOW CREATE TABLE語句的語法形式如下:

SHOW CREATE TABLE 表名;

3.3 修改表的方法:

 

修改表名 ALTER TABLE 舊錶名 RENAME [TO] 新表名 ;

修改字段的數據類型 ALTER TABLE 表名 MODIFY 屬性名 數據類型;

修改字段名  ALTER TABLE 表名 CHANGE 舊屬性名 新屬性名 新數據類型 ;

增加字段  ALTER TABLE 表名 ADD 屬性名1 數據類型 [完整性約束條件] [FIRST | AFTER 屬性名2] ;

刪除字段  ALTER TABLE 表名 DROP 屬性名 ;

修改字段的排列位置 ALTER TABLE 表名 MODIFY 屬性名1 數據類型 FIRST | AFTER 屬性名2;

更改表的存儲引擎  ALTER TABLE 表名 ENGINE=存儲引擎名 ;

刪除表的外鍵約束 ALTER TABLE 表名 DROP FOREIGN KEY 外鍵別名 ;

3.4 對數據表內數據進行處理:

插入數據insert:

insert into tableName ([字段名]) values(字段對應的值);

同時插入多條數據:

insert into 表名 values((...),(...),(...));

更新表中已有的數據:

update 表名 set 字段 1 = 新值 1,字段 2=新值 2,... where 條件表達式

(切記:where 條件不能輕易的丟掉!!!)

eg:update subject set name="XiaoMing",age=13 where id=10;

刪除數據:

語法:delete from 表名 [where 條件表達式]

(不加條件刪除則是全部刪除)

 

3.5 刪除表的方法:

DROP TABLE 表名;


 

4. 索引

  索引是一種特殊的數據庫結構, 可以用來快速查詢數據庫表中的特定記錄。索引是提高數據庫性能的重要方式MySQL中,所有的數據類型都可以被索引。 MySQL索引包括普通索引、惟一性索引、全文索引、單列索引、多列索引和空間索引等

• 4.1 索引的含義和特點:

 •索引是創建在表上的,是對數據庫表中一列或多列的值進行排序的一種結構。索引可以提高查詢的速度。索引有起明顯的優勢,也有其不可避免的缺點。

索引的優點: 查詢速度 依賴關係聯合查詢 分組和排序子句

索引的缺點: 創建和維護時間 佔用物理空間 增加刪除數據要動態維護 


• 4.2 索引的分類:

MySQL的索引包括普通索引、惟一性索引、全文索引、單列索引、多列索引和空間索引等
1.普通索引 無任何限制
2.惟一性索引  索引的值必唯一 主鍵
3.全文索引 MyISAM CHAR VARCHAR TEXT
4.單列索引 單個字段
5.多列索引 多個字段 第一個字段必使用
6.空間索引 MyISAM GEOMETRY POINT

 

• 4.3 如何設計索引:

 •爲了使索引的使用效率更高,在創建索引的時候必須考
慮在哪些字段上創建索引和創建什麼類型的索引。本小節將
向讀者介紹一些索引的設計原則。
1.選擇惟一性索引   如學生表的學號
2.爲經常需要排序、分組和聯合操作的字段建立索引  >   可以有效避免排序操作的時間
3.爲常作爲查詢條件的字段建立索引   >  該字段的查詢速度會影響整個表的查詢速度
4.限制索引的數目    >    重構和更新麻煩
5.儘量使用數據量少的索引  >   索引值越長越費時 char(100) char(10)
6.儘量使用前綴來索引   長文的前面幾個字符 TEXT BLOG à 前若干個字符
7.刪除不再使用或者很少使用的索引  >  消除索引對更新的影響 

 

• 4.4 如何創建索引:

創建表的時候創建索引:

CREATE TABLE 表名 (字段名 數據類型 [完整性約束條件],字段名 數據類型 [完整性約束條件],INDEX 索引名(字段名));
在已經存在的表上創建索引:

CREATE [ UNIQUE | FULLTEXT | SPATIAL ]INDEX 索引名 ON 表名 (字段名 [ (長度) ] [ ASC | DESC] );

用ALTER TABLE語句來創建索引:

ALTER TABLE 表名 ADD [ UNIQUE | FULLTEXT| SPATIAL ] INDEX 索引名(字段名 [ (長度) ] [ ASC | DESC]);


• 4.5 如何刪除索引:

DROP INDEX 索引名 ON 表名 ;

 

•4.6 索引、主鍵和惟一性的區別:

索引建立在一個或幾個字段上。建立索引後,表中的數據就按照索引的規則排列。這樣可以提高查詢速度。

主鍵是表中記錄的唯一標識,不同的記錄的主鍵值不同;建立主鍵時,系統會自動建立一個唯一性索引。

唯一性也是建立在表中一個或幾個字段上,其目的是爲了對於不同的記錄,具有唯一性的字段值是不同的。


 

5. 視圖

視圖是從一個或多個表中導出來的表,是一種虛擬存在的表。視圖就像一個窗口,通過這個窗口可以看到系統專門提供的數據。這樣,用戶可以不用看到整個數據庫表中的數據,而只關心對自己有用的數據。視圖可以使用戶的操作更方便,而且可以保障數據庫系統的安全性。

5.1 視圖的含義和作用:

含義:視圖是一種虛擬的表。視圖從數據庫中的一個或多個表導出來的表。視圖還可以從已經存在的視圖的基礎上定義。數據庫中只存放了視圖的定義,而並沒有存放視圖中的數據。這些數據存放在原來的表中。使用視圖查詢數據時,數據庫系統會從原來的表中取出對應的數據。因此,視圖中的數據是依賴於原來的表中的數據的。一旦表中的數據發生改變,顯示在視圖中的數據也會發生改變。沒有.MYD,.MYI這二個文件,一個是存放數據的,一個存放索引的。

作用:視圖是在原有的表或者視圖的基礎上重新定義的虛擬表,這可以從原有的表上選取對用戶有用的信息。那些對用戶沒有用,或者用戶沒有權限瞭解的信息,都可以直接屏蔽掉。這樣既可以使應用簡單化,也保證了系統的安全。視圖起着類似於篩選的作用。視圖的作用歸納爲如下幾點:
1.使操作簡單化
2.增加數據的安全性
3.提高表的邏輯獨立性

視圖和表的區別和聯繫:

視圖是按照SQL語句生成的一個虛擬的表

視圖不佔實際的物理空間,而表中的記錄佔用物理空間

建立和刪除視圖隻影響視圖本身,不會影響實際的記錄;而建立和刪除表會影響實際的記錄

聯繫:

視圖是在基本表之上建立的虛擬表,其字段和記錄都來自基本表,其依賴基本表而存在。

一個視圖可以對應一個或多個基本表或視圖

視圖是基本表的抽象,在邏輯意義上建立的新關係


5.2 如何創建視圖:

•CREATE [ALGORITHM = {UNDEFINED|MERGE| TEMPTABLE}] VIEW 視圖名 [(字段清單)]
AS SELECT語句 [WITH [CASCADED|LOCAL] CHECK OPTION];

with check option對於沒有where條件的視圖不起作用的

 


5.3  如何修改視圖:

CREATE OR REPLACE VIEW語句的語法形式如下:
CREATE OR REPLACE [ ALGORITHM = {
UNDEFINED | MERGE | TEMPTABLE } ]
VIEW 視圖名 [ ( 屬性清單 ) ]
AS SELECT語句 [ WITH [ CASCADED | LOCAL ] CHECK OPTION];

ALTER語句修改視圖的語法格式如下:

ALTER [ ALGORITHM = { UNDEFINED | MERGE | TEMPTABLE } ]

VIEW 視圖名 [ ( 屬性清單 ) ] AS SELECT語句

[ WITH [ CASCADED | LOCAL ] CHECK OPTION];
 


5.4 如何查看視圖:

查看視圖的基本定義:DESCRIBE 視圖名;

SHOW TABLE STATUS LIKE ‘視圖名’;

查看視圖的詳細定義:SHOW CREATE VIEW 視圖名;

查看所有視圖的定義:SELECT * FROM information_schema.views;
 

5.5 如何刪除視圖:

DROP VIEW [IF EXISTS] 視圖名列表 [RESTRICT | CASCADE];


 

6. 觸發器

觸發器TRIGGER)是由事件來觸發某個操作。這些事件包括INSERT語句、 UPDATE語句和DELETE語句。當數據庫系統執行這些事件時,就會激活觸發器執行相應的操作。MySQL5.0.2版本開始支持觸發器。

6.1 觸發器的含義和作用:

觸發器是由INSERTUPDATEDELETE等事件來觸發某種特定操作。滿足觸發器的觸發條件時,數據庫系統就會執行觸發器中定義的程序語句。這樣做可以保證某些操作之間的一致性。例如,當學生表中增加了一個學生的信息時,學生的總數就必須同時改變。可以在這裏創建一個觸發器,每次增加一個學生的記錄,就執行一次計算學生總數的操作。這樣就可以保證每次增加學生的記錄後,學生總數是與記錄數是一致的。觸發器觸發的執行語句可能只有一個,也可能有多個。


6.2 如何創建觸發器:

單表:CREATE TRIGGER 觸發器名 BEFORE|AFTER 觸發事件INSERTUPDATE DELETE ON 表名 FOR EACH ROW 執行語句

多表:CREATE TRIGGER 觸發器名 BEFORE | AFTER
觸發事件
INSERTUPDATE DELETE
ON 表名 FOR EACH ROW
BEGIN
執行語句列表           
(每個執行語句列表要以;結尾,所以需要DELIMITER    將終止符改爲其他的,之後再改回)
END


6.3 如何查看觸發器:

•SHOW TRIGGERS語句;

•查詢information_schema數據庫下的triggers表等。


6.4 如何刪除觸發器:

•DROP TRIGGER 觸發器名 ;


 

7.查找數據

7.1 查詢語句的基本語法

SELECT 屬性列表 FROM 表名和視圖列表
[ WHERE 條件表達式1 ]
[ GROUP BY 屬性名1 [ HAVING 條件表達式2 ] ]
[ ORDER BY 屬性名2 [ ASC | DESC ] ]


7.2 在單表上查詢數據

查詢所有字段:1.列出表的所有字段         2.使用 “ * ” 查詢所有字段

查詢指定字段

查詢指定記錄:WHERE 條件表達式

帶IN關鍵字的查詢:[ NOT ] IN ( 元素1, 元素2, …, 元素n )

帶BETWEEN AND的範圍查詢:[ NOT ] BETWEEN 取值1 AND 取值2

LIKE字符匹配查詢[ NOT ] LIKE ‘字符串’    完全匹配時和=號一樣       兩個通配字符%,_,

查詢空值:IS [ NOT ] NULL

帶AND的多條件查詢:條件表達式1 AND 條件表達式2 [ … AND 條件表達式n ]

其中, AND可以連接兩個條件表達式。而且,可以同時使用多個AND關鍵字,這樣可以連接更多的條件表達式。
OR的多條件查詢:條件表達式1 OR 條件表達式2 [ …OR 條件表達式n ]
其中, OR可以用來連接兩個條件表達式。而且,可以同時使用多個OR關鍵字,這樣可以連接更多的條件表達式。

查詢結果不重複:DISTINCT

對查詢結果排序:ORDER BY 屬性名 [ ASC | DESC ]    默認升序

分組查詢:GROUP BY 屬性名 [ HAVING 條件表達式 ] [ WITH ROLLUP ]
1.單獨使用GROUP BY關鍵字來分組
2GROUP BY關鍵字與GROUP_CONCAT()函數一起使用 (連接函數)
3GROUP BY關鍵字與集合函數一起使用
4GROUP BY關鍵與HAVING一起使用
5.按多個字段進行分組
6GROUP BY關鍵與WITH ROLLUP一起使用

LIMIT限制查詢結果的數量:1.不指定初始位置  LIMIT 3     2.指定初始位置    LIMIT 0,2
 


7.3 使用聚合函數查詢數據

COUNT()SUM()AVG()MAX()MIN()

GROUP BY關鍵字通常需要與集合函數一起使用

 


7.4 多表上聯合查詢

內連接查詢:內連接查詢可以查詢兩個或兩個以上的表。當兩個表中存在表示相同意義的字段時,可以通過該字段來連接這兩個表。當該字段的值相等就查詢出該記錄。

外連接查詢當該字段取值相等時可以查詢出該記錄。而且,該字段取值不相等的記錄也可以查詢出來。SELECT 屬性名列表 FROM 表名1 LEFT | RIGHT JOIN 表名2 ON 表名1.屬性名1=表名2.屬性名2 ;
1.左連接查詢     2.右連接查詢


複合條件連接查詢:如:(SELECT num,name,employee.d_id,age,sex,d_name,function FROM employee, department WHERE employee.d_id=department.d_id AND age>24;
 


7.5 子查詢

帶IN關鍵字的子查詢:如(SELECT * FROM employee WHERE d_id NOT IN (SELECT d_id FROM department);

帶比較運算符的子查詢

帶EXISTS關鍵字的子查詢:使用EXISTS關鍵字時,內層查詢語句不返回查詢的記錄。而是返回一個真假值。如果內層查詢語句查詢到滿足條件的記錄,就返回一個真值True)。否則,將返回一個假(False)。當返回的值是真值時,外層查詢語句將進行查詢。當返回值是假值時,外層查詢語句不進行查詢或者查詢不出任何記錄。

如: SELECT * FROM employee WHERE EXISTS (SELECT d_name FROM department WHERE d_id=1005);

帶ANY關鍵字的子查詢:ANY關鍵字表示滿足其中任一條件

帶ALL關鍵字的子查詢:ALL關鍵字表示滿足所有條件。如:SELECT * FROM computer_stu WHERE score>=ALL(SELECT score FROM scholarship);


7.6 合併查詢結果

需要將幾個SELECT語句查詢出來的結果合併起來顯示,使用UNION關鍵字時,數據庫系統會將所有的查詢結果合併到一起,然後去除掉相同的記錄。而UNION ALL關鍵字則只是簡單的合併到一起。

SELECT語句1
UNION | UNION ALL
SELECT語句2
UNION | UNION ALL ….
SELECT語句


7.7 爲表和字段取別名

爲表取別名:表名 表的別名

爲字段取別名:屬性名 [AS] 別名


7.8 使用正則表達式查詢

正則表達式的查詢能力比通配字符的查詢能力更強大,而且更加的靈活。

正則表達式可以應用於非常複雜查詢MySQL中,使用REGEXP關鍵字來匹配查詢正則表達式。其基本形式如下:
屬性名 REGEXP '匹配方式'

特定字符或字符串開頭的記錄:如從info表name字段中查詢以字母“L”開頭的記錄。 SQL代碼如下:
SELECT * FROM info WHERE name REGEXP '^L';

特定字符或字符串結尾的記錄:如從infoname字段中查詢以字母“c結尾的記錄。 SQL代碼如下:
SELECT * FROM info WHERE name REGEXP 'c$';


替代字符串中的任意一個字符:可以用“.”來替代字符串中任意一個字符,包括回車和換行。 如從infoname字段中查詢以字母“L”開頭,以字母“y”結尾,中間有兩個任意字符的記錄。 SQL代碼如下:
SELECT * FROM info WHERE name REGEXP '^L..y$';
 

匹配指定字符中的任意一個:使用方括號[])可以將需要查詢字符組成一個字符集。只要記錄中包含方括號中的任意字符,該記錄將會被查詢出來。例如,通過“[abc]”可以查詢包含abc這三個字母中任何一個的記錄。

匹配指定字符以外的字符:使用“[^字符集合]”可以匹配指定字符以外的字符。

如從infoname字段中查詢包含aw字母和數字以外的字符的記錄。 SQL代碼如下:
SELECT * FROM info WHERE name REGEXP '[^a-w0-9]';

匹配指定字符串:

正則表達式可以匹配字符串。當表中的記錄包含這個字符串時,就可以將該記錄查詢出來。如果指定多個字符串時,需要用符號“|”隔開。只要匹配這些字符串中的任意一個即

‘ac|bb|ca’

使用“*”和“+”來匹配多個字符:

正則表達式中,“*”和“+”都可以匹配多個該符號之前的字符。但是,“+”至少表示一個字符,而“*”可以表示零個字符。
‘a*c’      ca可以出現0次

‘a+c’     ca至少出現1次

使用{M}或者{M,N}來指定字符串連續出現的次數:

正則表達式中,“字符串{M}”表示字符串連續出現M;“字符串{M,N}”表示字符串聯連續出現至少M次,最多N次。例如,“ab{2}”表示字符串“ab”必須連續出現兩次。
ab{2,4}”表示字符串“ab”連續出現至少兩次,最多四次。


 

8.插入、更新與刪除數據

8.1 插入新紀錄:

爲表的所有字段插入數據:1. INSERT語句中不指定具體的字段名  2INSERT語句中列出所有字段
 

爲表的指定字段插入數據:

INSERT INTO 表名(屬性1, 屬性2, … , 屬性m)
VALUES(值1,值2, …, 值m);

同時插入多條記錄:

INSERT INTO 表名 [ (屬性列表) ]
VALUES(取值列表1),(取值列表2)
… ,
(取值列表n) ;

將查詢結果插入到表中:

INSERT INTO 表名1 (屬性列表1)
SELECT 屬性列表2 FROM 表名2 WHERE 條件表達式;

 


8.2 更新數據:

UPDATE 表名
SET 屬性名1=取值1, 屬性名2=取值2,
…, 屬性名n=取值n   

WHERE 條件表達式; 


8.3 刪除記錄:

DELETE FROM 表名 [WHERE 條件表式] ;



9. 存儲過程和函數

 

9.1 創建存儲過程           

CREATE PROCEDURE sp_name
([proc_parameter[,...]])
[characteristic ...] routine_body
[IN|OUT|INOUT] para TYPE

characteristic:
{CONTAINS SQL|NO SQL| READS SQL DATA |MODIFIES SQL DATA}

|SQL SECURITY { DEFINER | INVOKER } | COMMENT ‘string'

 

9.2 創建存儲函數

CREATE FUNCTION sp_name ([func_parameter[,...]])
RETURNS type
[characteristic ...] routine_body

 

 

9.3 變量的使用       

存儲過程和函數中可以定義和使用變量。用戶可以使用DECLARE關鍵字來定義變量。然後可以爲變量賦值。這些變量的作用範圍是BEGIN…END程序段中
1.定義變量

DECLARE my_x INT DEFAULT 12;
2.爲變量賦值
SET my_x=60;

SELECT d_id INTO my_x FROM employee WHERE num= 2;

 

9.4 流程控制的使用

存儲過程和存儲函數中可以使用流程控制來控制語句的執行MySQL中可以使用IF語句、 CASE語句、 LOOP語句、 LEAVE語句、 ITERATE語句、 REPEAT語句、 WHILE語句來進行流程控制。
1IF…ELSE語句
2CASE語句
3LOOP語句
4LEAVE語句
5ITERATE語句
6REPEAT語句
7WHILE語句
 

 

9.5 調用存儲過程和函數   

 調用存儲過程:CALL sp_name([parameter[,…]]) ;
 

9.6 查看存儲過程和函數

SHOW STATUS語句:

SHOW { PROCEDURE | FUNCTION } STATUS [ LIKE ' pattern ' ] ;
  其中,“PROCEDURE”參數表示查詢存儲過程;“FUNCTION”參數表示查詢存儲函數;“LIKE 'pattern'”參數用來匹配存儲過程或函數的名稱。
 

SHOW CREATE語句:

SHOW CREATE { PROCEDURE | FUNCTION } sp_name ;
    其中,“PROCEDURE”參數表示查詢存儲過程;“FUNCTION”參數表示查詢存儲函數;“sp_name參數表示存儲過程或函數的名稱。
 

從information_schema.Routines表中查看:

SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME=‘sp_name’;
 其中ROUTINE_NAME字段中存儲的是存儲過程和函數的名稱;“sp_name參數表示存儲過程或函數的名稱。
 

 

9.7 修改存儲過程和函數    

 修改存儲過程和函數是指修改已經定義好的存儲過程和函數MySQL中通過ALTER PROCEDURE語句來修改存儲過程。通過ALTER FUNCTION語句來修改存儲函數MySQL中修改存儲過程和函數的語句的語法形式如下

ALTER {PROCEDURE | FUNCTION} sp_name
[characteristic ...]

   characteristic:
{CONTAINS SQL|NO SQL| READS SQL DATA |MODIFIES SQL DATA}

|SQL SECURITY { DEFINER | INVOKER } | COMMENT ’string'

 

9.8 刪除存儲過程和函數

DROP { PROCEDURE| FUNCTION } sp_name;
 


 

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