shell腳本獲取mysql插入數據自增長id的值
在shell腳本中我們可以通過last_insert_id()獲取id值,但是,需要注意的是,該函數必須在執行插入操作的sql語句之后,立即調用,否則獲取的值就為0,LAST_INSERT_ID 是與table無關的,如果向表a插入數據后,在向表b插入數據,LAST_INSERT_ID會改變。當然還有其他方法:
1. select max(id) from tablename;
2. select @@IDENTITY;
3. SHOW TABLE STATUS;
具體的差別和各自具體的特征,本文不再敘述,自行百度即可.
本文主要以LAST_INSERT_ID()為例:
錯誤代碼示例如下:
echo
$($MYSQL -e "INSERT INTO problem_logger VALUES (null,$REPORT_DATE,$FIXED_DATE,'$PROB_SYMPTOMS','$PROB_SOLUTIONS');")
id=$($MYSQL -e "SELECT LAST_INSERT_ID() id")
id=`echo $id | gawk '{print $2}'`
$MYSQL <<EOF
SELECT * FROM problem_logger where id_number=$id\G
EOF
#######上述代碼獲取到的id值就為0,而不是我們期望的值
正確的代碼如下:
echo
$($MYSQL -e "INSERT INTO problem_logger VALUES (null,$REPORT_DATE,$FIXED_DATE,'$PROB_SYMPTOMS','$PROB_SOLUTIONS');")
id=$($MYSQL -e "SELECT LAST_INSERT_ID() id")
id=`echo $id | gawk '{print $2}'`
$MYSQL <<EOF
SELECT * FROM problem_logger where id_number=$id\G
EOF
完整的訪問數據庫,插入數據,並獲取自增id值的shell腳本如下:
########備注:1. 數據庫名稱:Problem_Trek 操作的表名稱:problem_logger
#!/bin/bash
#
# Record_Problem - records system problems in database
#
###########################################################
#
# Determine mysql location & put into variable
#
MYSQL=which mysql
" Problem_Trek -u root"
#
###########################################################
#
# Create Record Id & Report_Date
#
#ID_NUMBER=date +%y%m%d%H%M
#
REPORT_DATE=date +%y%m%d
#
############################################################
#
# Acquire information to put into table
#
echo
echo -e "Birefly describe the problem & its symptoms: \c"
#
read ANSWER
PROB_SYMPTOMS=$ANSWER
#
# Set Fixed Date & Problem Solution to null for now
#
FIXED_DATE=0
PROB_SOLUTIONS=""
#
#############################################################
#
# Insert acquired information into table
#
echo
echo "Problem recorded as follows:"
echo
id=$($MYSQL -e "INSERT INTO problem_logger VALUES (null,$REPORT_DATE,$FIXED_DATE,'$PROB_SYMPTOMS','$PROB_SOLUTIONS');SELECT LAST_INSERT_ID() id")
id=echo $id | gawk '{print $2}'
$MYSQL <<EOF
SELECT * FROM problem_logger where id_number=$id\G
EOF
#
#############################################################
#
# Check if want to enter a solution now
#
echo
echo -e "Do you have a solution yet?(y/n) \c"
read ANSWER
#
case $ANSWER in
y|Y|YES|yes|Yes|yEs|yeS|YEs|yES)
./Update_Problem.sh $id
#
;;
*)
# if answer is anything but yes, just exit script
;;
esac
#
############################################################