1. 程式人生 > >Mysql的sql語句操作

Mysql的sql語句操作

一、資料庫的相關操作

1. 建立資料庫
1)create database db_name
2. 刪除資料庫
1)drop database db_name
3. 修改資料庫相關資訊
1)修改指定資料庫的編碼方式				alter database db_name character set charset  
4. 查詢資料庫相關資訊
1)得到當前開啟的資料庫					select database()		                            

2)檢視指定資料庫的詳細資訊				show create database db_name                         

3)檢視當前伺服器下的全部資料庫 		    show databases;   
5. 其他
1)開啟指定資料庫  						use db_name	

二、資料表相關操作

1. 建立表
1)建立表格式

	create table table_name(
		欄位名 欄位型別 [完整性約束條件]
		欄位名 欄位型別 [完整性約束條件]
		...
	)engine=儲存引擎 charset=編碼方式;	

2)完整性約束條件

	(1)not null 			非空約束

	(2)default            預設值

	(3)primary key        主鍵

	(4)auto_increment     自動增長,只能用於數值列

	(5)unique_key         唯一性   

	(6)foreign key        外來鍵約束

2. 刪除表
1)drop table talbe_name
3. 修改表結構
1)新增			

	(1)新增欄位  							alter table tb_name add 欄位名 欄位型別 [完整性約束條件]

	(2)新增預設值         				    alter talbe tb_name alter 欄位名稱 set default 預設值

	(3)新增主鍵  							alter talbe tb_name add primary key(欄位名)

	(4)新增唯一  							alter table tb_name add unique| [index_name](欄位名)

2)刪除

	(1)刪除欄位           				    alter table tb_name drop 欄位名

	(2)刪除預設值         				    alter table tb_name alter 欄位名 drop default

	(3)刪除主鍵                            alter table tb_name drop primary key

	(4)刪除唯一                            alter table drop index index_name

3)修改

	(1)修改欄位型別、欄位屬性    			alter table tb_name modify 欄位名 欄位型別[欄位屬性]

	(2)修改欄位名、欄位型別、欄位屬性        alter table tb_name change 原欄位名稱 新欄位名稱 欄位型別 欄位屬性

	(3)修改資料庫表名稱                     alter table tb_name rename to new_talbe_name / rename table tb_name to new_table_name

	(4)修改auto_increment的值              alter table tb_name auto_increment=值 

4)檢視

	(1)檢視當前資料庫下已有資料表            show tables

	(2)查看錶詳細資訊                       show create table tb_name    

	(3)查看錶結構                           desc tb_name / decsribe tb_name / show columns from tb_name  

三、資料操作

1. 新增
1)指定欄位插入                               insert into tb_name(欄位名1,欄位名2, ...) values(值1,值2, ...) 

2)不指定欄位名稱插入(按建立表的欄位順序)      insert into tb_name (值1,值2,, ...)

3)insert ... set 形式                        insert tb_name set 欄位名=值, ...

4)insert ... select 形式                     insert tb_name1(欄位名1,欄位名2, ...) select 欄位名1,欄位名2,... from tb_name2
2. 刪除
1)刪除所有記錄                               delete from tb_name 

2)刪除指定記錄                               delete from tb_name [where 條件句]

3)徹底情況資料庫表(重置auto_increment的值)   truncate tb_name

3. 修改
1)修改所有記錄                               update tb_name set 欄位名=值

2)修改指定記錄的資料                         update tb_name set 欄位名=值 [where條件]
4. 查詢
1)簡單查詢

	(1)查詢所有記錄                         select * from tb_name

	(2)查詢指定欄位記錄                     select 欄位1,欄位2,... from tb_name

	(3)庫名.表名                            select * from db_name.tb_name

	(4)給欄位起別名                         select 欄位名 [as] 欄位別名 from tb_name

	(5)給表起別名                           select * from tb_name [as] 表別名

2)where條件

	(1)比較運算子                           =, >, <, <=, >=,!=, <>

	(2)是否為空                             is null / is not null

	(3)指定集合                             in () / not in()	

	(4)邏輯運算子                           and / or

	(5)匹配字元                             like / not like (%任意長度  _任意一個)

3)group by	(一般配合聚合函式使用)

	(1)count()                              統計記錄總數

	(2)sum()                                求和

	(3)max()                                最大值

	(4)min()                                最小值

	(5)avg()                                求平均值

4) order by

	(1)asc                                  升序排列,預設

	(2)desc                                 降序排列	

