데이터베이스 에 있 는 모든 데이터 시트 의 완전 중복 기록 을 원 키 로 되 돌려 줍 니 다.
4367 단어 Shell
selectinct 이 명령 은 무 거 운 데 이 터 를 조회 하 는 것 입 니 다. 나중에 추가 하면 * 그렇다면 모든 필드 에서 무 거 운 데 이 터 를 조회 하 는 것 입 니 다.어떤 필드 의 데 이 터 를 다시 검색 하려 면 데이터베이스 에서 distinct 필드 를 선택 하 십시오. 데이터 시트;
그러나 주의해 야 할 조건:
1. 먼저 원본 데이터 베 이 스 를 백업 해 야 합 니 다 (이것 은 필수 입 니 다)
2. 그 다음 에 데이터베이스 에서 몇 개의 (또는 모든 표) 표를 골 라 서 표 안의 기록 이 몇 개 있 는 지 확인 하고 뒤의 검증 에 사용 할 수 있 습 니 다.
데이터베이스 에서 count (1) 를 선택 하 십시오. 데이터 시트;
3. 한 표 또는 몇 개의 표 에 대해 데 이 터 를 만 들 고 업데이트 하여 뒤의 검증 에 사용 할 수 있 습 니 다.
#!/bin/bash
#
database_name="test"
database_user="root"
database_user_password='123456'
################################################ ################################################
##
old_table_name=`mysql -u"$database_user" -p"$database_user_password" -e "use "$database_name";show tables" | grep -v Tables_in_`
#
echo "$old_table_name" > /root/old_table_name.txt
#
num_old_tab_name=`cat /root/old_table_name.txt | wc -l`
####################################################################################################################
#
function create_new_table
{
echo -e "\033[032m , \033[0m"
for ((notn=1;notn<="$num_old_tab_name";notn++))
do
old_tab_name=`sed -n "$notn"p /root/old_table_name.txt`
new_tab=`mysql -u"$database_user" -p"$database_user_password" -e "use "$database_name";create table New_"$old_tab_name" select distinct * from "$old_tab_name" "`
echo "$new_tab" #
done
}
# 。 , , .
function delete_data_tables
{
echo -e "\033[032m \033[0m"
echo -e "\033[031m , ! \033[0m"
for ((notns=1;notns<="$num_old_tab_name";notns++)); do
old_table_names=`sed -n "$notns"p /root/old_table_name.txt`
del=`mysql -u"$database_user" -p"$database_user_password" -e "use "$database_name";delete from "$old_table_names" "`
echo "$del" #
done
}
# ,
function select_old_tabs
{
echo -e "\033[032m , , \033[0m"
for (( odt = 1; odt <= "$num_old_tab_name"; odt++ )); do
old_tab_names=`sed -n "$odt"p /root/old_table_name.txt`
select_old_tabs=`mysql -u"$database_user" -p"$database_user_password" -e "use "$database_name";select * from "$old_tab_names""`
echo "$select_old_tabs" #
done
}
#
function insert_data_table
{
echo -e "\033[032m \033[0m"
# ,
for ((i=1;i<="$num_old_tab_name";i++))
do
# ,
tab_name=`sed -n "$i"p /root/old_table_name.txt`
insert_data=`mysql -u"$database_user" -p"$database_user_password" -e "use "$database_name";insert into "$tab_name" select * from New_"$tab_name";"`
echo "$insert_data" #
done
}
#
function del_new_tables
{
echo -e "\033[032m \033[0m"
#
new_tables_name=`mysql -u"$database_user" -p"$database_user_password" -e "use "$database_name";show tables;" | grep -v Tables_in_"$database_name" | grep ^New_`
#
echo "$new_tables_name" > /root/new_tab.txt
# new_num
new_num=`cat /root/new_tab.txt | wc -l`
#
for ((d=1;d<="$new_num";d++))
do
new_tab_name=`sed -n "$d"p /root/new_tab.txt`
dnt=`mysql -u"$database_user" -p"$database_user_password" -e "use "$database_name";drop table "$new_tab_name""`
echo "$dnt" #
done
}
create_new_table
delete_data_tables
delete_data_tables
select_old_tabs
insert_data_table
del_new_tables
#
rm -rf /root/new_tab.txt
rm -rf /root/old_table_name.txt
echo -e "\033[035m /root , ! \033[0m"
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Shell alias 명령에 별칭을 설정하는 방법명령에 별명을 설정하면 명령의'작은 이름'으로 삼을 수 있지만, 이렇게 하는 것이 무슨 의미가 있습니까? 이때 별명이 작용할 수 있다.vim 명령의 별명을vi라고 정의하면 이후에 실행된vi 명령은 실제로vim 명령을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.