版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1、mysql安裝及簡(jiǎn)單配置:安裝Mysql時(shí)要選擇UTF-8的字符集;命令行啟動(dòng)Mysql:net start mysql登錄mysql:mysql u root p回車(chē)然后輸入密碼或者mysql h localhost u root p回車(chē)然后輸入密碼創(chuàng)建數(shù)據(jù)庫(kù):create database student Character set gbk查看已有表的詳細(xì)信息:describe 表名;或者 desc 表名在運(yùn)行時(shí)若遇到字符集不能顯示時(shí),可在命令行通過(guò)以下命令:set names gbk(改顯示字符集)結(jié)構(gòu)化SQL語(yǔ)句:(以下均是以學(xué)生表進(jìn)行操作)2、sql語(yǔ)句及使用:2.1、selec
2、t語(yǔ)句及使用:查詢(xún)成績(jī)大于80的:select * from tb_score where score>=80;顯示指定列信息:select sid,socre from tb_score where score>=80;用order by進(jìn)行排序,order by一定是應(yīng)用在最后 默認(rèn)是升序排序(asc)降序排序是(desc)select * from tb_score order by score desc;(按照分?jǐn)?shù)降序排序)select * from tb_score order by kid desc,score;(ID降序,分?jǐn)?shù)升序進(jìn)行排序)有多個(gè)排序的時(shí)候,按照從左到
3、右依次進(jìn)行,先排第一個(gè)再排第二個(gè)單表查詢(xún)綜合應(yīng)用:select stuid,score from tb_score where score>80 order by score desc;含義:從成績(jī)表中選擇成績(jī)大于80的人的ID以及成績(jī)按照得分的降序進(jìn)行排序顯示選擇列的最大值:SELECT MAX(列名) AS (顯示結(jié)果包括的列) FROM shop;選擇一列中不同的數(shù)據(jù):Null和“ ”不一樣;null是沒(méi)有數(shù)據(jù) 是有數(shù)據(jù),但是是空Select * from tb_stu where tel is not null and tel <> ;2.2、distinct關(guān)鍵字的
4、使用Select distinct (列名) from (表名);select distinct sold_date from store_information;2.3、where子句的使用where子句的操作符:= 等于 <> 或者!= 不等于< <= 小于,小于等于 !< 不小于> >= 大于,大于等于 !> 不大于Between and 在和之間is null或者is not null 為空或者不為空select * from tb_student where tel is null;查出tel為null的記錄 tel為的記錄查詢(xún)不出來(lái)查
5、詢(xún)電話(huà)不為空的記錄的名單select * from tb_student where tel is not null and tel <> ;存儲(chǔ)的時(shí)候 會(huì)自動(dòng)TRIM掉變成Null和“ ”不一樣;null是沒(méi)有數(shù)據(jù) 是有數(shù)據(jù),但是是空Null表示允許插入值,但是沒(méi)有設(shè)置過(guò),與字段包含0,空字符串或者僅僅包含空格不同。2.4、and 和or關(guān)鍵字使用select store_name from store_information where (sales<2000 and sales>1000) or sales>100;幾個(gè)條件可以用and 和or連接起來(lái),不同
6、的條件間加括號(hào)分開(kāi)。And的優(yōu)先級(jí)高于orSelect prod_name,prod_price from products Where venid=dell01or venid=brs01 and prod_price>10;上面語(yǔ)句的意思是:查詢(xún)供應(yīng)商brs01制造的價(jià)格在十元以上的產(chǎn)品,或者是dell01供應(yīng)商生產(chǎn)的產(chǎn)品。Select prod_name,prod_price from products Where (venid=dell01or venid=brs01) and prod_price>10;上面語(yǔ)句的意思是:查詢(xún)供應(yīng)商brs01或者是dell01供應(yīng)商生產(chǎn)價(jià)
7、格在十元以上的產(chǎn)品。2.5、in關(guān)鍵字的使用在sql中,有兩種情況會(huì)用到inz這個(gè)指令,這里先介紹其中之一:與where有關(guān)的那一個(gè)情況,在這種情況下,我們事先至少知道一個(gè)我們需要的值。而將這些知道的值放到in這個(gè)子句中。SELECT "欄位名" FROM "表格名" WHERE "欄位名" IN ('值一', '值二', .);select * from store_information where store_name in("Los_Angeles");select * fr
8、om store_information where sales>200 and store_name in("Los_Angeles");等價(jià)于:select * from store_information where sales>200 and Store_name="Los_Angeles"in操作符的優(yōu)點(diǎn):in關(guān)鍵字支持和其他條件用and 和or進(jìn)行聯(lián)合條件的查詢(xún)查詢(xún)效率一般比or操作符號(hào)高In后面可以包含select子句2.6、between的使用Between讓我們可以在一定的范圍內(nèi)抓取數(shù)據(jù)庫(kù)中的值Select 列名 from
9、表名 where 列名 between A and B;Select * from tb_student where age between 16 and 19;包含and后面的數(shù)值2.7 通配符%和_%表示任何字符或者字符串,出現(xiàn)任意次數(shù) _表示一個(gè)字符,一個(gè)漢字要兩個(gè)下劃線(xiàn);select * from store_information where sales like "%700%"通配符的優(yōu)缺點(diǎn):通配符比其他條件會(huì)發(fā)花費(fèi)更多的時(shí)間,能用其它的條件優(yōu)先選擇其它的查詢(xún)條件。通配符盡量不要放在搜索條件的首部,因?yàn)檫@樣是最慢的2.8 not 、not exists操作符no
10、t操作符只有一個(gè)功能:就是否定它之后所跟的任何條件。mysql中使用not exsists2.9 like關(guān)鍵字的使用select * from tb_student where tel like 136*;使用like時(shí)對(duì)后面 里面的內(nèi)容是區(qū)分大小寫(xiě)的2.10拼接字段 在mysql中使用concat拼接字段在不同的數(shù)據(jù)庫(kù)中有不同的表示:Oracle DB2 Sybase使用 |SQL Server使用 +Mysql不支持以上兩種字符的使用,它使用concat函數(shù)Mysql中|相當(dāng)于or,&&相當(dāng)于and;2.10.1 trim的使用去掉字段兩邊的空格select trim(
11、1111 ) as a from tb_student;運(yùn)行結(jié)果:ltrim 以及rtrim 去除字符串左邊空格或者右邊空格2.10.2執(zhí)行算術(shù)運(yùn)算mysql> select (sage+1) as xusui from tb_stu;可以對(duì)一些字段進(jìn)行算術(shù)操作2.11函數(shù)操作每個(gè)DBMS都有不同的函數(shù),這里需要參照每個(gè)數(shù)據(jù)庫(kù)自己的使用說(shuō)明如提取字符串:oracle,DB2使用SUNSTR()SQL Server Mysql使用SUNSTRING()數(shù)據(jù)類(lèi)型轉(zhuǎn)化DB2使用CAST()Mysql SQL Server使用convert()獲取當(dāng)前日期DB2使用current_date();
12、Mysql使用curdate();oracle使用sysdate()sqlserver使用getdate();Mysql操作:mysql> select curdate() as today from tb_stu;操作結(jié)果:left從左邊取字符串,5表示取5位lpad表示左補(bǔ)齊 例子中為左補(bǔ)齊,補(bǔ)齊后為11位,用0補(bǔ)齊lower(str)將str變成小寫(xiě)upper(str)將str變成大寫(xiě)length(str)返回str字符串的長(zhǎng)度right()返回字符串右邊的字符select right(hellworld,5); 結(jié)果:worldmysql> SELECT SUBSTRING
13、('Quadratically',5); -> 'ratically'mysql> SELECT SUBSTRING('foobarbar' FROM 4); -> 'barbar'mysql> SELECT SUBSTRING('Quadratically',5,6); -> 'ratica' mysql> SELECT SUBSTRING('Sakila', -3); -> 'ila' mysql> SELECT S
14、UBSTRING('Sakila', -5, 3); -> 'aki'mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2); -> 'ki'日期處理函數(shù):mysql> select year(curdate() as curyy;運(yùn)行結(jié)果:| curyy | 2011 |不同系統(tǒng)的日期操作函數(shù):數(shù)值處理函數(shù):2.12聚集函數(shù)匯總數(shù)據(jù) 聚集函數(shù)有:avg(),返回某列的平均值count()返回某列的行數(shù)max() min() sum() 返回某列的最大最小值 總和值c
15、ount函數(shù)使用的兩種形式:使用count(*)對(duì)表中行的數(shù)目進(jìn)行計(jì)數(shù),不管某列的值是不是NULL還是非空值都會(huì)統(tǒng)計(jì)使用count(某一具體列)時(shí),如果其中某些值是NULL則這些不計(jì)入count的結(jié)果中也可以此而成select count(1) from tb_stu;max min sum統(tǒng)計(jì)時(shí)也是忽略值為NULL的行的select max(score) from tb_score;select max(distinct score) from tb_score;一個(gè)默認(rèn)是統(tǒng)計(jì)All所有的,一個(gè)是統(tǒng)計(jì)不同的值的聚集函數(shù)2.13 分組函數(shù):group by 和having子句按照group b
16、y后面的字段進(jìn)行分組mysql> select avg(score) from tb_score group by kid;| avg(score) | 88.83333 | 91.00000 | 67.50000 |mysql> select stuid,kid ,avg(score) from tb_score group by kid;| stuid | kid | avg(score) | 2001 | 1 | 88.83333 | 2001 | 2 | 91.00000 | 2002 | 4 | 67.50000 |group后面不能使用別名進(jìn)行分組2.13.1過(guò)濾分組:
17、having子句mysql> select kid ,avg(score) as avg ,max(score) as max, min(score) as min from tb_score group by kid having avg>=75;| kid | avg | max | min | 1 | 88.83333 | 99.0 | 80.5 | 2 | 91.00000 | 92.0 | 90.0 |不加having子句的時(shí)候mysql> select kid ,avg(score) as avg ,max(score) as max, min(score) as
18、 min from tb_score group by kid;| kid | avg | max | min | 1 | 88.83333 | 99.0 | 80.5 | 2 | 91.00000 | 92.0 | 90.0 | 4 | 67.50000 | 85.0 | 50.0 |having子句不一定與group by一起出現(xiàn),但一起出現(xiàn)的情況比較多having后面的字段一定是在select中出現(xiàn)的字段where過(guò)濾的是原始行的數(shù)據(jù),having過(guò)濾的是分組之后的數(shù)據(jù)2.14各個(gè)子句的順序2.15內(nèi)連接 inner join on應(yīng)該選擇一個(gè)基準(zhǔn)表。on關(guān)鍵字表示條件,兩個(gè)join中間
19、不用逗號(hào)不采用內(nèi)連接的寫(xiě)法:select st.stuname,sub.kname,sc.scorefrom tb_stu st,tb_subject sub,tb_score scwhere st.stuid=sc.stuid and sub.kid=sc.kid and score >70;采用內(nèi)連接寫(xiě)法:select s.stuname,k.kname,c.score from tb_score c inner join tb_stu s on s.stuid=c.stuid inner join tb_subject k on c.kid=k.kid where c.score&
20、gt;=70;兩種寫(xiě)法的運(yùn)行結(jié)果是一致的,知識(shí)查找效率有區(qū)別在SQL規(guī)范中推薦使用inner join的用法,因?yàn)椴檎倚矢咭恍┻\(yùn)行結(jié)果:+-+-+-+| stuname | kname | score |+-+-+-+| 張三 | 數(shù)學(xué) | 80.0 | 張三 | 語(yǔ)文 | 81.0 | 張三 | 英語(yǔ) | 82.0 | 張三 | 物理 | NULL | 張三 | 化學(xué) | 84.0 | 李四 | 數(shù)學(xué) | 70.0 | 李四 | 語(yǔ)文 | NULL | 李四 | 英語(yǔ) | 72.0 | 李四 | 物理 | 73.0 | 李四 | 化學(xué) | 74.0 | 李四 | 生物 | 75.0 |
21、王五 | 數(shù)學(xué) | 80.0 | 王五 | 語(yǔ)文 | 81.0 | 王五 | 英語(yǔ) | NULL | 王五 | 物理 | 83.0 | 王五 | 化學(xué) | 84.0 | 趙六 | NULL | NULL | 張飛 | NULL | NULL | 曹操 | NULL | NULL | 趙云 | NULL | NULL | 司馬懿 | NULL | NULL | 關(guān)羽 | NULL | NULL | 孫策 | NULL | NULL | 周瑜 | NULL | NULL | 楊過(guò) | NULL | NULL | 小龍女 | NULL | NULL | 小龍女 | NULL | NULL | 小龍女
22、 | NULL | NULL |2.16外連接 、left outer joinon 左連接right oute joinon 右連接full outer joinon 全連接 檢索兩個(gè)表中的所有的行,并關(guān)聯(lián)那些可以關(guān)聯(lián)的行 mysql不支持left outer join表示指定包含左邊的表right outer join 表示指定包含右邊的表left outer joinon實(shí)例:應(yīng)該選定一個(gè)基準(zhǔn)表。select s.stuname,k.kname,c.score from tb_stu s left outer join tb_score c on c.stuid=s.stuid left
23、 outer join tb_subject k on k.kid=c.kid;注:以tb_stu為中心,把表中所有的值列出,后面匹配的列出值,不匹配的輸出為NULL運(yùn)行結(jié)果:| 李四 | 英語(yǔ) | 72.0 | 李四 | 物理 | 73.0 | 李四 | 化學(xué) | 74.0 | 李四 | 生物 | 75.0 | 王五 | 數(shù)學(xué) | 80.0 | 王五 | 語(yǔ)文 | 81.0 | 王五 | 英語(yǔ) | 82.0 | 王五 | 物理 | 83.0 | 王五 | 化學(xué) | 84.0 | 趙六 | NULL | NULL | 張飛 | NULL | NULL | 曹操 | NULL | NULL |
24、趙云 | NULL | NULL | 司馬懿 | NULL | NULL | 關(guān)羽 | NULL | NULL | 孫策 | NULL | NULL | 周瑜 | NULL | NULL |相同的語(yǔ)句改成內(nèi)連接:select s.stuname,k.kname,c.score from tb_stu sinner join tb_score c on c.stuid=s.stuid inner join tb_subject k on k.kid=c.kid;執(zhí)行結(jié)果:| stuname | kname | score | 張三 | 數(shù)學(xué) | 80.0 | 張三 | 語(yǔ)文 | 81.0 | 張
25、三 | 英語(yǔ) | 82.0 | 張三 | 物理 | NULL | 張三 | 化學(xué) | 84.0 | 李四 | 數(shù)學(xué) | 70.0 | 李四 | 語(yǔ)文 | NULL | 李四 | 英語(yǔ) | 72.0 | 李四 | 物理 | 73.0 | 李四 | 化學(xué) | 74.0 | 李四 | 生物 | 75.0 | 王五 | 數(shù)學(xué) | 80.0 | 王五 | 語(yǔ)文 | 81.0 | 王五 | 英語(yǔ) | NULL | 王五 | 物理 | 83.0 | 王五 | 化學(xué) | 84.0 |內(nèi)連接和外連接的差別(自己覺(jué)得):內(nèi)連接只顯示所選內(nèi)容不全為空的值,即至少會(huì)滿(mǎn)足一些條件,外連接是只要是基準(zhǔn)表中有這個(gè)值與他相關(guān)
26、的屬性就會(huì)顯示出來(lái)。外連接的查詢(xún)結(jié)果一般會(huì)比內(nèi)連接更多。帶聚集函數(shù)的連接:就是多了個(gè)聚集函數(shù),沒(méi)什么他別的select st.stuname, count(sc.kid) as countfrom tb_score scinner join tb_stu st on st.stuid=sc.stuidgroup by sc.stuid;運(yùn)行結(jié)果:| stuname | count | 張三 | 5 | 李四 | 6 | 王五 | 5 |2.17自連接在一個(gè)表中查詢(xún)自己的字段,自連接的查詢(xún)速度較快mysql> select * from tb_stu -> st1, tb_stu s
27、t2 -> where st1.stuid=st2.stuid -> and st2.stuname='張三'| stuid | stuname | sage | sdept | stuid | stuname | sage | sdept | 2001 | 張三 | 18 | NULL | 2001 | 張三 | 18 | NULL |2.18自然連接先列出所有表,再寫(xiě)出表之間的關(guān)系select st.stuname,sc.score,sub.knamefrom tb_stu st,tb_score sc, tb_subject subwhere sc.stuid
28、 =st.stuid and sc.kid=sub.kid;運(yùn)行結(jié)果:| stuname | score | kname | 張三 | 80.0 | 數(shù)學(xué) | 張三 | 81.0 | 語(yǔ)文 | 張三 | 82.0 | 英語(yǔ) | 張三 | NULL | 物理 | 張三 | 84.0 | 化學(xué) |。2.19使用連接的注意事項(xiàng)一般使用內(nèi)連接,但需要查出所有值的時(shí)候也使用外連接應(yīng)該總是提供連接條件,否則會(huì)出現(xiàn)笛卡爾乘積2.20組合查詢(xún)用union連接不同的select查詢(xún)語(yǔ)句兩種情況會(huì)用到組合查詢(xún):1、 在單個(gè)查詢(xún)中從不同的表中返回相似的數(shù)據(jù)結(jié)構(gòu)2、 查詢(xún)多個(gè)表,按單個(gè)查詢(xún)結(jié)果返回使用規(guī)則:1、 un
29、ion中必須由兩條級(jí)以上的selec語(yǔ)句組成2、 每個(gè)查詢(xún)語(yǔ)句必須包含相同的列,表達(dá)是或者聚集函數(shù)3、 列數(shù)據(jù)必須兼容,類(lèi)型不必完全相同,但DBMS必須可以隱式的轉(zhuǎn)換數(shù)據(jù)類(lèi)型4、 union從查詢(xún)結(jié)果中自動(dòng)去除重復(fù)的行,如果要返回所有的行,可以使用union all5、 在使用組合查詢(xún)時(shí)只能有一條order by語(yǔ)句,只能放在最后。order by是用來(lái)排序組合查詢(xún)結(jié)果集,而不是針對(duì)某一select查詢(xún)結(jié)果集2.21插入、更新、刪除數(shù)據(jù)2.21.1插入數(shù)據(jù)使用insert關(guān)鍵字。插入數(shù)據(jù)有幾種方式:插入完整的行,插入行的一部分,插入查詢(xún)結(jié)果插入時(shí),每列必須提供一個(gè)值,若不插入且允許為空,則數(shù)據(jù)
30、庫(kù)會(huì)提供一個(gè)NULL值插入完整的行:mysql> insert into tb_Stu(stuid,stuname,sage,sdept) values('2027','郭靖',40,'武當(dāng)');mysql> insert into tb_Stu values('2027','郭靖',40,'武當(dāng)');插入行的一部分mysql> insert into tb_Stu(stuid,stuname,sage) values('2027','郭靖',40)
31、;插入查詢(xún)結(jié)果查詢(xún)結(jié)果中的字段類(lèi)型在插入的表中應(yīng)該是相似的。并不強(qiáng)制要求兩個(gè)的列名完全一致,但需要對(duì)應(yīng),相應(yīng)的數(shù)據(jù)類(lèi)型可以做轉(zhuǎn)化使用insertselect語(yǔ)句,一次可以插入多個(gè)數(shù)據(jù)insert into tb_student select * from tb_stu;2.21.2從一個(gè)表完全復(fù)制到另外一個(gè)表中 select into mysql使用create tableinsert select和select into的區(qū)別:insert selec是增補(bǔ)數(shù)據(jù)到一個(gè)已經(jīng)存在的表select into是將從一個(gè)已經(jīng)存在的表中檢索的數(shù)據(jù)插入到一個(gè)新表中,有的DBMS可以覆蓋已經(jīng)存在的表,有的不
32、行,著以來(lái)于具體的DBMS的規(guī)定。mysql創(chuàng)建一個(gè)新表: create table tb_student select * from tb_stu;注意事項(xiàng):任何select子句都可以使用包括where和group by子句可以使用多表連接選擇數(shù)據(jù)2.21.3更新數(shù)據(jù)更新要有where子句,要不然就全部更新了更新一列:mysql> select * from tb_stu where stuid='2001'| stuid | stuname | sage | sdept | 2001 | 張三 | 25 | network |mysql> update tb_s
33、tu set sdept='計(jì)算機(jī)' where stuid='2001'mysql> select * from tb_stu where stuid='2001'| stuid | stuname | sage | sdept | 2001 | 張三 | 25 | 計(jì)算機(jī) |更新多列數(shù)據(jù):update tb_stu set sdept='計(jì)算機(jī)' ,sage=25 where stuid='2001'注意事項(xiàng):一般來(lái)說(shuō),當(dāng)表中存在數(shù)據(jù)時(shí),不要對(duì)它進(jìn)行更新允許重命名已經(jīng)存在的列2.21.4刪除數(shù)據(jù)刪除一列或
34、者多列數(shù)據(jù)delete from tb_stu where stuid=2001;不加where子句默認(rèn)刪除全部數(shù)據(jù),在每個(gè)表中設(shè)置主鍵,以保證刪除更改數(shù)據(jù)的唯一性2.21.5Create:創(chuàng)建一個(gè)表DROP TABLE IF EXISTS y2k;CREATE TABLE y2k (date date primary key not null default 1, 設(shè)置默認(rèn)值date_time datetime not null, time_stamp timestamp not null);INSERT INTO y2k VALUES ("1998-12-31",&qu
35、ot;1998-12-31 23:59:59",19981231235959);2.22.6更新表結(jié)構(gòu) alteralter table tb_stu add address varchar(200);alter table tb_stu drop column address;復(fù)雜的表結(jié)構(gòu)一般手動(dòng)刪除列,步驟為:1、定義一個(gè)和原表一樣的表,使用insert。select語(yǔ)句將數(shù)據(jù)導(dǎo)入到新標(biāo)2、檢查新表的數(shù)據(jù),重命名或者刪除3、用舊表的名稱(chēng)重名新表2.22.7刪除表drop table tb_stu1;有外鍵關(guān)聯(lián)的表,應(yīng)先將與之關(guān)聯(lián)的外鍵刪除2.22.8重命名表rename tabl
36、e tb_stu1 tb_stu;2.23視圖視圖是一個(gè)虛擬的表,本身不存儲(chǔ)數(shù)據(jù),可以避免每次查詢(xún)相同的東西而重復(fù)輸入SQL語(yǔ)句。主要是對(duì)Table中的數(shù)據(jù)進(jìn)行簡(jiǎn)單的加工,以藏復(fù)雜的SQLcreate view v_stu_score as后面加上相應(yīng)的語(yǔ)句即可create view v_stu_score as select st.stuname ,sub.kname,sc.score from tb_score sc inner join tb_stu st on st.stuid=sc.stuid inner join tb_subject sub on sub.kid=sc.kid;它
37、的結(jié)果和只寫(xiě)select st.stuname ,sub.kname,sc.score from tb_score sc inner join tb_stu st on st.stuid=sc.stuid inner join tb_subject sub on sub.kid=sc.kid;一樣查詢(xún)視圖和查詢(xún)表的操作一樣select * from v_stu_score;select * from v_stu_score where score>80;各種查詢(xún)語(yǔ)句、聚集函數(shù)、分組語(yǔ)句、計(jì)算字段都行2.24存儲(chǔ)過(guò)程()SQL Server中創(chuàng)建存儲(chǔ)過(guò)程以下是抄來(lái)的存儲(chǔ)過(guò)程語(yǔ)法存儲(chǔ)過(guò)程如同
38、一門(mén)程序設(shè)計(jì)語(yǔ)言,同樣包含了數(shù)據(jù)類(lèi)型、流程控制、輸入和輸出和它自己的函數(shù)庫(kù)。-基本語(yǔ)法-一.創(chuàng)建存儲(chǔ)過(guò)程create procedure sp_name()begin.end二.調(diào)用存儲(chǔ)過(guò)程1.基本語(yǔ)法:call sp_name()注意:存儲(chǔ)過(guò)程名稱(chēng)后面必須加括號(hào),哪怕該存儲(chǔ)過(guò)程沒(méi)有參數(shù)傳遞三.刪除存儲(chǔ)過(guò)程1.基本語(yǔ)法:drop procedure sp_name/2.注意事項(xiàng)(1)不能在一個(gè)存儲(chǔ)過(guò)程中刪除另一個(gè)存儲(chǔ)過(guò)程,只能調(diào)用另一個(gè)存儲(chǔ)過(guò)程四.其他常用命令1.show procedure status顯示數(shù)據(jù)庫(kù)中所有存儲(chǔ)的存儲(chǔ)過(guò)程基本信息,包括所屬數(shù)據(jù)庫(kù),存儲(chǔ)過(guò)程名稱(chēng),創(chuàng)建時(shí)間等2.sho
39、w create procedure sp_name顯示某一個(gè)mysql存儲(chǔ)過(guò)程的詳細(xì)信息-數(shù)據(jù)類(lèi)型及運(yùn)算符-一、基本數(shù)據(jù)類(lèi)型:略二、變量:自定義變量:DECLARE a INT ; SET a=100; 可用以下語(yǔ)句代替:DECLARE a INT DEFAULT 100;變量分為用戶(hù)變量和系統(tǒng)變量,系統(tǒng)變量又分為會(huì)話(huà)和全局級(jí)變量用戶(hù)變量:用戶(hù)變量名一般以開(kāi)頭,濫用用戶(hù)變量會(huì)導(dǎo)致程序難以理解及管理1、 在mysql客戶(hù)端使用用戶(hù)變量mysql> SELECT 'Hello World' into x;mysql> SELECT x;mysql> SET y=
40、'Goodbye Cruel World'mysql> select y;mysql> SET z=1+2+3;mysql> select z;2、 在存儲(chǔ)過(guò)程中使用用戶(hù)變量mysql> CREATE PROCEDURE GreetWorld( ) SELECT CONCAT(greeting,' World');mysql> SET greeting='Hello'mysql> CALL GreetWorld( );3、 在存儲(chǔ)過(guò)程間傳遞全局范圍的用戶(hù)變量mysql> CREATE PROCEDURE
41、p1( ) SET last_procedure='p1'mysql> CREATE PROCEDURE p2( ) SELECT CONCAT('Last procedure was ',last_procedure);mysql> CALL p1( );mysql> CALL p2( );三、運(yùn)算符:1.算術(shù)運(yùn)算符+ 加 SET var1=2+2; 4- 減 SET var2=3-2; 1* 乘 SET var3=3*2; 6/ 除 SET var4=10/3; 3.3333DIV 整除 SET var5=10 DIV 3; 3% 取模 S
42、ET var6=10%3 ; 12.比較運(yùn)算符> 大于 1>2 False< 小于 2<1 False<= 小于等于 2<=2 True>= 大于等于 3>=2 TrueBETWEEN 在兩值之間 5 BETWEEN 1 AND 10 TrueNOT BETWEEN 不在兩值之間 5 NOT BETWEEN 1 AND 10 FalseIN 在集合中 5 IN (1,2,3,4) FalseNOT IN 不在集合中 5 NOT IN (1,2,3,4) True= 等于 2=3 False<>, != 不等于 2<>3 F
43、alse<=> 嚴(yán)格比較兩個(gè)NULL值是否相等 NULL<=>NULL TrueLIKE 簡(jiǎn)單模式匹配 "Guy Harrison" LIKE "Guy%" TrueREGEXP 正則式匹配 "Guy Harrison" REGEXP "Ggreg" FalseIS NULL 為空 0 IS NULL FalseIS NOT NULL 不為空 0 IS NOT NULL True3.邏輯運(yùn)算符4.位運(yùn)算符| 或& 與<< 左移位>> 右移位 非(單目運(yùn)算,按位
44、取反)注釋?zhuān)簃ysql存儲(chǔ)過(guò)程可使用兩種風(fēng)格的注釋雙橫杠:-該風(fēng)格一般用于單行注釋c風(fēng)格:/* 注釋內(nèi)容 */ 一般用于多行注釋-流程控制-一、順序結(jié)構(gòu)二、分支結(jié)構(gòu)ifcase三、循環(huán)結(jié)構(gòu)for循環(huán)while循環(huán)loop循環(huán)repeat until循環(huán)注:區(qū)塊定義,常用begin.end;也可以給區(qū)塊起別名,如:lable:begin.end lable;可以用leave lable;跳出區(qū)塊,執(zhí)行區(qū)塊以后的代碼begin和end如同C語(yǔ)言中的 和 。-輸入和輸出-mysql存儲(chǔ)過(guò)程的參數(shù)用在存儲(chǔ)過(guò)程的定義,共有三種參數(shù)類(lèi)型,IN,OUT,INOUTCreate procedure|funct
45、ion(IN |OUT |INOUT 參數(shù)名 數(shù)據(jù)類(lèi)形.)IN 輸入?yún)?shù)表示該參數(shù)的值必須在調(diào)用存儲(chǔ)過(guò)程時(shí)指定,在存儲(chǔ)過(guò)程中修改該參數(shù)的值不能被返回,為默認(rèn)值OUT 輸出參數(shù)該值可在存儲(chǔ)過(guò)程內(nèi)部被改變,并可返回INOUT 輸入輸出參數(shù)調(diào)用時(shí)指定,并且可被改變和返回IN參數(shù)例子:CREATE PROCEDURE sp_demo_in_parameter(IN p_in INT)BEGINSELECT p_in; -查詢(xún)輸入?yún)?shù)SET p_in=2; -修改select p_in;-查看修改后的值END;執(zhí)行結(jié)果:mysql> set p_in=1mysql> call sp_demo
46、_in_parameter(p_in)略mysql> select p_in;略以上可以看出,p_in雖然在存儲(chǔ)過(guò)程中被修改,但并不影響p_id的值OUT參數(shù)例子創(chuàng)建:mysql> CREATE PROCEDURE sp_demo_out_parameter(OUT p_out INT)BEGINSELECT p_out;/*查看輸出參數(shù)*/SET p_out=2;/*修改參數(shù)值*/SELECT p_out;/*看看有否變化*/END;執(zhí)行結(jié)果:mysql> SET p_out=1mysql> CALL sp_demo_out_parameter(p_out)略mysq
47、l> SELECT p_out;略INOUT參數(shù)例子:mysql> CREATE PROCEDURE sp_demo_inout_parameter(INOUT p_inout INT)BEGINSELECT p_inout;SET p_inout=2;SELECT p_inout;END;執(zhí)行結(jié)果:set p_inout=1call sp_demo_inout_parameter(p_inout) /略select p_inout;略附:函數(shù)庫(kù)mysql存儲(chǔ)過(guò)程基本函數(shù)包括:字符串類(lèi)型,數(shù)值類(lèi)型,日期類(lèi)型一、字符串類(lèi)CHARSET(str) /返回字串字符集CONCAT (str
48、ing2 , ) /連接字串INSTR (string ,substring ) /返回substring首次在string中出現(xiàn)的位置,不存在返回0LCASE (string2 ) /轉(zhuǎn)換成小寫(xiě)LEFT (string2 ,length ) /從string2中的左邊起取length個(gè)字符LENGTH (string ) /string長(zhǎng)度LOAD_FILE (file_name ) /從文件讀取內(nèi)容LOCATE (substring , string ,start_position ) 同INSTR,但可指定開(kāi)始位置LPAD (string2 ,length ,pad ) /重復(fù)用pad加
49、在string開(kāi)頭,直到字串長(zhǎng)度為lengthLTRIM (string2 ) /去除前端空格REPEAT (string2 ,count ) /重復(fù)count次REPLACE (str ,search_str ,replace_str ) /在str中用replace_str替換search_strRPAD (string2 ,length ,pad) /在str后用pad補(bǔ)充,直到長(zhǎng)度為lengthRTRIM (string2 ) /去除后端空格STRCMP (string1 ,string2 ) /逐字符比較兩字串大小,SUBSTRING (str , position ,length
50、) /從str的position開(kāi)始,取length個(gè)字符,注:mysql中處理字符串時(shí),默認(rèn)第一個(gè)字符下標(biāo)為1,即參數(shù)position必須大于等于1mysql> select substring(abcd,0,2);+| substring(abcd,0,2) |+| |+1 row in set (0.00 sec)mysql> select substring(abcd,1,2);+| substring(abcd,1,2) |+| ab |+1 row in set (0.02 sec)TRIM(BOTH|LEADING|TRAILING padding FROMstrin
51、g2) /去除指定位置的指定字符UCASE (string2 ) /轉(zhuǎn)換成大寫(xiě)RIGHT(string2,length) /取string2最后length個(gè)字符SPACE(count) /生成count個(gè)空格二、數(shù)值類(lèi)型ABS (number2 ) /絕對(duì)值BIN (decimal_number ) /十進(jìn)制轉(zhuǎn)二進(jìn)制CEILING (number2 ) /向上取整CONV(number2,from_base,to_base) /進(jìn)制轉(zhuǎn)換FLOOR (number2 ) /向下取整FORMAT (number,decimal_places ) /保留小數(shù)位數(shù)HEX (DecimalNumber
52、 ) /轉(zhuǎn)十六進(jìn)制注:HEX()中可傳入字符串,則返回其ASC-11碼,如HEX(DEF)返回4142143也可以傳入十進(jìn)制整數(shù),返回其十六進(jìn)制編碼,如HEX(25)返回19LEAST (number , number2 ,.) /求最小值MOD (numerator ,denominator ) /求余POWER (number ,power ) /求指數(shù)RAND(seed) /隨機(jī)數(shù)ROUND (number ,decimals ) /四舍五入,decimals為小數(shù)位數(shù)注:返回類(lèi)型并非均為整數(shù),如:(1)默認(rèn)變?yōu)檎沃祄ysql> select round(1.23);+-+| round(1.
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 挖掘機(jī)拆遷安全協(xié)議書(shū)
- 《水分析化學(xué)》重點(diǎn)筆記
- 2024-2025學(xué)年六年級(jí)上冊(cè)數(shù)學(xué)北師大版期中模擬檢測(cè)卷(1-3單元)(含答案)
- 氣體儲(chǔ)存技術(shù)新進(jìn)展
- 高考數(shù)學(xué)復(fù)習(xí):三角函數(shù)的概念與三角公式應(yīng)用
- 合伙企業(yè)的賬務(wù)處理-做賬實(shí)操
- 2024年煤層氣(煤田)項(xiàng)目資金需求報(bào)告代可行性研究報(bào)告
- 【北京】期中模擬卷【18-19章】
- 公司生產(chǎn)設(shè)備購(gòu)買(mǎi)合同(3篇)
- 左傳讀書(shū)心得體會(huì)三篇
- 啟迪人才測(cè)評(píng)試卷
- 《專(zhuān)利及專(zhuān)利申請(qǐng)》課件
- 中國(guó)兒童注意缺陷多動(dòng)障礙(ADHD)防治指南
- 城市燃?xì)獍踩芾砑夹g(shù)
- 兩癌的健康知識(shí)講座
- 中西方創(chuàng)世神話(huà)文化的比較
- 幼兒園戶(hù)外游戲活動(dòng)設(shè)計(jì)課件精
- 2023燃?xì)夤こ谭职贤?guī)版
- 陜西師范大學(xué)學(xué)位英語(yǔ)試題
- 【基于嵌入式的人體健康智能檢測(cè)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)14000字(論文)】
- 醫(yī)學(xué)課件:臨床決策分析
評(píng)論
0/150
提交評(píng)論