Mysql(增刪改查)+檢視+儲存過程【常用】
阿新 • • 發佈:2018-12-18
一,MySQL(一般): 1,建立資料庫: SET FOREIGN_KEY_CHECKS=0; // 修改外來鍵約束( Mysql中如果表和表之間建立的外來鍵約束,則無法刪除表及修改表結構 ) DROP TABLE IF EXISTS `user`; // DROP TABLE會永久性地取消表定義,取消各分割槽,並取消儲存在這些分割槽中的所有資料 CREATE TABLE `user` ( `iUserID` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `sAccount` varchar(100) NOT NULL COMMENT '賬號', `sPassword` varchar(100) NOT NULL COMMENT '密碼', `dCreateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間', `iStatus` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '狀態欄位:1-正常,2-刪除', PRIMARY KEY (`iUserID`) // 主鍵 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='使用者表'; -------------------------------------------------------------------------------------------------------- 2,mysql常用函式 DISTINCT1 // 去重 in(1,2) // 相當於 is_array() 或者 || concat()函式 // 將多個字串連線成一個字串。 concat_ws()函式 // 和concat()一樣,將多個字串連線成一個字串,但是可以一次性指定分隔符 group_concat( [DISTINCT] 要連線的欄位 [Order BY 排序欄位 ASC/DESC] [Separator '分隔符'] ) like: select sRoleID,GROUP_CONCAT(iUserID) as UId from reports where iStatus=1 group by sRoleID; --------------------------------------------------------------------------------------------------------- 3,時間欄位型別: datetime: “yyyy-mm-dd hh:mm:ss”格式 【 最常用 】 timestamp: “yyyymmddhhmmss”格式表示的時間戳值 year: “yyyy”格式的年份值。 ||| timestamp 19700101000000 到2037 年的某個時刻 4位元組 date “1000-01-01”到“9999-12-31” 3位元組 ************************************************************************************* `dPublishTime` datetime NOT NULL COMMENT '釋出時間', `dCreateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間', ************************************************************************************* --------------------------------------------------------------------------------------------------------- 4,插入資料庫: INSERT INTO `t_user` VALUES ('1', 'admin', '123456', '2018-01-01 09:00:00', '1'); --------------------------------------------------------------------------------------------------------- 5,當資料庫中存在某個記錄時,執行這條語句會更新它,而不存在這條記錄時,會插入它 CREATE TABLE `t_stock_chg` ( `f_market` varchar(64) NOT NULL COMMENT '市場', `f_stockID` varchar(10) NOT NULL DEFAULT '' COMMENT '股票程式碼', `f_updatetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '插入時間戳', `f_name` varchar(16) DEFAULT NULL COMMENT '股票名稱', PRIMARY KEY (`f_market`,`f_stockID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 語法:INSERT INTO tablename(field1,field2, field3, ...) VALUES(value1, value2, value3, ...) ON DUPLICATE KEY UPDATE field1=value1,field2=value2, field3=value3, ...; INSERT INTO t_stock_chg(f_market, f_stockID, f_name) VALUES('SH', '600000', '白雲機場') ON DUPLICATE KEY UPDATE f_market='SH', f_name='浦發銀行'; --------------------------------------------------------------------------------------------------------- 6.GROUP_CONCAT ( [DISTINCT] 要連線的欄位 [Order BY 排序欄位 ASC/DESC] [Separator '分隔符'] ) 參考:https://www.cnblogs.com/jkko123/p/6294718.html select sRoleID,GROUP_CONCAT(iUserID) as UId from reports where iStatus=1 group by sRoleID; --------------------------------------------------------------------------------------------------------- 7,修改欄位值: // concat_ws()函式 // 和concat()一樣,將多個字串連線成一個字串,但是可以一次性指定分隔符 UPDATE `graphicitem` SET memo = CONCAT_WS(' ',memo , '原創畫稿') WHERE memo LIKE '%pop原創%'; UPDATE `fabricgallery_item` SET memo = CONCAT_WS(' ',memo , '原創畫稿') WHERE memo LIKE '%pop原創%'; --------------------------------------------------------------------------------------------------------- 8,增加欄位,在 AFTER `sName` 後面: ALTER TABLE `positions` ADD `sEnsName` varchar(255) NOT NULL COMMENT '英文職務名稱' AFTER `sName` ; --------------------------------------------------------------------------------------------------------- 9, MySQL 修改欄位型別或長度 alter table 表名 modify column 欄位名 型別; --------------------------------------------------------------------------------------------------------- 10,修改欄位型別、設定預設值,以及添加註釋: ALTER TABLE m_cultureact_gzl MODIFY COLUMN SIGN INT(1) DEFAULT 1 COMMENT '為了給前臺區分是列表訂票還是票務中 =========================================================================================================== 二,MySQL檢視: 參考:https://blog.csdn.net/moxigandashu/article/details/63254901 https://www.cnblogs.com/geaozhang/p/6792369.html // 兩張表聯查,中文表report的資料庫表字段的值不變,翻譯表隨著操作(增刪改查)改變 // 強制使用ALGORITHM = MERGE函式 DROP VIEW `translate_view`; CREATE ALGORITHM = MERGE VIEW `translate_view` ( iTopicId, iOriginColumn, iGender, sIndustry, iSeason, dPubTime, sTitle, sImgPath, ml_id, ml_sTitle, ml_iTranslatorId, ml_iTranslateStatus, ml_dTranslateTime, ml_iVerifyId, ml_iVerifyStatus, ml_dVerifyTime, ml_iPublishId, ml_iPublishStatus, ml_dPublishTime ) AS ( SELECT `A`.`iTopicId` AS `iTopicId`, `A`.`iOriginColumn` AS `iOriginColumn`, `A`.`iGender` AS `iGender`, `A`.`sIndustry` AS `sIndustry`, `A`.`iSeason` AS `iSeason`, `A`.`dPubTime` AS `dPubTime`, `A`.`sTitle` AS `sTitle`, `A`.`sImgPath` AS `sImgPath`, `B`.`id` AS `ml_id`, `B`.`sTitle` AS `ml_sTitle`, `B`.`iTranslatorId` AS `ml_iTranslatorId`, ifnull(`B`.`iTranslateStatus`, 2) AS `ml_iTranslateStatus`, // IFNULL(expr1,expr2) ;如果 expr1 不是 NULL,IFNULL() 返回 expr1,否則它返回 expr2 `B`.`dTranslateTime` AS `ml_dTranslateTime`, `B`.`iVerifyId` AS `ml_iVerifyId`, `B`.`iVerifyStatus` AS `ml_iVerifyStatus`, `B`.`dVerifyTime` AS `ml_dVerifyTime`, `B`.`iPublishId` AS `ml_iPublishId`, `B`.`iPublishStatus` AS `ml_iPublishStatus`, `B`.`dPublishTime` AS `ml_dPublishTime` FROM ( `report` `A` LEFT JOIN `report_translate` `B` ON ( ( `A`.`iTopicId` = `B`.`iTopicId` ) ) ) WHERE ( (`A`.`iStatus` = 0) AND ( (`B`.`iSubTopicId` = 0) OR isnull(`B`.`iSubTopicId`) ) ) ); ================================================================================================= 三,儲存過程(call)[ navicat 資料庫下的 函式] 參考:https://www.cnblogs.com/cxxjohnson/p/5965194.html // declare : 定義的變數類似java類中的區域性變數,僅在類中生效。即只在儲存過程中的begin和end之間生效 // 自定義變數:DECLARE a INT ; SET a=100; 可用以下語句代替:DECLARE a INT DEFAULT 100; // concat : mysql CONCAT()函式用於將多個字串連線成一個字串 // floor:函式只返回整數部分,小數部分捨棄 || round:函式四捨五入,大於0.5的部分進位,不到則捨棄 create procedure sp_name() // 建立儲存過程 ---------------------------------------------- BEGIN DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';// 驗證碼字串 DECLARE return_str varchar(255) DEFAULT t; DECLARE i INT DEFAULT 0; WHILE i < l DO SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*62 ),1)); SET i = i +1; END WHILE; RETURN return_str; END -------------------------------------------- call sp_name() // 呼叫儲存過程 drop procedure sp_nam // 刪除儲存過程