shell 下執行mysql 命令


原文鏈接

在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 plain copy
  1. use chbdb;  
  2. source update.sql  
 
 
然后執行如下命令:
[python]  view plain copy
  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 plain copy
  1. mysql -uroot -ppassword < update.sql  
 
優點:支持復雜的sql腳本
缺點:
1> 一旦中間出錯,之后腳本就不會執行,例如:
如果第一張表已經存在,則會報出如下異常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然后腳本退出,第二張表也就無法創建。
 
 
    大家知道在mysql命令行中使用source命令,即使中間出錯,后續腳本也會繼續執行,但是如上幾種方式,均無法解決該問題,如果大家有好的建議,請回復,謝謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM