study mysql
生活随笔
收集整理的這篇文章主要介紹了
study mysql
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
SELECT CONCAT(`_1`.`drop_default`,`_1`.`alter_default`,`_1`.`update_default`) AS `sql`
FROM (-- 設置默認值SELECT -- ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;CONCAT ('ALTER TABLE',' `',`tt`.`table_name`,'` ','ALTER',' `',`col`.`column_name`,'` ','DROP DEFAULT;') AS `drop_default`,-- ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;CONCAT ('ALTER TABLE',' `',`tt`.`table_name`,'` ','ALTER',' `',`col`.`column_name`,'` ','SET DEFAULT \'\';') AS `alter_default`,-- UPDATE testalter_tbl SET i = 1000 WHERE ...;CONCAT ('UPDATE',' `',`tt`.`table_name`,'` ','SET',' `',`col`.`column_name`,'` ','=',' ','\'\'',' ','WHERE',' `',`col`.`column_name`,'` ','IS NULL;') AS `update_default`FROM `information_schema`.`columns` AS `col` INNER JOIN `information_schema`.`tables` AS `tt` ON (`col`.`table_name` = `tt`.`table_name` )WHERE (-- 對象類型(數據表)`tt`.`table_type` = 'BASE TABLE' -- 架構名稱(數據庫名稱)AND `col`.`table_schema` = 'aigezhe' AND (-- 字符串類型`col`.`data_type` = 'char' -- OR `col`.`data_type` = 'longtext' -- OR `col`.`data_type` = 'mediumtext' -- OR `col`.`data_type` = 'text'-- OR `col`.`data_type` = 'tinytext' OR `col`.`data_type` = 'varchar' -- 日期和時間類型-- `col`.`data_type` = 'date' -- OR `col`.`data_type` = 'time' -- OR `col`.`data_type` = 'year' -- OR `col`.`data_type` = 'datetime'-- OR `col`.`data_type` = 'timestamp' -- 數值類型-- `col`.`data_type` = 'tinyint' -- OR `col`.`data_type` = 'smallint' -- OR `col`.`data_type` = 'mediumint' -- OR `col`.`data_type` = 'int' -- OR `col`.`data_type` = 'bigint'-- OR `col`.`data_type` = 'float' -- OR `col`.`data_type` = 'double' -- OR `col`.`data_type` = 'decimal'
))
) AS `_1`;-- ----------------------------
-- SP函數的語法練習
-- ----------------------------
DROP FUNCTION IF EXISTS `函數名稱`;
DELIMITER $$
CREATE FUNCTION `函數名稱`(/*函數參數*/)
-- 函數返回值
RETURNS VARCHAR(255)
BEGINEND $$
DELIMITER ;-- ----------------------------
-- SP過程的語法練習
-- ----------------------------
DROP PROCEDURE IF EXISTS `過程名稱`;
DELIMITER $$
CREATE PROCEDURE `過程名稱`(/*過程參數*/)
BEGINEND $$
DELIMITER ;-- 一個 test 過程
DELIMITER $$
DROP PROCEDURE IF EXISTS `test` $$
CREATE PROCEDURE `test`(out rtn int)
BEGINdeclare LoginId int default 0;set rtn = 1;if (LoginId = 3) thenset rtn = 2;elseif (LoginId = 0) thenset rtn = 3;elseset rtn = 4;end if;
END $$
DELIMITER ;-- ----------------------------
-- 創建函數
-- ----------------------------
set global log_bin_trust_function_creators=TRUE;
-- set global log_bin_trust_function_creators=1;
SET @RAND_NUM = '0123456789';
SET @RAND_EN = 'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';
SET @RAND_ZHCN = '們以我到他會作時要動國產的一是工就年階義發成部民可出能方進在了不和有大這主中人上為來分生對于學下級地個用同行面說種過命度革而多子后自社加小機也經力線本電高量長黨得實家定深法表著水理化爭現所二起政三好十戰無農使性前等反體合斗路圖把結第里正新開論之物從當兩些還天資事隊批點育重其思與間內去因件日利相由壓員氣業代全組數果期導平各基或月毛然如應形想制心樣干都向變關問比展那它最及外沒看治提五解系林者米群頭意只明四道馬認次文通但條較克又公孔領軍流入接席位情運器并飛原油放立題質指建區驗活眾很教決特此常石強極土少已根共直團統式轉別造切九你取西持總料連任志觀調七么山程百報更見必真保熱委手改管處己將修支識病象幾先老光專什六型具示復安帶每東增則完風回南廣勞輪科北打積車計給節做務被整聯步類集號列溫裝即毫知軸研單色堅據速防史拉世設達爾場織歷花受求傳口斷況采精金界品判參層止邊清至萬確究書術狀廠須離再目海交權且兒青才證低越際八試規斯近注辦布門鐵需走議縣兵固除般引齒千勝細影濟白格效置推空配刀葉率述今選養德話查差半敵始片施響收華覺備名紅續均藥標記難存測士身緊液派準斤角降維板許破述技消底床田勢端感往神便賀村構照容非搞亞磨族火段算適講按值美態黃易彪服早班麥削信排臺聲該擊素張密害侯草何樹肥繼右屬市嚴徑螺檢左頁抗蘇顯苦英快稱壞移約巴材省黑武培著河帝僅針怎植京助升王眼她抓含苗副雜普談圍食射源例致酸舊卻充足短劃劑宣環落首尺波承粉踐府魚隨考刻靠夠滿夫失包住促枝局菌桿周護巖師舉曲春元超負砂封換太模貧減陽揚江析畝木言球朝醫校古呢稻宋聽唯輸滑站另衛字鼓剛寫劉微略范供阿塊某功套友限項余倒卷創律雨讓骨遠幫初皮播優占死毒圈偉季訓控激找叫云互跟裂糧粒母練塞鋼頂策雙留誤礎吸阻故寸盾晚絲女散焊功株親院冷徹彈錯散商視藝滅版烈零室輕血倍缺厘泵察絕富城沖噴壤簡否柱李望盤磁雄似困鞏益洲脫投送奴側潤蓋揮距觸星松送獲興獨官混紀依未突架寬冬章濕偏紋吃執閥礦寨責熟穩奪硬價努翻奇甲預職評讀背協損棉侵灰雖矛厚羅泥辟告卵箱掌氧恩愛停曾溶營終綱孟錢待盡俄縮沙退陳討奮械載胞幼哪剝迫旋征槽倒握擔仍呀鮮吧卡粗介鉆逐弱腳怕鹽末陰豐霧冠丙街萊貝輻腸付吉滲瑞驚頓擠秒懸姆爛森糖圣凹陶詞遲蠶億矩康遵牧遭幅園腔訂香肉弟屋敏恢忘編印蜂急拿擴傷飛露核緣游振操央伍域甚迅輝異序免紙夜鄉久隸缸夾念蘭映溝乙嗎儒殺汽磷艱晶插埃燃歡鐵補咱芽永瓦傾陣碳演威附牙芽永瓦斜灌歐獻順豬洋腐請透司危括脈宜笑若尾束壯暴企菜穗楚漢愈綠拖牛份染既秋遍鍛玉夏療尖殖井費州訪吹榮銅沿替滾客召旱悟刺腦措貫藏敢令隙爐殼硫煤迎鑄粘探臨薄旬善福縱擇禮愿伏殘雷延煙句純漸耕跑澤慢栽魯赤繁境潮橫掉錐希池敗船假亮謂托伙哲懷割擺貢呈勁財儀沉煉麻罪祖息車穿貨銷齊鼠抽畫飼龍庫守筑房歌寒喜哥洗蝕廢納腹乎錄鏡婦惡脂莊擦險贊鐘搖典柄辯竹谷賣亂虛橋奧伯趕垂途額壁網截野遺靜謀弄掛課鎮妄盛耐援扎慮鍵歸符慶聚繞摩忙舞遇索顧膠羊湖釘仁音跡碎伸燈避泛亡答勇頻皇柳哈揭甘諾概憲濃島襲誰洪謝炮澆斑訊懂靈蛋閉孩釋乳巨徒私銀伊景坦累勻霉杜樂勒隔彎績招紹胡呼痛峰零柴簧午跳居尚丁秦稍追梁折耗堿殊崗挖氏刃劇堆赫荷胸衡勤膜篇登駐案刊秧緩凸役剪川雪鏈漁啦臉戶洛孢勃盟買楊宗焦賽旗濾硅炭股坐蒸凝竟陷槍黎救冒暗洞犯筒您宋弧爆謬涂味津臂障褐陸啊健尊豆拔莫抵桑坡縫警挑污冰柬嘴啥飯塑寄趙喊墊丹渡耳刨虎筆稀昆浪薩茶滴淺擁穴覆倫娘噸浸袖珠雌媽紫戲塔錘震歲貌潔剖牢鋒疑霸閃埔猛訴刷狠忽災鬧喬唐漏聞沈熔氯荒莖男凡搶像漿旁玻亦忠唱蒙予紛捕鎖尤乘烏智淡允叛畜俘摸銹掃畢璃寶芯爺鑒秘凈蔣鈣肩騰枯拋軌堂拌爸循誘祝勵肯酒繩窮塘燥泡袋朗喂鋁軟渠顆慣貿糞綜墻趨彼屆墨礙啟逆卸航衣孫齡嶺騙休借';
DELIMITER $$
DROP FUNCTION IF EXISTS `rs` $$
CREATE FUNCTION `rs`(n int,type int)
returns varchar(1024)
BEGIN-- declare chars char(52) default 'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';declare res varchar(1024) default '';declare i int default 0;declare count int;declare chars text;if (n <= 0) thenreturn res;else if (n >= 1024) thenset n = 1024;end if;end if;-- 判斷采用那種字體if (type = 1) then-- 采用中文set count = 1500;else if (type = 2) then-- 采用英文set count = 52;else -- 采用數字set count = 10;end if;end if;repeatset i = i + 1;-- 判斷采用那種字體if (type = 1) then-- 采用中文set res = concat(res,substring(@RAND_ZHCN,floor(1+rand()*count),1));else if (type = 2) then-- 采用英文set res = concat(res,substring(@RAND_EN,floor(1+rand()*count),1));else -- 采用數字set res = concat(res,substring(@RAND_NUM,floor(1+rand()*count),1));end if;end if;until i = n end repeat;return res;
END $$
DELIMITER ;
-- ----------------------------
-- 創建存儲過程
-- ----------------------------
DELIMITER $$
DROP PROCEDURE IF EXISTS `inst` $$
CREATE PROCEDURE `inst`(n int)
BEGINdeclare i int default 0;set autocommit = 0;if (n > 0) thenrepeatset i = i + 1;insert into `user` (`nickname`,`realname`,`age`,`sex`,`phone`,`telephone`) values (rs(floor(2+rand()*3),1),rs(floor(2+rand()*3),1),floor(10+rand()*90),floor(1+rand()*2),concat('1',rs(10,3)),concat('023-',rs(8,3)));until i = n end repeat;end if;commit;set autocommit = 1;END $$
DELIMITER ;DROP PROCEDURE IF EXISTS `inst_one`;
DELIMITER $$
CREATE PROCEDURE `inst_one`(in id int,in nickname varchar(50),in realname varchar(50),in age tinyint(3) unsigned,in sex tinyint(1) unsigned,in phone varchar(30),in telephone varchar(30)
)
BEGINset autocommit = 0;insert into `user` (`nickname`,`realname`,`age`,`sex`,`phone`,`telephone`) values (nickname,realname,age,sex,phone,telephone);commit;rollback;set autocommit = 1;END $$
DELIMITER ;-- ----------------------------
-- Table structure for `user`
-- ----------------------------
CREATE TABLE IF NOT EXISTS `user` (`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',`nickname` varchar(50) NOT NULL DEFAULT '' COMMENT '昵稱',`realname` varchar(50) NOT NULL DEFAULT '' COMMENT '真實姓名',`age` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '年齡',`sex` tinyint(1) unsigned NOT NULL DEFAULT 0 COMMENT '1-男,2-女',`phone` varchar(30) NOT NULL DEFAULT '' COMMENT '手機號碼',`telephone` varchar(30) NOT NULL DEFAULT '' COMMENT '聯系電話',`type` tinyint(3) NOT NULL DEFAULT 1 COMMENT '1-普通用戶',`createtime` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '創建時間',`createts` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '系統創建時間',`updatetime` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '修改時間',`updatets` datetime COMMENT '系統修改時間',PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT '用戶管理表';
-- ----------------------------
-- TRIGGER structure for `update_user_trigger`
-- ----------------------------
DROP TRIGGER IF EXISTS `update_user_trigger`;
DELIMITER //
CREATE TRIGGER `update_user_trigger` BEFORE UPDATE ON `user`
FOR EACH ROW SET NEW.`updatets` = NOW()
//
DELIMITER ;-- ----------------------------
-- Table structure for `user_address`
-- ----------------------------
CREATE TABLE IF NOT EXISTS `user_address` (`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',`name` varchar(255) NOT NULL DEFAULT '' COMMENT '地址名稱',`prov` varchar(30) NOT NULL DEFAULT '' COMMENT '省',`city` varchar(30) NOT NULL DEFAULT '' COMMENT '市',`zone` varchar(30) NOT NULL DEFAULT '' COMMENT '區',`lon` varchar(50) NOT NULL DEFAULT '' COMMENT '經度',`lat` varchar(50) NOT NULL DEFAULT '' COMMENT '緯度',`type` tinyint(3) NOT NULL DEFAULT 1 COMMENT '1-默認地址',`createtime` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '創建時間',`createts` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '系統創建時間',`updatetime` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '修改時間',`updatets` datetime COMMENT '系統修改時間',`userid` int unsigned COMMENT '用戶id',PRIMARY KEY (`id`),CONSTRAINT `FK_userid` FOREIGN KEY (`userid`) REFERENCES `user`(`userid`) ON DELETE SET NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT '用戶地址管理表';
-- ----------------------------
-- TRIGGER structure for `update_user_address_trigger`
-- ----------------------------
DROP TRIGGER IF EXISTS `update_user_address_trigger`;
DELIMITER //
CREATE TRIGGER `update_user_address_trigger` BEFORE UPDATE ON `user_address`
FOR EACH ROW SET NEW.`updatets` = NOW()
//
DELIMITER ;/*** * * * 補充:自定義函數相關內容** */
/**
* 1.自定義示例
**/
-- 無參函數定義
DROP FUNCTION IF EXISTS `hello`;
DELIMITER $$
CREATE FUNCTION `hello`()
RETURNS VARCHAR(255)
BEGINRETURN 'Hello world,i am mysql';
END $$
DELIMITER ;
SELECT hello();
-- 含有參數的自定義函數
DROP FUNCTION IF EXISTS `aiyu`.`formDate`;
DELIMITER $$
CREATE FUNCTION `aiyu`.`formDate`(fdate DATETIME)
RETURNS VARCHAR(255)
BEGINDECLARE x VARCHAR(255) DEFAULT '';SET x = DATE_FORMAT(fdate,'%Y年%m月%d日 %H時%i分%s秒');RETURN x;
END $$
DELIMITER ;
SELECT formDate(NOW());
/**
* 2.自定義函數相關語法及變量
**/
-- 變量聲明
DECLARE var_name[,...] type [DEFAULT value]
SELECT col_name[,...] INTO var_name[,...] table_expr
-- IF 條件語句
IF search_condition THEN
statement_list
[ELSEIF search_condition THEN statement_list]
...
[ELSE statement_list]
END IF
-- CASE語句
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list]
...
[ELSE statement_list]
END CASE;
-- 循環語句
WHILE
[begin_label:]WHILE search_condition DO
statement_list
END WHILE [begin_label];
退出整個循環leave 相當于break
退出當前循環iterate 相當于 continue
通過退出的標簽決定退出哪個循環。
-- 其他相關
刪除函數我們可以使用 DROP FUNCTION IF EXISTS function_name;
查看定義的函數 SHOW FUCNTION STATUS LIKE 'function_name',或者是使用SHOW CREATE FUNCTION function_name;/***** MySQL存儲過程中實現執行動態SQL語句的方法** */
mysql>
mysql> delimiter $$
mysql>
mysql> CREATE PROCEDURE set_col_value-> (in_table VARCHAR(128),-> in_column VARCHAR(128),-> in_new_value VARCHAR(1000),-> in_where VARCHAR(4000))->-> BEGIN-> DECLARE l_sql VARCHAR(4000);-> SET l_sql=CONCAT_ws(' ',-> 'UPDATE',in_table,-> 'SET',in_column,'=',in_new_value,-> ' WHERE',in_where);-> SET @sql=l_sql;-> PREPARE s1 FROM @sql;-> EXECUTE s1;-> DEALLOCATE PREPARE s1;-> END$$
Query OK, 0 rows affected (0.00 sec)
?
當然也可以利用臨時表來創建,
感謝波波的分享。
#mysql 存儲過程中利用游標循環結果集 <p>有這么個需求</p><p> </p><p>topic表中有id 和comments數量</p><p> </p><p>commemt表中有 topicid 和id</p><p> 由于歷史原因,【刪除評論表中時未同步刪除topic中評論數量的值】,</p><p>所以要求一條語句執行更新。(當然用php寫個foreach也可以)。 <pre name="code" class="sql">drop procedure if exists add_demo; # 創建存儲過程 add_test CREATE PROCEDURE add_demo() BEGIN #定義 變量 #a 評論數量 #b id話題 DECLARE a int; DECLARE b int; #此變可有可無,為了給個該存儲函數執行成功后給個提示,運行下便知道 DECLARE str VARCHAR(300); DECLARE x int default 123; #這個用于處理游標到達最后一行的情況 DECLARE s int default 0; #聲明游標cursor_name(cursor_name是個多行結果集) DECLARE cursor_name CURSOR FOR select count(topicid), topicid from t_comment group by topicid; #設置一個終止標記 DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s=1; set str = "--"; #打開游標 OPEN cursor_name; #獲取游標當前指針的記錄,讀取一行數據并傳給變量a,b fetch cursor_name into a,b; #開始循環,判斷是否游標已經到達了最后作為循環條件 while s <> 1 do set str = concat(str,b); update t_topic set comments =a where id =b; #讀取下一行的數據 fetch cursor_name into a,b; end while; #關閉游標 CLOSE cursor_name ; select str; set @aa='12'; select @aa; #語句執行結束 END; #調用存儲函數add_test CALL add_demo()?
總結
以上是生活随笔為你收集整理的study mysql的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10企业版永久激活方法
- 下一篇: win10 企业版的激活命令