日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL拓展操作

發布時間:2025/3/15 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL拓展操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL除了基本的增刪該查功能,還有以下拓展功能:

create table t1(id int ....,num int,xx int,unique 唯一索引名稱 (列名,列名),constraint ....)索引不能重復 功能: 1.加速檢索 2.約束數據不重復 索引/聯合唯一索引

unique 如果只寫一列,關聯另一張表的id,實際上就是建立一張一對一關系表。

如果寫了兩列,分別關聯兩張表的id字段,實際上就是給兩張表建立了多對多關系。

視圖:為某個查詢語句設置別名,方便以后使用創建:CREATE VIEW 視圖名稱 AS SQL語句 eg:CREATE VIEW tb1 AS SELECT * FROM tb WHERE ID > 10; 這是一個虛擬表,會從數據庫動態的添加修改:ALTER VIEW 視圖名稱 as SQL語句刪除:DROP VIEW 視圖名稱 觸發器:當對某個表進行增刪改時,希望觸發某個操作。相當于一個中間件,可以在增刪改時執行觸發器設定好的操作增: CREATE TRIGGER T1 BEFORE INSERT(或為AFTER) ON 表名 FOR EACH ROW(每增加一條數據都會執行) DELIMITER // (mysql默認分號結尾改為//) BEGINSQL語句,eg:INSERT INTO teacher (name,gender) VALUES('','');(觸發器的每次都會在teacher表插入新數據) END // DELIMITER ;(設定為分號結尾,防止對其他操作影響)刪: CREATE TRIGGER T2 BEFORE(或為AFTER) DELETE ON 表名 FOR EACH ROW BEGIN ... END改: CREATE TRIGGER T3 BEFORE(或為AFTER) UPDATE ON 表名 FOR EACH ROW BEGIN ... ENDNEW&OLD數據: 在BEGIN 和 END之間的SQL語句,可以用NEW,OLD變量,NEW表示新加入的數據,OLD可以表示刪除或修改后的數據: eg:INSERT INTO teacher(name) VALUES(NEW.name)可以將插入數據的字段加到teacher表新數據的name字段中刪除觸發器: DROP TRIGGER 觸發器名稱調用觸發器: 不能有用戶調用,是基于某張表的操作時自動調用 函數:MySQL有很多內置函數,可以參考官方文檔:https://dev.mysql.com/doc/refman/5.7/en/functions.html 比如字符串拼接:CONCAT('hello',‘world’),時間格式化:SELECT DATE_FORMAT(ctime,"%Y-%m"),COUNT(1) FROM tb GROUP BY DATE_FORMAT(ctime,"%Y-%m")設置自定義函數:(注意:與觸發器不同,函數中不能寫sql語句) delimiter \\ create function f1(i1 int,i2 int) returns int BEGINdeclare num int;set num = i1 + i2;return(num); END \\ delimiter ;函數調用: SELECT f1(nid,id),name FROM tb1刪除函數: DROP function f1 存儲過程:是一個SQL語句集合,當程序調用存儲過程的時候,會執行存儲過程中的SQL語句 delimiter // create procedure p1() BEGINselect * from t1; END// delimiter ;調用:call p1()存儲過程可以傳遞參數,參數有三種類型: in 僅可以作為傳入參數 out 盡可以作為存儲過程的傳出值 inout 可以作為傳入或傳出的參數===========創建一個帶參數的存儲過程:=========== delimiter \\ create procedure p1(in i1 int,in i2 int,inout i3 int,out r1 int ) BEGINDECLARE temp1 int;DECLARE temp2 int default 0; set temp1 = 1;set r1 = i1 + i2 + temp1 + temp2;set i3 = i3 + 100;end\\ delimiter ;==========執行存儲過程============= set @t1 =4; 注意out類型的值傳入要用變量傳入 set @t2 = 0; CALL p1 (1, 2 ,@t1, @t2); SELECT @t1,@t2;==========out值的意義======== 當我們執行存儲過程的時候會返回給我們 SQL語句的結果集,同時也會返回給我們out的數值,這有什么意義呢? 其實在存儲過程中如果有很多SQL語句,我們無法確定是否全部執行成功,如果在SQL語句的最后加上一個對out變量的操作,就可以檢查存儲過程是否執行成功了。 事物:讓SQL存儲過程支持事物操作 delimiter \\ create PROCEDURE p5(OUT p_return_code tinyint) BEGIN DECLARE exit handler for sqlexception (如果發生異常會執行DECLARE部分下的代碼) BEGIN -- ERROR set p_return_code = 1; rollback; END; START TRANSACTION; (正常執行代碼) DELETE from tb1; insert into tb2(name)values('seven'); COMMIT; -- SUCCESS set p_return_code = 2; END\\ delimiter ;

存儲過程中用set設置變量,用call來調用存儲過程,select查看結果

?

游標:是SQL中的for循環語法,如果要對數據每一行進行計算處理可以使用,相當于自建一個方法對每一行的字段進行處理。

delimiter // create procedure p3() begin declare ssid int; -- 自定義變量1 declare ssname varchar(50); -- 自定義變量2 DECLARE done INT DEFAULT FALSE;DECLARE my_cursor CURSOR FOR select sid,sname from student;(游標處理哪些數據) DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;(游標停止條件)open my_cursor; xxoo: LOOPfetch my_cursor into ssid,ssname;if done then leave xxoo; END IF;(下面寫游標完成后執行的操作) insert into teacher(tname) values(ssname); end loop xxoo; close my_cursor; end // delimter ;

?

動態執行SQL(防SQL注入)

delimiter \\ DROP PROCEDURE IF EXISTS proc_sql \\ CREATE PROCEDURE proc_sql () BEGINdeclare p1 int;set p1 = 11;set @p1 = p1;PREPARE prod FROM 'select * from tb2 where nid > ?'; (準備階段預檢測SQL語句的合法性)EXECUTE prod USING @p1;(格式化SQL語句,如拼接)DEALLOCATE prepare prod; (執行)END\\ delimiter ;

?

轉載于:https://www.cnblogs.com/jimmyhe/p/10429610.html

總結

以上是生活随笔為你收集整理的MySQL拓展操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 婷婷综合六月 | 懂色av一区二区三区在线播放 | 99国内精品| 久久91亚洲精品中文字幕奶水 | av中文字幕在线播放 | 欧美三级在线播放 | 国精产品一二三区精华液 | 久久久久亚洲av无码专区 | 伊人青青 | 滋润少妇h高h | 成人做爰黄 | 亚洲人成人一区二区在线观看 | 欧美日韩一区二区三区四区五区 | 美女黄视频在线观看 | 亚洲精品在线中文字幕 | jizz成人| 孕妇丨91丨九色 | 一区二区三区精品在线观看 | 亚洲日本va中文字幕 | 免费观看一区二区三区 | 野花av | 97在线观视频免费观看 | 短篇山村男同肉耽h | 日本高清免费观看 | 午夜精品免费视频 | 日日夜夜av | 音影先锋av资源 | 国产精品国产三级国产专区53 | 91黄免费| 偷偷在线观看免费高清av | 岛国精品在线观看 | 麻豆亚洲av成人无码久久精品 | 青青草成人免费在线视频 | 亚洲永久精品一区二区 | 欧美一级特黄aaaaaa | 啪啪免费小视频 | 久久久精品久久久久 | 亚洲人成在线播放 | 牛夜精品久久久久久久99黑人 | 日韩av成人| 黄片毛片在线免费观看 | 夜夜操夜夜骑 | 亚洲av无码国产精品久久久久 | 日韩国产一区二区 | 九一精品在线 | 99re这里只有精品首页 | 玖玖国产 | 91沈先生在线 | 亚洲精品字幕 | 无码国产伦一区二区三区视频 | 亚洲v在线观看 | 五月激情视频 | 3p视频在线观看 | 午夜剧场福利 | 日韩经典在线 | 性视频在线| 涩里番在线观看 | 久久99热这里只频精品6学生 | 欧美激情视频一区二区三区在线播放 | 欧美日韩高清一区二区三区 | 日本福利网站 | 一区二区三区视频网 | 九一精品视频 | 在线观看911视频 | 无码人妻精品一区二区蜜桃色欲 | 国产做爰全免费的视频软件 | 国产一级特黄a高潮片 | 欧美,日韩,国产精品免费观看 | 免费jizz| 樱花电影最新免费观看国语版 | av高清免费| 官场艳妇疯狂性关系 | av免费视屏 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 亚洲涩色 | 欧美aaaaaaaaaa| 精品国产一区二区不卡 | 欧美成人精品欧美一级乱 | 教练含着她的乳奶揉搓揉捏动态图 | 波多野结衣www| 蜜桃在线一区 | 福利二区三区 | 国产精品主播在线 | 久久久久久久久久国产精品 | 国产成人精品综合久久久久99 | 欧美成人69 | 亚洲午夜免费 | 肉色超薄丝袜脚交一区二区图片 | 99日韩精品 | 成年人视频网址 | 动漫美女放屁 | 欧美变态绿帽cuckold | 日韩一区不卡 | 亚洲艹| 未满十八岁禁止进入 | 日韩电影在线观看一区二区 | 国产一级特黄 | 国产69精品久久久久久 | 久久成人人人人精品欧 |