データベース(mySql)のレコードを新しいレコードに置き換えるには?

データベース(mySql)のレコードを新しいレコードに置き換えるには?

データベースに接続し、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"
mysql -u root --password='pw' MatchingDB <<- _END_ 
INSERT INTO IP_MACTable (IP_Address, MAC) VALUES ('$ip','$mac');
_END_
done

私の質問は、ip属性が重複しているときに既存のレコードを置き換え、ip属性が重複していないときに新しいレコードを正常に挿入するように上記の挿入クエリを変更する方法です。

このようなことを試しましたが、引き続きエラー(構文エラー)が返されます。

INSERT INTO IP_MACTable (IP_Address, MAC) VALUES ('$ip','$mac') 
ON DUPLICATE KEY UPDATE MAC = VALUES('$mac')

私のサーバーによると、エラーは次のとおりです。near '$mac')

エラーコードは#1064です。

ベストアンサー1

インサートは次のように変更できます。

INSERT INTO IP_MACTable (IP_Address, MAC) VALUES ('$ip','$mac') 
ON DUPLICATE KEY UPDATE MAC = VALUES('$mac')

おすすめ記事