사실, Bash에서는 쿼리 결과를 테스트하는 것을 잊어 버립니다. 당신이 를 넣어 경우 thenumber
열이 기본 키 인 경우, 또는 :
INSERT INTO mylittletable(thenumber, thedate)
SELECT * FROM (SELECT '$THENUMBER', '$THEDATE') AS tmp
WHERE NOT EXISTS (
SELECT 1 FROM mylittletable WHERE thenumber = '$THENUMBER'
) LIMIT 1;
도 간단을 : 당신은 단지 하나의 SQL 쿼리를 사용하면 (존재하지 않는 경우에만 즉, 데이터를 삽입) 원하는 것을 할 수 있습니다 거기에 UNIQUE 제약, 당신은 단지 (같은 번호를 삽입 할 때 자동으로 실패이 쿼리를 만들 것입니다) INSERT IGNORE
가 사용할 수 있습니다
INSERT IGNORE INTO mylittletable VALUES ('$THENUMBER','$THEDATE');
개인적으로, 나는 그 두 번째 옵션과 함께 갈 것입니다. 그것은 당신의 데이터에 대한 의미가있는 경우 UNIQUE 제약 조건을 만드는 것이 좋습니다 (또는 테이블이 이미 하나를 가지고 있지 않은 경우 thenumber
기본 키를 만들) :
이
ALTER TABLE mylittletable ADD UNIQUE(thenumber);
편집 :
당신이 배쉬를 원하는 경우 문제의 경우 출력 뭔가, 그냥 INSERT
(IGNORE
없이)를 수행하고, MySQL의 클라이언트 프로그램의 종료 상태 사용 : 당신이 좋아하지 않는 경우 또는
echo "INSERT INTO mylittletable VALUES ($THENUMBER,'$THEDATE');" | mysql --host=192.168.0.0 --user=garfunkle --password=spatulaface mylovelydb 2> /dev/null || echo Warning!
을 긴 하나 - 라이너 : 경우
mysql --host=192.168.0.0 --user=garfunkle --password=spatulaface mylovelydb 2> /dev/null << EOF
INSERT INTO mylittletable VALUES ($THENUMBER,'$THEDATE');
EOF
if [ $? -neq 0 ]
then
echo Warning!
fi
당신이 익숙하지 않은는 ||
운영자는 배쉬에서 다음과 같이 사용된다 : 그래서 2> /dev/null
:
# If command1 fails, run command2
command1 || command2
# Silly example
ls myfile 2> /dev/null || echo "No myfile here!"
공지 또한 오류 리디렉션을 사용 오류는 콘솔에 출력되지 않습니다.
가능한 중복/7301780/put-results-of-mysql-command-line-query-into-bash-script-variable) –
도움이 되긴하지만, 실제로 "이미 존재한다면"비트가 필요합니다. .! –