5)多表查詢

	(1)笛卡爾形式

	(2)內連線形式                           select 欄位1, ... from tb_name1 inner join tb_name2 on 條件 (兩個表=也屬於內連線)

	(3)左外連線的形式                        select 欄位1,	... from tb_name1 left [outer] join tb_name2 on 條件

	(4)右外連線的形式                        select 欄位1,	... from tb_name1 right [outer] join tb_name2 on 條件   

6) 子查詢(內層語句查詢的結果作為外層語句查詢的條件)

	(1)常見子查詢                            select 欄位名稱 from tb_name where col_name=(select col_name from tb_name)	     

7) 聯合查詢(將多次查詢(多條select語句), 在記錄上進行拼接(欄位不會增加),聯合查詢只要求欄位一樣, 跟資料型別無關)	

	(1)去掉重複的                            select * from tb_name1 union select * from tb_name2

	(2)保留所有的                            select * from tb_name1 union all select * from tb_name2

四、其他sql操作

1. 檢視操作
1)檢視建立檢視sql                           show create view view_name

2)建立檢視                                  create view view_name(欄位) as  [select語句]

3)修改檢視                                  create or replace /alter view view_name(欄位) as [select語句] 

4)更新檢視(通過檢視更新資料其實就是在更新基本表中的資料,但是一般檢視都不允許更新,而且更新滿足的要求有很多)

	(1)使用update 語句更新檢視             update view_name set 欄位=值;

	(2)使用insert 語句更新檢視             insert into view_name(欄位) values(值)

	(3)使用delete 語句更新檢視             delete from view_name [where條件]

5)刪除檢視                                  drop view view_name	
2. 儲存過程(一組為了完成特定功能的SQL 語句集)
1)建立

	create procedure pro_name
	@sname varchar(100)
	as
	begin
		select * from where sanme = @sname
	end
	go

2) 呼叫

	exec pro_name '引數'	

五、Mysql常用函式

1. 日期和時間函式
1)curdate()                                 返回當前日期

2)curtime()                                 返回當前時間

3)now()                                     返回當前的日期和時間

4)unix_timestamp(date)                      返回日期date的unix時間戳

5)from_unixtime                             返回unix時間戳的日期值

6)week/year/hour/minute/monthname(time)     返回一年中的第幾周/年份/小時值/分鐘值/月份值

7)date_format(date, fmt)                    返回按fmt字串格式化日期date的值

8)date_add(date, interval expr type)        返回一個日期或時間值加上一個時間間隔的時間值     

9)datediff(expr, expr2)                     expr-expr2的值

10)to_days(date) - to_days(date)            一般用來獲取某個時間段(比如大於7天)
2. 數學函式
1)ceil()                                    進一取整

2)floor()                                   舍掉小數點部分

3)round()               					 四捨五入

4)truncate()                                擷取小數點後幾位

5)mod()                                     取餘數

6)abs()                                     取絕對值

7)power() 									 冪運算

8)pi()                                      圓周率
3. 字串函式
1)lower()                                   將字串引數值轉換為全小寫字母后返回

2) upper()                                   將字串引數值轉換為全大寫字母后返回

3) concat()                                  將多個字串引數首尾相連後返回

4) concat_ws(separator,str1,str2,...)        將多個字串引數以給定的分隔符separator首尾相連後返回

5)replace(str, from_str, to_str)            在源字串str中查詢所有的子串form_str(大小寫敏感),找到後使用替代字串

6) repeat(str, count)                        將字串str重複count次後返回

7) format(X, D, [locale])                    以格式‘#,###,###.##’格式化數字X, D指定小數位數,locale指定國家語言(預設的locale為en_US)
4. 流程控制函式
1)if(v,t,f)                                 如果v為真返回t,否則返回f, 示例: select if(1!=1,'1','2') FROM DUAL,結果為2

2)ifnull(v1,v2) 							 如果v1不為null返回v1,否則返回v2, select ifnull(NULL,'1') FROM DUAL, 結果為1

3)case when v then v1 end                   判斷如果v為真返回v1, 示例:select case when 1!=1 then 'true' when 2=2 then 'test' else 'false' end from dual
5. 其他函式
1)database()                                返回當前資料庫名稱

2) version()                                 返回當前資料庫版本

3) md5(s)                                    返回md5加密的值

4)case(x as type)                           將x變成type型別

5) convert(x, type)                          將x變成type型別(整數:SIGNED,浮點數:DECIMAL,日期時間型:DATETIME)

