<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # MySQL Ruby 教程 > 原文: [http://zetcode.com/db/mysqlrubytutorial/](http://zetcode.com/db/mysqlrubytutorial/) 這是針對 MySQL 數據庫的 Ruby 編程教程。 它涵蓋了使用 Ruby 進行 MySQL 編程的基礎。 它使用`mysql`模塊。 這些示例是在 Ubuntu Linux 上創建和測試的。 在 ZetCode 上有一個類似的 [MySQL C API 教程](/tutorials/mysqlcapitutorial/), [MySQL Visual Basic 教程](/db/mysqlvb/)或 [MySQL Python 教程](/db/mysqlpython/)。 您也可以考慮查看 [MySQL 教程](/databases/mysqltutorial/)。 ## MySQL & Ruby MySQL 是領先的開源數據庫管理系統。 它是一個多用戶,多線程的數據庫管理系統。 MySQL 在網絡上特別流行。 它是由 Linux,Apache,MySQL 和 PHP 組成的非常流行的LAMP平臺的一部分。 目前,MySQL 由 Oracle 擁有。 MySQL 數據庫在最重要的 OS 平臺上可用。Ruby 是一種動態的,反射性的,通用的面向對象的編程語言。 最近,它在 Web 編程中變得非常流行,這主要歸功于 Ruby on Rails 框架的成功。 ## mysql 模塊 `mysql`模塊是 MySQL 服務器的 Ruby 接口。 它為 Ruby 程序提供的功能與 MySQL C API 為 C 程序提供的功能相同。 ```ruby $ sudo gem1.9 install mysql ``` 在這里,我們為 MySQL 數據庫安裝 Ruby 模塊。 ## 開始之前 我們將創建一個新的數據庫用戶和一個新的數據庫。 為此,我們使用`mysql`客戶端程序。 ```ruby $ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 30 Server version: 5.0.67-0ubuntu6 (Ubuntu) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set (0.00 sec) ``` 我們使用 root 帳戶連接到 MySQL 服務器。 我們用`SHOW DATABASES`語句顯示所有可用的數據庫。 ```ruby mysql> CREATE DATABASE mydb; Query OK, 1 row affected (0.02 sec) ``` 我們創建一個新的`mydb`數據庫。 在整個教程中,我們將使用此數據庫。 ```ruby mysql> CREATE USER user12@localhost IDENTIFIED BY '34klq*'; Query OK, 0 rows affected (0.00 sec) mysql> USE mydb; Database changed mysql> GRANT ALL ON mydb.* to user12@localhost; Query OK, 0 rows affected (0.00 sec) mysql> quit; Bye ``` 我們創建一個新的數據庫用戶。 我們授予該用戶`mydb`數據庫所有表的所有特權。 ## MySQL 服務器版本 在第一個示例中,我們將獲取 MySQL 數據庫的版本。 ```ruby #!/usr/bin/ruby require 'mysql' begin con = Mysql.new 'localhost', 'user12', '34klq*' puts con.get_server_info rs = con.query 'SELECT VERSION()' puts rs.fetch_row rescue Mysql::Error => e puts e.errno puts e.error ensure con.close if con end ``` 在此腳本中,我們獲取服務器版本。 我們用兩種不同的方式來做。 ```ruby require 'mysql' ``` 我們導入`mysql`模塊。 該模塊具有用于 MySQL 數據庫的類和方法。 ```ruby con = Mysql.new 'localhost', 'user12', '34klq*' ``` 我們創建連接對象。 參數包括主機名,用戶名和密碼。 在我們的情況下,主機名是`localhost`,例如我們的電腦。 ```ruby puts con.get_server_info ``` 我們創建的 Mysql 對象具有`get_server_info`方法。 它返回安裝的 MySQL 服務器的版本。 ```ruby rs = con.query 'SELECT VERSION()' puts rs.fetch_row ``` 獲取版本的另一種方法是執行`SELECT VERSION()` SQL 語句。 我們獲取數據。 由于只檢索一條記錄,因此我們稱為`fetch_row`方法。 ```ruby rescue Mysql::Error => e puts e.errno puts e.error ``` 我們檢查錯誤。 這很重要,因為使用數據庫容易出錯。 ```ruby ensure con.close if con end ``` 最后,我們釋放資源。 ```ruby $ ./version.rb 5.5.9 5.5.9 ``` 輸出可能類似于上面。 ## 列出數據庫 MySQL Ruby 模塊具有`list_dbs`方法,該方法返回可用的數據庫。 ```ruby #!/usr/bin/ruby require 'mysql' begin con = Mysql.new 'localhost', 'user12', '34klq*' con.list_dbs.each do |db| puts db end rescue Mysql::Error => e puts e.errno puts e.error ensure con.close if con end ``` 在此腳本中,我們在 MySQL 服務器上打印所有可用的數據庫。 ```ruby con.list_dbs.each do |db| puts db end ``` `list_dbs`方法返回可用數據庫名稱的數組。 使用數組的`each`方法,我們將數組的每個項目打印到控制臺。 ```ruby $ ./listdb.rb information_schema mydb test world ``` 在我的系統上,我創建了上述數據庫。 ## 創建并填充表 我們創建一個表,并用一些數據填充它。 ```ruby #!/usr/bin/ruby require 'mysql' begin con = Mysql.new 'localhost', 'user12', '34klq*', 'mydb' con.query("CREATE TABLE IF NOT EXISTS \ Writers(Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(25))") con.query("INSERT INTO Writers(Name) VALUES('Jack London')") con.query("INSERT INTO Writers(Name) VALUES('Honore de Balzac')") con.query("INSERT INTO Writers(Name) VALUES('Lion Feuchtwanger')") con.query("INSERT INTO Writers(Name) VALUES('Emile Zola')") con.query("INSERT INTO Writers(Name) VALUES('Truman Capote')") rescue Mysql::Error => e puts e.errno puts e.error ensure con.close if con end ``` 我們創建一個`Writers`表,并向其中添加五個作者。 ```ruby con.query("CREATE TABLE IF NOT EXISTS \ Writers(Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(25))") ``` 要執行 SQL 語句,我們使用`query`方法。 該 SQL 語句創建一個稱為`Writers`的新數據庫表。 它有兩列。 ID 和名稱。 ```ruby con.query("INSERT INTO Writers(Name) VALUES('Jack London')") con.query("INSERT INTO Writers(Name) VALUES('Honore de Balzac')") ... ``` 我們使用`INSERT`語句在表中插入作者。 在這里,我們添加兩行。 ```ruby mysql> SELECT * FROM Writers; +----+-------------------+ | Id | Name | +----+-------------------+ | 1 | Jack London | | 2 | Honore de Balzac | | 3 | Lion Feuchtwanger | | 4 | Emile Zola | | 5 | Truman Capote | +----+-------------------+ 5 rows in set (0.00 sec) ``` 執行腳本后,我們使用`mysql`客戶端工具從`Writers`表中選擇所有數據。 ## 檢索數據 現在我們已經將一些數據插入數據庫中,我們可以將其取回。 ```ruby #!/usr/bin/ruby require "mysql" begin con = Mysql.new 'localhost', 'user12', '34klq*', 'mydb' rs = con.query("SELECT * FROM Writers") n_rows = rs.num_rows puts "There are #{n_rows} rows in the result set" n_rows.times do puts rs.fetch_row.join("\s") end rescue Mysql::Error => e puts e.errno puts e.error ensure con.close if con end ``` 在此示例中,我們從 Writers 表中檢索所有數據。 ```ruby con = Mysql.new 'localhost', 'user12', '34klq*', 'mydb' ``` 構造器的最后一個參數是我們要連接的數據庫名稱。 ```ruby rs = con.query("SELECT * FROM Writers") ``` 該 SQL 語句從`Writers`表中選擇所有數據。 ```ruby n_rows = rs.num_rows ``` 我們使用結果集對象的`num_rows`方法獲得結果集中的行數。 ```ruby n_rows.times do puts rs.fetch_row.join("\s") end ``` 在這里,我們使用`fetch_row`方法獲取每一行。 它返回一行作為字段數組。 默認情況下,打印時這些字段用換行分隔。 使用`join`方法,我們將每一行打印在一行上。 字段由一個空格分隔。 ```ruby $ ./retrieve1.rb There are 5 rows in the result set 1 Jack London 2 Honore de Balzac 3 Lion Feuchtwanger 4 Emile Zola 5 Truman Capote ``` 接下來,我們介紹另一種從表中檢索數據的方法。 ```ruby #!/usr/bin/ruby require "mysql" begin con = Mysql.new 'localhost', 'user12', '34klq*', 'mydb' rs = con.query("SELECT * FROM Writers") rs.each do |row| puts row.join("\s") end rescue Mysql::Error => e puts e.errno puts e.error ensure con.close if con end ``` 我們從`Writers`表中打印所有數據。 這次我們使用結果集的每種方法遍歷數據。 ```ruby rs.each do |row| puts row.join("\s") end ``` 我們使用每種方法遍歷結果集。 ```ruby $ ./retrieve2.rb 1 Jack London 2 Honore de Balzac 3 Lion Feuchtwanger 4 Emile Zola 5 Truman Capote ``` 這是示例的輸出。 我們可以以 Ruby 哈希的形式遍歷數據。 ```ruby #!/usr/bin/ruby require 'mysql' begin con = Mysql.new 'localhost', 'user12', '34klq*', 'mydb' rs = con.query "SELECT * FROM Writers WHERE Id IN (1, 2, 3)" puts "We have #{rs.num_rows} row(s)" rs.each_hash do |row| puts row['Id'] + " " + row['Name'] end rescue Mysql::Error => e puts e ensure con.close if con end ``` 在示例中,我們使用`each_hash`迭代器。 可以通過列名稱檢索結果集中的記錄。 ```ruby rs.each_hash do |row| puts row['Id'] + " " + row['Name'] end ``` 我們使用`each_hash`方法查看結果集。 返回的每一行都是一個 Ruby 哈希; 鍵值對的集合。 鍵是列名。 ```ruby $ ./retrieve3.rb We have 3 row(s) 1 Jack London 2 Honore de Balzac 3 Lion Feuchtwanger ``` 示例的輸出。 ## 多個語句 MySQL 支持多條語句執行。 必須通過特殊選項啟用它。 ```ruby #!/usr/bin/ruby require 'mysql' begin con = Mysql.new 'localhost', 'user12', '34klq*', 'mydb' con.set_server_option Mysql::OPTION_MULTI_STATEMENTS_ON rs = con.query "SELECT Name FROM Writers WHERE Id=1; SELECT Name FROM Writers WHERE Id=2; SELECT Name FROM Writers WHERE Id=3" puts rs.fetch_row while con.next_result rs = con.store_result puts rs.fetch_row end rescue Mysql::Error => e puts e.errno puts e.error ensure con.close if con end ``` 在此示例中,我們在一個查詢中具有三個`SELECT`語句。 ```ruby con.set_server_option Mysql::OPTION_MULTI_STATEMENTS_ON ``` 首先,我們需要使用`Mysql::OPTION_MULTI_STATEMENTS_ON`啟用多條語句處理。 ```ruby rs = con.query "SELECT Name FROM Writers WHERE Id=1; SELECT Name FROM Writers WHERE Id=2; SELECT Name FROM Writers WHERE Id=3" ``` 在這里,我們定義了三個`SELECT`語句。 它們之間用分號分隔。 ```ruby puts rs.fetch_row ``` 查詢方法返回第一個結果集。 我們從該結果集中獲取一行。 ```ruby while con.next_result rs = con.store_result puts rs.fetch_row end ``` 我們將獲得其他結果集,直到沒有更多要處理的語句為止。 ```ruby $ ./multiplest.rb Jack London Honore de Balzac Lion Feuchtwanger ``` 運行示例。 ## 元數據 元數據是有關數據庫中數據的信息。 MySQL 系統中的元數據包含有關存儲數據的表和列的信息。 受 SQL 語句影響的行數是元數據。 結果集中返回的行數和列數也屬于元數據。 ```ruby #!/usr/bin/ruby require 'mysql' begin con = Mysql.new 'localhost', 'user12', '34klq*', 'mydb' rs = con.query "SELECT * FROM Writers WHERE Id IN (1, 2, 3)" puts "We have #{con.field_count} fields" puts "We have #{rs.num_rows} row(s)" puts rs.fetch_row.join("\s") rescue Mysql::Error => e puts e ensure con.close if con end ``` 在此腳本中,我們從 SQL 查詢中找出行數和列數。 ```ruby rs = con.query "SELECT * FROM Writers WHERE Id IN (1, 2, 3)" ``` 該 SQL 語句返回三行。 每行有兩列。 ```ruby puts "We have #{con.field_count} fields" puts "We have #{rs.num_rows} row(s)" ``` 這兩行返回結果集中的列數和行數。 請注意,此處的字段是列的同義詞。 返回的數據是元數據。 ```ruby puts rs.fetch_row.join("\s") ``` 在這里,我們從結果集中返回一行。 這是存儲在我們數據庫表中的原始數據。 對于`INSERT`,`DELETE`和`UPDATE`語句,有一種稱為`rows_affected`的方法。 此方法返回受這三個語句影響的行數。 ```ruby #!/usr/bin/ruby require 'mysql' begin con = Mysql.new 'localhost', 'user12', '34klq*', 'mydb' con.query "DELETE FROM Writers WHERE Id IN (1, 2, 3)" puts "The query has affected #{con.affected_rows} rows" rescue Mysql::Error => e puts e ensure con.close if con end ``` 在我們的示例中,我們從`Writers`表中刪除了前三行。 ```ruby con.query "DELETE FROM Writers WHERE Id IN (1, 2, 3)" ``` 一個 SQL 語句,該語句刪除`Writers`表的前三行。 ```ruby puts "The query has affected #{con.affected_rows} rows" ``` 在這里,我們得到受上述 SQL 語句影響的行數。 該數字屬于元數據。 ```ruby $ ./affected.rb The query has affected 3 rows mysql> SELECT * FROM Writers; +----+---------------+ | Id | Name | +----+---------------+ | 4 | Emile Zola | | 5 | Truman Capote | +----+---------------+ 2 rows in set (0.00 sec) ``` 我們執行受影響的`.rb`腳本,并檢查`Writers`表中的更改。 三行已被刪除。 在下一個示例中,我們將檢查有關字段的元數據。 ```ruby #!/usr/bin/ruby require 'mysql' begin con = Mysql.new 'localhost', 'user12', '34klq*', 'mydb' rs = con.query "SELECT * FROM Writers WHERE Id=1" field = rs.fetch_field_direct 1 puts "Table name: #{field.table}" puts "Field name: #{field.name}" puts "Field length: #{field.length}" puts "Field type: #{field.type}" rescue Mysql::Error => e puts e ensure con.close if con end ``` 我們從數據庫中獲得一條記錄。 我們得到字段的表名,列名,長度和類型。 ```ruby rs = con.query "SELECT * FROM Writers WHERE Id=1" ``` 該查詢返回一行。 它有兩列。 ```ruby field = rs.fetch_field_direct 1 ``` 使用`fetch_field_direct`方法,我們得到了一條特定的記錄。 更準確地說,記錄來自第一行第二列的交集。 ```ruby puts "Table name: #{field.table}" puts "Field name: #{field.name}" puts "Field length: #{field.length}" puts "Field type: #{field.type}" ``` 我們使用字段對象的屬性讀取器獲取元數據。 ```ruby $ ./metadata.rb Table name: Writers Field name: Name Field length: 25 Field type: 253 ``` 這是示例的輸出。 在與元數據有關的最后一個示例中,我們將打印表中的所有行及其列名。 ```ruby #!/usr/bin/ruby require 'mysql' begin con = Mysql.new 'localhost', 'user12', '34klq*', 'mydb' rs = con.query "SELECT * FROM Writers" fields = rs.fetch_fields puts "%3s %s" % [fields[0].name, fields[1].name] rs.each_hash do |row| puts "%3s %s" % [row['Id'], row['Name']] end rescue Mysql::Error => e puts e ensure con.close if con end ``` 我們將`Writers`表的內容打印到控制臺。 現在,我們也包括列的名稱。 ```ruby fields = rs.fetch_fields puts "%3s %s" % [fields[0].name, fields[1].name] ``` 第一步,我們獲取列名。 它們使用標準的 Ruby 字符串格式化函數進行打印。 ```ruby rs.each_hash do |row| puts "%3s %s" % [row['Id'], row['Name']] end ``` 現在,將獲取數據并將其打印到控制臺。 我們也進行一些格式化。 ```ruby $ ./columnheaders.rb Id Name 1 Jack London 2 Honore de Balzac 3 Lion Feuchtwanger 4 Emile Zola 5 Truman Capote ``` 腳本的輸出。 ## 預備語句 現在,我們將以預備語句來關注自己。 在編寫預備語句時,我們使用占位符,而不是直接將值寫入語句中。 預準備的語句可提高安全性和性能。 ```ruby #!/usr/bin/ruby require 'mysql' name = "Stefan Zweig" begin con = Mysql.new 'localhost', 'user12', '34klq*', 'mydb' pst = con.prepare "INSERT INTO Writers(Name) VALUES(?)" pst.execute name rescue Mysql::Error => e puts e ensure con.close if con pst.close if pst end ``` 在上面的示例中,我們將新行插入`Writers`表。 我們使用預備語句。 ```ruby pst = con.prepare "INSERT INTO Writers(Name) VALUES(?)" ``` `prepare`方法用于創建預備語句。 `?`字符是一個占位符。 稍后,我們將一個值綁定到該占位符。 ```ruby pst.execute name ``` 我們將名稱變量中的值綁定到占位符,并執行預備語句。 ```ruby pst.close if pst ``` 預備語句已關閉。 ```ruby mysql> SELECT * FROM Writers; +----+-------------------+ | Id | Name | +----+-------------------+ | 1 | Jack London | | 2 | Honore de Balzac | | 3 | Lion Feuchtwanger | | 4 | Emile Zola | | 5 | Truman Capote | | 6 | Stefan Zweig | +----+-------------------+ 6 rows in set (0.00 sec) ``` 腳本成功運行后,我們在`Writers`表中看到一個新作者。 ## 寫圖像 有些人喜歡將其圖像放入數據庫中,有些人則希望將其保留在文件系統中以供其應用使用。 當我們處理大量圖像時,會出現技術難題。 圖像是二進制數據。 MySQL 數據庫具有一種特殊的數據類型來存儲稱為`BLOB`(二進制大對象)的二進制數據。 ```ruby mysql> CREATE TABLE Images(Id INT PRIMARY KEY AUTO_INCREMENT, Data MEDIUMBLOB); Query OK, 0 rows affected (0.06 sec) ``` 對于此示例,我們創建一個名為`Images`的新表。 ```ruby #!/usr/bin/ruby require 'mysql' begin fin = File.open("woman.jpg" , "rb") img = fin.read rescue SystemCallError => e puts e ensure fin.close if fin end begin con = Mysql.new 'localhost', 'user12', '34klq*', 'mydb' pst = con.prepare("INSERT INTO Images SET Data='%s'" % img.unpack('H*')) pst.execute rescue Mysql::Error => e puts e ensure con.close if con pst.close if pst end ``` 在上面的腳本中,我們讀取 JPG 圖像并將其插入到`Images`表中。 ```ruby fin = File.open("woman.jpg" , "rb") img = fin.read ``` 我們打開并閱讀圖像。 `read`方法以字符串形式返回數據。 ```ruby pst = con.prepare("INSERT INTO Images SET Data='%s'" % img.unpack('H*')) ``` 將該字符串數據放入預備語句中。 在這樣做之前,使用 Ruby 字符串對象的`unpack`方法對其進行解碼。 解碼是必需的,因為圖像對象具有許多無法正常處理的特殊字符。 ## 讀取圖像 在前面的示例中,我們已將圖像插入數據庫表中。 現在,我們將從表中讀取圖像。 ```ruby #!/usr/bin/ruby require 'mysql' begin con = Mysql.new 'localhost', 'user12', '34klq*', 'mydb' rs = con.query "SELECT Data FROM Images LIMIT 1" f = File.new "woman2.jpg", "wb" f.write rs.fetch_row.pack 'H*' rescue Mysql::Error, SystemCallError => e puts e ensure con.close if con f.close if f end ``` 我們從圖片表中讀取了一張圖片。 ```ruby rs = con.query "SELECT Data FROM Images LIMIT 1" ``` 我們從表中選擇一條記錄。 ```ruby f = File.new "woman2.jpg", "wb" ``` 我們創建一個可寫的二進制文件。 ```ruby f.write rs.fetch_row.pack 'H*' ``` 我們從先前的 SQL 語句中獲取數據并將其寫入文件。 `fetch_row`方法返回一個數組對象。 在將數據寫入文件之前,使用數組的`pack`方法將其放回原始格式。 對于解碼和反轉這兩種操作,我們使用相同的指令`'H*'`。 它代表十六進制字符串。 現在我們在當前目錄中應該有一個名為`woman2.jpg`的映像。 我們可以檢查它是否與我們插入表中的圖像相同。 ## 事務支持 `transaction`是針對一個或多個數據庫中數據的數據庫操作的基本單位。 事務中所有 SQL 語句的影響可以全部提交給數據庫,也可以全部回滾。 默認情況下,MySQL 在自動提交模式下運行。 在這種模式下,對表的所有更改將立即生效。 為了防止這種情況,我們必須關閉自動提交模式。 禁用自動提交后,對事務感知表的更改不會立即永久更改。 要存儲更改,我們必須調用`COMMIT`語句或`ROLLBACK`還原它們。 Ruby MySQL 為這些 SQL 語句`commit`和`rollback`提供了便捷的方法。 MySQL 數據庫具有不同類型的存儲引擎。 最常見的是 MyISAM 和 InnoDB 引擎。 在數據安全性和數據庫速度之間需要權衡。 MyISAM 表的處理速度更快,并且不支持事務。 `commit`和`rollback`方法未實現。 他們什么都不做。 另一方面,InnoDB 表可以更安全地防止數據丟失。 他們支持事務。 它們處理較慢。 ```ruby mysql> SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES -> where TABLE_SCHEMA = 'mydb' AND TABLE_NAME='Writers'; +------------+--------+ | TABLE_NAME | ENGINE | +------------+--------+ | Writers | InnoDB | +------------+--------+ 1 row in set (0.00 sec) ``` `Writers`表的引擎是 InnoDB,它支持事務。 ```ruby #!/usr/bin/ruby require 'mysql' begin con = Mysql.new 'localhost', 'user12', '34klq*', 'mydb' con.autocommit false pst = con.prepare "UPDATE Writers SET Name = ? WHERE Id = ?" pst.execute "Leo Tolstoy", "1" pst.execute "Boris Pasternak", "2" pst.execute "Leonid Leonov" con.commit rescue Mysql::Error => e puts e con.rollback ensure pst.close if pst con.close if con end ``` 在此腳本中,我們嘗試更新三行。 ```ruby con.autocommit false ``` 自動提交模式被禁用。 ```ruby pst = con.prepare "UPDATE Writers SET Name = ? WHERE Id = ?" pst.execute "Leo Tolstoy", "1" pst.execute "Boris Pasternak", "2" pst.execute "Leonid Leonov" ``` 我們執行三個`UPDATE`語句。 最后一個不正確。 第二個參數丟失。 ```ruby con.commit ``` 如果一切正常,則更改將提交到表中。 ```ruby rescue Mysql::Error => e puts e con.rollback ``` 如果發生錯誤,則會回滾更改。 ```ruby $ ./update.rb execute: param_count(2) != number of argument(1) mysql> SELECT * FROM Writers; +----+-------------------+ | Id | Name | +----+-------------------+ | 1 | Jack London | | 2 | Honore de Balzac | | 3 | Lion Feuchtwanger | | 4 | Emile Zola | | 5 | Truman Capote | | 6 | Stefan Zweig | +----+-------------------+ 6 rows in set (0.00 sec) ``` 運行腳本會出現錯誤。 但是,該事務已回滾,并且前兩行未更改。 [Tweet](https://twitter.com/share) 這是 MySQL Ruby 教程。 您可能也對 [PostgreSQL Ruby 教程](/db/postgresqlruby/), [SQLite Ruby 教程](/db/sqliteruby/)或 [MongoDB Ruby 教程](/db/mongodbruby/)感興趣。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看