mysql筆記

一、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腳本的方式來實現邏輯,避免使用存儲過程。

相關文章
相關標籤/搜索