shell 下執行mysql 命令

來源:互聯網
上載者:User

原文連結

在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.sh2> 一旦中間出錯,之後指令碼就不會執行,例如:如果第一張表已經存在,則會報出如下異常: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然後指令碼退出,第二張表也就無法建立。      大家知道在mysql命令列中使用source命令,即使中間出錯,後續指令碼也會繼續執行,但是如上幾種方式,均無法解決該問題,如果大家有好的建議,請回複,謝謝。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.