Скрипт оболочки, который выполняет итерацию SQL-оператора «delete» - PullRequest
1 голос
/ 14 мая 2010

Мне нужен сценарий оболочки, который удаляет 1000 строк из массивной базы данных до тех пор, пока не останется больше строк

Это очень просто, но я очень слабо разбираюсь в сценариях оболочки, и многие онлайн-учебники предлагают очень похожие, но разные нюансы в синтаксисе

UPDATE:

  • Можно ли получить пример кода?
  • Мне нужно удалить 1000 строк за раз
  • У меня есть 120 миллионов строк для удаления в общей сложности, и удаление всех сразу заблокирует БД

Ответы [ 2 ]

1 голос
/ 18 апреля 2017

Просто надеюсь, что мой сценарий может помочь кому-то, кто ищет похожие вопросы

#!/bin/sh
# mysql_delta_del.sh 
# -----------------------------

db_user="root"
db_host="127.0.0.1"
db_passwd="yourpass"
db="yourdb"
db_table="mytable"
keep_records=10000000
## start id, you can change according your db
start_id=31000000

# mysql bin's path
MYSQL="$(which mysql)"


maxid=`$MYSQL -u $db_user -h $db_host -p$db_passwd $db -e 'select max(id) from $db_table'`

maxid=`echo $maxid |cut -d" " -f2`

#keep last 10 million records
delto=`echo $maxid - $keep_records  |bc`

echo "target id: $delto"


i=$start_id 
while [ $i -lt $delto ]
do
 echo "delete to $i "

 echo "DELETE FROM $db_table where id<$i LIMIT 1000 " | mysql -u $db_user -p$db_passwd -h $db_host $db
 true $(( i=i+1000 ))

done
0 голосов
/ 15 мая 2010

Вы можете вызвать инструмент командной строки mysql:

mysql -u username -p password < statements.txt

или

echo "your statement here" | mysql -u username -p password

в заявлении.txt положить:

delete from `table` limit 1000;

хотя я не понимаю, почему вы хотите удалить только 1К одновременно

полный скрипт для sh будет выглядеть так:

#!/bin/sh
echo 'DELETE FROM `table` LIMIT 1000;' | mysql -u username -p password
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...