Mysql的sql語句操作
阿新 • • 發佈:2019-01-12
一、資料庫的相關操作
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架構總覽->查詢執行流程->SQL解析順序
注:文章是經過參考其他的文章然後自己整理出來的,有可能是小部分參考,也有可能是大部分參考,但絕對不是直接轉載,覺得侵權了我會刪,我只是把這個用於自己的筆記,順便整理下知識的同時,能幫到一部分人。
ps : 有錯誤的還望各位大佬指正,小弟不勝感激