-
uuu查看全部
-
并發性數據查看全部
-
#慕課最后一題 CREATE TEMPORARY TABLE im_tuser AS ( SELECT c.id, replace( substring( substring_index(c.phone, ',', a.id), char_length( substring_index(c.phone, ',', a.id - 1) ) + 1), ',', '') AS phone FROM im_sequence AS a CROSS JOIN ( SELECT b.id, concat(b.phone, ',') AS phone, length(b.phone) - length(replace(b.phone, ',', '')) + 1 AS size FROM im_userrepect AS b ) AS c ON a.id <= c.size ); 我設計的表只有id和phone,以上是列轉行存為臨時表查看全部
-
完善一下存儲過程,添加表 #唯一序列號 獲取當前年月日+3位流水號 #用orser_seq判斷插入最大值 DROP PROCEDURE IF EXISTS usp_seqnum; CREATE PROCEDURE usp_seqnum() BEGIN #定義變量并獲取相關值 DECLARE v_cnt INT; DECLARE v_timestr INT; SET v_timestr = DATE_FORMAT(NOW(),'%Y%m%d'); SELECT ROUND(RAND()*100,0)+1 INTO v_cnt; #新建表 DROP TABLE IF EXISTS im_orderseq; CREATE TABLE im_orderseq( timestr NVARCHAR(8) NOT NULL , ordersn INT(3) ); START TRANSACTION; #更新表的最值 UPDATE im_orderseq SET ordersn = ordersn + v_cnt WHERE timestr = v_timestr; IF ROW_COUNT() = 0 THEN #插入數據 INSERT INTO im_orderseq(timestr,ordersn) VALUES(v_timestr,v_cnt); END IF; SELECT CONCAT(v_timestr,LPAD(ordersn,7,0))AS ordersn FROM im_orderseq WHERE timestr = v_timestr; COMMIT; END; CALL usp_seqnum(); SELECT * FROM im_orderseq;查看全部
-
分享一個序列表的存儲過程 DROP PROCEDURE IF EXISTS usp_getseqtable; CREATE PROCEDURE usp_getseqtable( IN id INT ) BEGIN DECLARE i INT; DROP TABLE IF EXISTS im_sequence; CREATE TABLE im_sequence ( id INT AUTO_INCREMENT PRIMARY KEY )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; SET i=1; WHILE i <= id DO #插入表數據 INSERT INTO im_sequence VALUES (NULL); SET i = i + 1; END WHILE; END; CALL usp_getseqtable(20)查看全部
-
特殊sql生成序列號查看全部
-
列行轉換查看全部
-
1.判斷數據是否重復: SELECT user_name , over, count(*) FROM user1_test GROUP BY user_name, over HAVING count(*)>1 2.刪除重復數據,對于相同數據保留ID最大的 DELETE * FROM user1_test a JOIN( SELECT user_name,COUNT(*),MAX(id) AS id FROM user1_test GROUP BY user_name HAVING COUNT(*) > 1 ) b ON a.user_name = b.user_name WHERE a.id < b.id 3.將表中查詢的數據再次插入到表中 INSERT INTO xmss_wh(XM_ID,WH_ID,YJ,SH,SHR,FJ_NAME,FJ_ID) SELECT XM_ID,WH_ID,YJ,SH,SHR,FJ_NAME,FJ_ID FROM xmss_wh WHERE ID=28; sql中的group by 用法解析: Group By語句從英文的字面意義上理解就是“根據(by)一定的規則進行分組(Group)”。 它的作用是通過一定的規則將一個數據集劃分成若干個小的區域,然后針對若干個小區域進行數據處理。 --注意:group by 是先排序后分組; --舉例子說明:如果要用到group by 一般用到的就是“每這個字” 例如說明現在有一個這樣的表:每個部門有多少人 就要用到分組的技術 select DepartmentID as '部門名稱', COUNT(*) as '個數' from BasicDepartment group by DepartmentID 這個就是使用了group by +字段進行了分組,其中我們就可以理解為我們按照了部門的名稱ID DepartmentID將數據集進行了分組;然后再進行各個組的統計數據分別有多少; 如果不用count(*)等類似函數 select DepartmentID,DepartmentName from BasicDepartment group by DepartmentID 將會報錯查看全部
-
更復雜的重復刪除:屬性中有相同的字段 1、想將屬性通過單列轉多行得到新的表 2、再刪除重復數據 3、再利用GROUP BY CONCAT回復成原表查看全部
-
判斷數據是否重復:GROUP BY column_name HAVING COUNT(*)>=2; 通過多表刪除 GROUP BY后,相當于形成一個一個單獨的表查看全部
-
存儲過程,訂單號: DECLARE v_cnt INT; DECLARE v_timestr INT; DECLARE rowcount BIGINT; SET v_timestr = DATE_FORMAT(NOW(),'%Y%m%d'); SELECT ROUND(RAND()*100,0)+1 INTO v_cnt; START TRANSACTION; UPDATE order_seq SET order_sn = order_sn + v_cnt WHERE timestr = v_timestr; IF ROW_COUNT() = 0 THEN INSERT INTO order_seq(timestr,order_sn) VALUES(v_timestr,v_cnt); END IF; SELECT CONCAT(v_timestr,LPAD(order_sn,7,0))AS order_sn FROM order_seq WHERE timestr = v_timestr; COMMIT; 知識點: 1、在sql語句中添加變量。 declare @local_variable data_type 聲明時需要指定變量的類型,可以使用SET、SELECT、SELECT...INTO對變量進行賦值,在sql語句中就可以使用@local_variable來調用變量。 2、RAND()返回一個介于 0 到 1(不包括 0 和 1)之間的偽隨機 float 值。 3、事務 4、ROW_COUNT()函數返回查詢語句執行后,被影響的列數目 5、IF...THEN...END IF;查看全部
-
唯一序列號: 場景:數據庫主鍵、業務序列號 優先選擇系統提供的序列號生成方式。當可能會有空洞產生。 特殊情況下可使用SQL方式生成序列號,如要求有一定規律,不一定由數字構成 系統生成方法: rollback數據回滾查看全部
-
使用序列化表進行行列轉換。查看全部
-
可使用UNION來實現多列轉行查看全部
舉報
0/150
提交
取消