国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JAVA開發(fā)(手工處理數(shù)據(jù)庫表數(shù)據(jù)的一些示例算法)

這篇具有很好參考價值的文章主要介紹了JAVA開發(fā)(手工處理數(shù)據(jù)庫表數(shù)據(jù)的一些示例算法)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

背景:

在項(xiàng)目開發(fā)中,有時候需要手動處理一下數(shù)據(jù)庫表的數(shù)據(jù)。涉及到數(shù)據(jù)得到備份、恢復(fù),清洗,計算,合并等操作。

舉例記錄一下最近對數(shù)據(jù)的一些處理過程。

1、對數(shù)據(jù)表進(jìn)行數(shù)據(jù)量統(tǒng)計

select count(*) from  table_a;

2、記住數(shù)據(jù)庫表的數(shù)據(jù),然后進(jìn)行備份

create table table_a_bak as  select * from  table_a where  1 = 1;

3、我們再對數(shù)據(jù)進(jìn)行處理之前一定記得進(jìn)行備份,以防錯誤的操作后能將數(shù)據(jù)恢復(fù),或最大程度的恢復(fù),這是一個好習(xí)慣。然后我們才開始對數(shù)據(jù)進(jìn)行處理。

4、建立一個臨時表導(dǎo)入需要處理的數(shù)據(jù)。一般臨時表最好是 tmp_開頭,這也是一個好習(xí)慣,方便數(shù)據(jù)計算完后,對臨時表進(jìn)行刪除,以免誤刪。

create table  tmp_table_a as  select * from  table_a where 1 = 2;

5、對表數(shù)據(jù)進(jìn)行去重的操作,先查詢看看有多少手機(jī)號重復(fù)的記錄。

select count(1)  from  (
select  phone ,count(1) cn  from  table_a where  phone is  not  null   group  by phone ) t where t.cn > 1  ;

6、多數(shù)據(jù)進(jìn)行去重。先對table_a表進(jìn)行接收

drop  table  tmp_table_a_1;
create  table  tmp_table_a_1 as
select * from  (
select  phone ,count(1) cn  from  table_a  where  phone is  not  null   group  by phone ) t where t.cn > 1  ;

7、tmp_table_a_1增加一個自增的id字段,先建立一個SEQUENCE

CREATE SEQUENCE tmp_table_a_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;

給id增加自增約束

alter table tmp_table_a_1 alter column id set default nextval('tmp_table_a_id_seq'); 

8、將數(shù)據(jù)重新插回tmp_table_a_1 ,先清空tmp_table_a_1

清空數(shù)據(jù)

truncate table tmp_table_a_1 ;

插回數(shù)據(jù)

INSERT INTO tmp_table_a_1 
( user_id, phone, user_name, id_card, wx_account, state, app_id, app_name, head_icon, sex, sex_name, reg_time, user_state, user_state_name, open_id, opt_user, birthday_type, birthday, org_name, last_trading_time, org_code, union_id, orig_phone, update_time, belong_code, belong_name, data_type, client_num, client_name, country_code, inviter, channel_id, channel_name, company)
select  user_id, phone, user_name, id_card, wx_account, state, app_id, app_name, head_icon, sex, sex_name, reg_time, user_state, user_state_name, open_id, opt_user, birthday_type, birthday, org_name, last_trading_time, org_code, union_id, orig_phone, update_time, belong_code, belong_name, data_type, client_num, client_name, country_code, inviter, channel_id, channel_name, company
from  table_a;

9、去重操作

DELETE FROM tmp_table_a_1
WHERE id
NOT IN (
SELECT max(id)
FROM tmp_table_a_1
GROUP BY  phone
);

10、A表中有但是B表中沒有的數(shù)據(jù)

drop table if exists tmp_table_a_2;
create table tmp_table_a_2 as
select  t1.* from tmp_table_a_1 t1
left join tmp_table_b_1 t2
on t1.phone = t2.phone
where t2.phone is null;

JAVA開發(fā)(手工處理數(shù)據(jù)庫表數(shù)據(jù)的一些示例算法)

MySQL 存儲過程是一組為了完成特定功能的 SQL 語句集合。你可以將存儲過程看作是一個在數(shù)據(jù)庫中存儲的腳本,它可以被多次調(diào)用,并在需要時執(zhí)行。存儲過程可以包含邏輯控制語句和數(shù)據(jù)操作語句,可以接受參數(shù)、返回單個或多個結(jié)果,也可以不返回任何結(jié)果。

存儲過程的基本語法

  1. 創(chuàng)建存儲過程

 

sql復(fù)制代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-465809.html

DELIMITER //
CREATE PROCEDURE procedure_name([parameters])
BEGIN
-- SQL語句
END //
DELIMITER ;

其中,DELIMITER?是用來改變SQL語句的結(jié)束符的。因?yàn)榇鎯^程中可能包含多條 SQL 語句,所以我們需要改變默認(rèn)的結(jié)束符(;)以避免沖突。
2.?調(diào)用存儲過程

 

sql復(fù)制代碼

CALL procedure_name(arguments);
  1. 查看存儲過程

使用?SHOW CREATE PROCEDURE procedure_name;?可以查看存儲過程的定義。
4.?刪除存儲過程

 

sql復(fù)制代碼

DROP PROCEDURE IF EXISTS procedure_name;

存儲過程的參數(shù)類型

  • IN:輸入?yún)?shù),表示該參數(shù)的值必須在調(diào)用存儲過程時指定,在存儲過程中修改該參數(shù)的值不會被返回。
  • OUT:輸出參數(shù),可以在存儲過程中改變其值,并可返回。
  • INOUT:輸入輸出參數(shù),調(diào)用時指定,并且可被改變和返回。

存儲過程的優(yōu)點(diǎn)

  1. 代碼重用:存儲過程只需要編寫一次,然后可以在多個地方多次調(diào)用。
  2. 性能優(yōu)化:MySQL 會對存儲過程進(jìn)行編譯和優(yōu)化,提高執(zhí)行效率。
  3. 安全性:可以通過權(quán)限設(shè)置來限制對數(shù)據(jù)的訪問,只允許用戶通過特定的存儲過程來訪問數(shù)據(jù)。
  4. 減少網(wǎng)絡(luò)通信:多個 SQL 語句可以在一個存儲過程中執(zhí)行,從而減少客戶端和服務(wù)器之間的通信次數(shù)。
  5. 更好的錯誤處理:可以使用 TRY...CATCH 來處理執(zhí)行過程中可能出現(xiàn)的錯誤。

示例:一個簡單的存儲過程

下面是一個簡單的存儲過程示例,該存儲過程接受一個參數(shù)(學(xué)生ID),并返回該學(xué)生的姓名和年齡。

 

sql復(fù)制代碼

DELIMITER //
CREATE PROCEDURE GetStudentInfo(IN student_id INT, OUT student_name VARCHAR(100), OUT student_age INT)
BEGIN
SELECT name, age INTO student_name, student_age FROM students WHERE id = student_id;
END //
DELIMITER ;

調(diào)用這個存儲過程的示例:

 

sql復(fù)制代碼

CALL GetStudentInfo(1, @name, @age);
SELECT @name AS 'Name', @age AS 'Age';

到了這里,關(guān)于JAVA開發(fā)(手工處理數(shù)據(jù)庫表數(shù)據(jù)的一些示例算法)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包