6) user()                                    系統登入的使用者

六、Mysql資料型別

1. 整數型別
1)tinint(m)                                 1個位元組  範圍(-128~127)

2) smallint(m)                               2個位元組  範圍(-32768~32767)

3)mediumint(m)                              3個位元組  範圍(-8388608~8388607)

4)int(m)                                    4個位元組  範圍(-2147483648~2147483647),m顯示幾位數

5)bigint(m)                                 8個位元組  範圍(+-9.22*10的18次方)
2. 浮點型
1)float(m,d)	                             單精度浮點型    8位精度(4位元組)     m總位數,d小數位

2) double(m,d)                               雙精度浮點型    16位精度(8位元組)    m總個數,d小數位
3. 定點數(浮點型在資料庫中存放的是近似值,而定點型別在資料庫中存放的是精確值)
1)decimal(m,d)                              引數m<65 是總個數,d<30且 d<m 是小數位
4. 字串
1)char(n)                                   固定長度,最多255個字元

2)varchar(n)                                固定長度(可變?),最多65535個字元

3) tinytext                                  可變長度,最多255個字元

4) text                                      可變長度,最多65535個字元

5) mediumtext                                可變長度,最多2的24次方-1個字元

6) longtext                                  可變長度,最多2的32次方-1個字元

5. 二進位制資料(_Blob)
1)_BLOB和_text儲存方式不同,_TEXT以文字方式儲存,英文儲存區分大小寫,而_Blob是以二進位制方式儲存,不分大小寫

2)_BLOB儲存的資料只能整體讀出

3)_TEXT可以指定字符集,_BLO不用指定字符集
6. 日期時間型別
1)date                                       3位元組,日期 '2008-12-2'

2)time                                       3位元組,時間 '12:25:36'

3) datetime                                   8位元組,日期時間 '2008-12-2 22:06:44'

4) timestamp                                  4位元組,時間戳
7. 資料型別的屬性
1)null 									  資料列可包含NULL值

2) not null                                   資料列不允許包含NULL值

3) default                                    預設值

4) primary key                                主鍵

5) auto_increment                             自動遞增,適用於整數型別

6) unsigned                                   無符號

7) character set name                         指定一個字符集

七、select語句的執行順序

1. 書寫順序
SELECT DISTINCT
    < select_list >
FROM
    < left_table > < join_type >
JOIN < right_table > ON < join_condition >
WHERE
    < where_condition >
GROUP BY
    < group_by_list >
HAVING
    < having_condition >
ORDER BY
    < order_by_condition >
LIMIT < limit_number >
2. 執行順序
1)from 				對FROM左邊的表和右邊的表計算笛卡爾積,產生虛表VT1

2)on                   對虛表VT1進行ON過濾,只有那些符合<join-condition>的行才會被記錄在虛表VT2中

3)join                 如果指定了OUTER JOIN(比如left join、 rightjoin),那麼保留表中未匹配的行就會作為外部行新增到虛擬表VT2中,產生虛擬表VT3	

4)where                對虛擬表VT3進行WHERE條件過濾。只有符合<where-condition>的記錄才會被插入到虛擬表VT4中

5)group by             根據group by子句中的列,對VT4中的記錄進行分組操作,產生VT5

6)having               對虛擬表VT5應用having過濾,只有符合<having-condition>的記錄才會被 插入到虛擬表VT6中

7)select               執行select操作,選擇指定的列,插入到虛擬表VT7中

8)distinct             對VT7中的記錄進行去重。產生虛擬表VT8

9)order by             將虛擬表VT8中的記錄按照<order_by_list>進行排序操作,產生虛擬表VT9

10)limit               取出指定行的記錄,產生虛擬表VT10, 並將結果返回

參考網址

MySQL常用日期時間函式

MySQL常用字串函式

MYSQL中資料型別介紹

MySQL資料庫學習筆記(三)----基本的SQL語句

MySQL使用者管理及SQL語句詳解

MySQL裡面的子查詢

步步深入:MySQL架構總覽->查詢執行流程->SQL解析順序

注:文章是經過參考其他的文章然後自己整理出來的,有可能是小部分參考,也有可能是大部分參考,但絕對不是直接轉載,覺得侵權了我會刪,我只是把這個用於自己的筆記,順便整理下知識的同時,能幫到一部分人。
ps : 有錯誤的還望各位大佬指正,小弟不勝感激