shell 下執行mysql 命令

YatHo發表於2018-01-12

在shell開發中,很多時候我們需要操作mysql資料庫(比如:查詢資料、匯出資料等),但是我們又無法進入mysql命令列的環境,就需要在shell環境中模擬mysql的環境,使用mysql相關命令,本文總結幾種shell操作mysql的方法,供大家參考。

方案1

  1. mysql -uuser -ppasswd -e"insert LogTable values(...)"  
 
優點:語句簡單
缺點:支援的sql相對簡單
 

方案2

準備一個sql指令碼,名字為update.sql,例如:
  1. CREATE TABLE `user` (  
  2.   `id` varchar(36) NOT NULL COMMENT '主鍵',  
  3.   `username` varchar(50) NOT NULL COMMENT '使用者名稱',  
  4.   `password` varchar(50) NOT NULL COMMENT '使用者密碼',  
  5.   `createdate` date NOT NULL COMMENT '建立時間',  
  6.   `age` int(11) NOT NULL COMMENT '年齡',  
  7.   PRIMARY KEY  (`id`)  
  8. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='使用者資訊表';  
  9. DROP TABLE IF EXISTS `visit_log`;  
  10. CREATE TABLE `visit_log` (  
  11.   `id` varchar(36) character set utf8 NOT NULL,  
  12.   `type` int(11) NOT NULL,  
  13.   `content` text character set utf8 NOT NULL,  
  14.   `createdate` date NOT NULL,  
  15.   PRIMARY KEY  (`id`)  
  16. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='訪問日誌';  
 
 新建一個update_mysql.sh,內容如下:
[python] view plaincopy
 
  1. use chbdb;  
  2. source update.sql  
 
 
然後執行如下命令:
[python] view plaincopy
 
  1. cat update_mysql.sh | mysql --user=root -ppassword  
 
優點:支援複雜的sql指令碼
缺點:
1> 需要兩個檔案:update.sql和update_mysql.sh
2> 一旦中間出錯,之後指令碼就不會執行,例如:
如果第一張表已經存在,則會報出如下異常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然後指令碼退出,第二張表也就無法建立。

方案3

    新建一個shell指令碼,格式如下:
 
  1. #!/bin/bash  
  2. mysql -u* -h* -p* <<EOF  
  3.     Your SQL script.  
  4. EOF  
 
例如:
 
  1. #!/bin/bash  
  2. mysql -uroot  -ppassword <<EOF  
  3.    use chbdb;  
  4.     CREATE TABLE user (  
  5.   id varchar(36) NOT NULL COMMENT '主鍵',  
  6.   username varchar(50) NOT NULL COMMENT '使用者名稱',  
  7.   password varchar(50) NOT NULL COMMENT '使用者密碼',  
  8.   createdate date NOT NULL COMMENT '建立時間',  
  9.   age int(11) NOT NULL COMMENT '年齡',  
  10.   PRIMARY KEY  (`id`)  
  11. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='使用者資訊表';  
 
優點:
1>支援複雜的sql指令碼
2>無需其它額外檔案
缺點:
1> 表名、欄位不能使用單引號,需要修改原有sql語句
2> 一旦中間出錯,之後指令碼就不會執行,例如:
如果第一張表已經存在,則會報出如下異常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然後指令碼退出,第二張表也就無法建立。

方案4

準備一個sql指令碼,如update.sql,然後執行如下命令:
[python] view plaincopy
 
  1. mysql -uroot -ppassword < update.sql  
 
優點:支援複雜的sql指令碼
缺點:
1> 一旦中間出錯,之後指令碼就不會執行,例如:
如果第一張表已經存在,則會報出如下異常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然後指令碼退出,第二張表也就無法建立。
 
 

相關文章