创建表如果不存在挂起

时间:2013-07-11 17:40:21

标签: mysql bash amazon-web-services create-table

我还是新手使用数据库,但目前我正在使用mysql数据库,并试图使我的bash脚本牢不可破,因为它可能在几个不同的环境(dev,qa等)中使用。我知道如果没有这一行,它将正确运行。

CREATE TABLE IF NOT EXISTS backupfiles (fileName VARCHAR(20), archiveId VARCHAR(500), checkSum VARCHAR(100), glacierVault VARCHAR(100), timeStamp date);

我也知道,如果我把那条确切的行放到我的数据库中,那个表不存在那么它就会完美运行,如果确实存在,它会给我一个警告,但不会中断。

+-------+------+------------------------------------+
| Level | Code | Message                            |
+-------+------+------------------------------------+
| Note  | 1050 | Table 'backupfiles' already exists |
+-------+------+------------------------------------+

当我运行上面的行并且没有名为backupfiles的表时,它可以正常工作,但是当它挂起时(当我说它挂在那里并且什么都不做时)95%的时间和5%的时间工作。有没有人遇到这样的问题?我正在使用AWS RDS(Amazon Web服务关系数据库服务),而mysql服务器是5.5.27

以下是我与mysql数据库相关的所有代码

mysql -h portal-rds -u $user --password=$mysqlpw <<QUERY_INPUT
CREATE DATABASE IF NOT EXISTS $DATABASE;
use glacier;
CREATE TABLE IF NOT EXISTS backupfiles (fileName VARCHAR(20), archiveId VARCHAR(500), checkSum VARCHAR(100), glacierVault VARCHAR(100), timeStamp date);
INSERT INTO backupfiles VALUES ('$archive_file_name', '$archiveID', '$CURRENTVAULT', '$checkSum', CURDATE());
COMMIT;
QUERY_INPUT

1 个答案:

答案 0 :(得分:0)

到目前为止,这是一个工作原型,正在考虑改进它。现在,如果其他人有这个问题

echo "CREATE DATABASE IF NOT EXISTS $DATABASE;" > /tmp/runthis.sql
echo "use $DATABASE;" >> /tmp/runthis.sql
SQLSTMT="SELECT COUNT(1) FROM information_schema.tables"
SQLSTMT="${SQLSTMT} WHERE table_schema='${DATABASE}' AND table_name='backupfiles';"
TABLE_EXISTS=`mysql -h portal-rds -u $user --password=$mysqlpw -ANe"${SQLSTMT}"`
if [[ ${TABLE_EXISTS} -eq 0 ]]; then
  SQLSTMT="CREATE TABLE backupfiles (fileName VARCHAR(20),"
  SQLSTMT="${SQLSTMT} archiveId VARCHAR(500), checkSum VARCHAR(100),"
  SQLSTMT="${SQLSTMT} glacierVault VARCHAR(100), timeStamp date);"
  echo "${SQLSTMT}" >> /tmp/runthis.sql
fi
SQLSTMT="INSERT INTO backupfiles VALUES ('$archive_file_name',"
SQLSTMT="${SQLSTMT} '$archiveID', '$CURRENTVAULT', '$checkSum', CURDATE());"
echo "${SQLSTMT}" >> /tmp/runthis.sql
echo "COMMIT;" >> /tmp/runthis.sql
mysql -h portal-rds -u $user --password=$mysqlpw < /tmp/runthis.sql