MySqlエラーを無視して次のクエリを続行するには?

MySqlエラーを無視して次のクエリを続行するには?

DateBaseに接続し、データベースに一度だけ接続して、dhcpd.logファイルからIPとMAC​​を挿入するシェルスクリプトを作成しました。

#/!bin/bash
dhcpLogFile="/var/log/dhcpd.log"
NumberOfLines=$(awk '/DHCPACK/ { print $8} ' $dhcpLogFile | awk '!x[$0]++'|awk 'BEGIN{i=0}{i++;}END{print i}')
j=1
while [ $NumberOfLines -gt 0 ]
do
ip=$(awk '/DHCPACK/ { print $8} ' $dhcpLogFile | awk '!x[$0]++' |cut -f$j -d$'\n')
mac=$(awk '/DHCPACK/ { print $10} ' $dhcpLogFile | awk '!x[$0]++' |cut -f$j -d$'\n')  
let "j +=1"
let "NumberOfLines -=1"
INSERT INTO IP_MACTable (IP_Address, MAC) VALUES ('$ip','$mac');
done | mysql -u root --password='pw' MatchingDB

MySqlでは、「IP、MAC」属性を一意に設定して、「ip、ma​​c」フィールドが繰り返されないようにしました。したがって、dhcp.logのログでこのフィールドが繰り返されると、データベースはメッセージで応答します。ERROR 1062 (23000) at line 1: Duplicate entry '192.168.1.20-00:0c:29:95:fd:10' for key 'IP_Address'
私の質問は例です。データベースに一度だけ接続すると、SQLは1つの接続で複数のクエリを解釈しますが、問題は、エラーが発生した場合に別のクエリの解釈が完了しないことです。それでは、これはSQLエラーを無視して他のクエリを実行し続ける方法ですか? ?

ベストアンサー1

次のように挿入文を更新してください。

INSERT IGNORE INTO IP_MACTable (IP_Address, MAC) VALUES ('$ip','$mac');

--forceオプションを使用して、エラーが発生したときにmysqlを実行し続けることもできます。

mysql -u root --password='pw' --force MatchingDB

おすすめ記事