一、mysql 判斷字符串是否爲數字:mysql
CHAR_LENGTH(字符串) = CHAR_LENGTH(CAST(字符串 AS UNSIGNED INTEGER))sql
二、mysql UNION使用:數據庫
select1 union select2數據結構
select1和select2 的字段名稱及字段的順序必須保持一致,而且結果會默認去掉重複的記錄spa
select1 union all select2code
select1和select2 的字段名稱及字段的順序必須保持一致,結果不會去重。server
三、mysql 使用外鍵實現級聯刪除和更新(當刪除主表的一條記錄時,從表中與之對應的記錄也會被刪除)blog
以獲取京東訂單的數據結構舉例:開發
主表:jd_orderrem
CREATE TABLE `jd_order` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`order_id` varchar(45) DEFAULT NULL,
`order_source` varchar(45) DEFAULT NULL,
`customs` varchar(45) DEFAULT NULL,
`customs_model` varchar(45) DEFAULT NULL,
`vender_id` varchar(45) DEFAULT NULL,
`pay_type` varchar(45) DEFAULT NULL,
`order_total_price` varchar(45) DEFAULT NULL,
`order_seller_price`varchar(45) DEFAULT NULL,
`order_payment` varchar(45) DEFAULT NULL,
`freight_price` varchar(45) DEFAULT NULL,
`seller_discount` varchar(45) DEFAULT NULL,
`order_state` varchar(45) DEFAULT NULL,
`order_state_remark` varchar(45) DEFAULT NULL,
`delivery_type` varchar(45) DEFAULT NULL,
`invoice_info` varchar(45) DEFAULT NULL,
`order_remark` varchar(45) DEFAULT NULL,
`order_start_time` varchar(45) DEFAULT NULL,
`order_end_time` varchar(45) DEFAULT NULL,
`modified` varchar(45) DEFAULT NULL,
`vender_remark` varchar(45) DEFAULT NULL,
`balance_used` varchar(45) DEFAULT NULL,
`payment_confirm_time` varchar(45) NOT NULL,
`waybill` varchar(45) DEFAULT NULL,
`logistics_id` varchar(45) DEFAULT NULL,
`vat_invoice_info` varchar(45) DEFAULT NULL,
`parent_order_id` varchar(45) DEFAULT NULL,
`pin` varchar(45) DEFAULT NULL,
`return_order` varchar(45) DEFAULT NULL,
`order_type` varchar(45) DEFAULT NULL,
`store_order` varchar(45) DEFAULT NULL,
`flag1` tinyint(4) NOT NULL DEFAULT '0',
`flag2` tinyint(4) NOT NULL DEFAULT '0',
`flag3` tinyint(4) NOT NULL DEFAULT '0',
`REMARK1` varchar(255) DEFAULT NULL,
`REMARK2` varchar(255) DEFAULT NULL,
`REMARK3` varchar(255) DEFAULT NULL,
`REMARK4` varchar(255) DEFAULT NULL,
`NEWUID` int(10) unsigned DEFAULT NULL,
`NEWTID` varchar(45) DEFAULT NULL,
`NEWTIME` char(17) DEFAULT NULL,
`UPDUID` int(10) unsigned DEFAULT NULL,
`UPDTID` varchar(45) DEFAULT NULL,
`UPDTIME` char(17) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `order_id` (`order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=260251 DEFAULT CHARSET=utf8;
從表:jd_ordercoupon
CREATE TABLE `jd_ordercoupon` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`order_id` varchar(45) DEFAULT NULL,
`sku_id` varchar(45) DEFAULT NULL,
`coupon_type` varchar(45) DEFAULT NULL,
`coupon_price` varchar(45) DEFAULT NULL,
`flag1` tinyint(4) NOT NULL DEFAULT '0',
`flag2` tinyint(4) NOT NULL DEFAULT '0',
`flag3` tinyint(4) NOT NULL DEFAULT '0',
`REMARK1` varchar(255) DEFAULT NULL,
`REMARK2` varchar(255) DEFAULT NULL,
`REMARK3` varchar(255) DEFAULT NULL,
`REMARK4` varchar(255) DEFAULT NULL,
`NEWUID` int(10) unsigned DEFAULT NULL,
`NEWTID` varchar(45) DEFAULT NULL,
`NEWTIME` char(17) DEFAULT NULL,
`UPDUID` int(10) unsigned DEFAULT NULL,
`UPDTID` varchar(45) DEFAULT NULL,
`UPDTIME` char(17) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `order_id` (`order_id`),
CONSTRAINT `jd_ordercoupon` FOREIGN KEY (`order_id`) REFERENCES `jd_order` (`order_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=260251 DEFAULT CHARSET=utf8;
以上是建立兩個表jd_order和jd_ordercoupon,
CONSTRAINT `jd_ordercoupon` FOREIGN KEY (`order_id`) REFERENCES `jd_order` (`order_id`) ON DELETE CASCADE ON UPDATE CASCADE
這段sql語句表示的就是將主表jd_order的order_id字段作爲從表jd_ordercoupon的外鍵,以達到級聯刪除和更新的效果。
四、insert into:
1)插入新行時使用以下語句插入,字段與值必須一 一對應。表中未列出的字段值爲其默認值。
INSERT INTO table_name (字段1,字段2,字段3) VALUES(值1,值2,值3)
2)插入新行時使用以下語句插入,必須將表中全部值都列出。
INSERT INTO table_name VALUES(值1,值2,值3,...)
五、update:
1)、UPDATE table_name SET 字段1=新值1,字段2=新值2,字段3=新值3 WHERE 字段1=值1
2)、update test set 字段1=case when 條件1 then 值1 when 條件2 then 值2 end
六、delete
DELETE FROM 表名稱 WHERE 列名稱=值
七、存儲過程
建立存儲過程
create procedure P_LoadPageData(in pageIndex int,in pageSize int,out total int) begin declare iPageIndex int; //mysql中在存儲過程當中聲明變量 set iPageIndex=(pageIndex-1)*pageSize; //給變量賦值 select * from t_game order by ID limit iPageIndex,pageSize; //mysql中必定範圍條數數據用limit,sql server中用top。limit關鍵字後面只能跟整數,不能跟表達式(若是須要用到表達式就將表達式賦值給一個變量) select count('a') into total from t_game; //mysql中將查詢結果賦值給變量,sql server 中select total=count('a') from t_game; end
調用存儲過程
call P_LoadPageData(1,2,@a); select @a;
存儲過程優勢:
1)、比Donet直接寫sql腳本執行少了一塊解析編譯的過程,效率更快一點(不是很明顯)
2)、使用存儲過程,業務邏輯改變的時候只須要改變存儲過程,而後業務邏輯就發生變化了,不須要修改C#代碼
3)、傳遞sql腳本數據相對小
缺點:
1)、使用存儲過程,數據庫可移植性差
2)、把業務放到存儲過程裏面,至關於業務處理的壓力放到數據庫裏面去
存儲過程的使用注意:
1)、由於存儲過程是讓數據庫來處理邏輯,這就增長了數據庫的負擔,而數據庫達到瓶頸以後進行集羣分流的難度比起在業務層來作集羣,作分流的難度要大得多,因此建議
除非在很是有必要的時候用存儲過程,其他時候能不用存儲過程就不用。在開發的過程當中最好都使用sql腳本的方式來實現邏輯,避免使用存儲過程。