程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MySQL for Linux on POWER 數據庫創建簡介

MySQL for Linux on POWER 數據庫創建簡介

編輯:關於MYSQL數據庫
 簡介

  MySQL 是當前最為流行的開放源代碼數據庫之一。可以遵循商業化及開放源代碼雙重許可的模型來使用它。從嵌入式設備到集群企業環境,MySQL 在很多種類的應用程序中得到了應用。

  POWER5™ 處理器是 IBM PPC® AS 體系結構的最新 64-位 實現(版本 2.02)。它與所有 PPC 和 PPC AS 應用程序級代碼都是二進制兼容的(binary compatible)。POWER5 芯片設計用於非常高頻率的操作,最高可達 2.0 GHz。Power 體系結構既支持 64-位 尋址,也支持 32-位 尋址。早期的實現使用的是 32-位 子集,只支持 32-位 應用程序。自 1995 年以來,64-位 處理器實現了完整的體系結構,支持與現有 32-位 應用程序的完全二進制應用程序兼容,並完全支持新的 64-位 應用程序。64-位 POWER 和 PPC 芯片已經應用於 IBM® eServer™ iSeries™、 pSerIEs® OpenPower™ 和 BladeCenter™ JS20 服務器,以及 Apple 的 G5 硬件。

  POWER5 體系結構是對 POWER4 體系結構的改進,但是保持了二進制與結構的兼容性。相同的管道結構使得為 POWER4 所生成的處理器代碼可以同樣好地應用於基於 POWER5 處理器的系統。POWER5 的關鍵特性包括微分區(micro-partitioning)和同步多線程(Simultaneous Multi-threading)。

  Linux 已經在商業和技術計算環境中占據了重要地位,並迅速為多種業務所接受。IBM Linux Technology Center(LTC)是當前世界上最主要的企業 Linux 開發組織,他們主要致力於在 POWER 體系結構上為所有主流 Linux 發行版本提供開發、支持和改進。與來自開放源代碼社區的傳統支持一道,獨立軟件提供商(Independent software vendor,ISV)和客戶幫助此類支持能夠提供一個輔助開發者的空前網絡。

  MySQL 及相關組件

  傳統上,在所有主流 Linux 發行版本中都會包含 MySQL。用於 POWER 上的主流 LInux 發行版本,比如 Red Hat Enterprise Linux 和 SUSE Linux Enterprise Server,也不例外。

  雖然不同的 Linux 發行版本中會有不同的 MySQL 和 MySQL 產品軟件包和版本,不過應該都會有下面這些:

  數據庫服務器(Database Server)

  數據庫客戶機(Database ClIEnt)

  流行編程語言的接口與擴展,比如 Java、C/C++、Python、Perl、PHP,等等

  用於不同產品和開發 API 的程序庫、模塊和插件

  與 MySQL 相關的其他工具

  要獲得產品的詳細列表和描述,請參考在 參考資料 中列出的最主要的 MySQL 資源中心,MySQL.com。 MySQL.com Web 站點是 MySQL 資料和產品下載的主要資源,其中包括用於 POWER 上 Linux 的下載。從該站點上可以下載用於 POWER 上 Linux 的已編譯的最新 MySQL 版本和相關產品,同樣也可以下載源代碼。

  可以以若干種方式獲得 MySQL 數據庫。有一些可以遵循雙重的商業和開放源代碼許可獲得,有一些只能遵循某個商業許可獲得。要獲得更多信息,請參考 MySQL 數據庫服務器網頁(參閱 參考資料)。

  操作系統和硬件

  本文主要涉及了 IBM 支持的、用於 POWER 硬件的兩個 POWER 上 Linux 發行版本:

  Red Hat Enterprise Linux

  SUSE Linux Enterprise Server

  用於 POWER 上 Linux 的 MySQL 也可以運行在其他 Linux 發行版本上,比如 Yellow Dog Linux、Y-HPC、Debian 和很多其他運行於 IBM 和 Apple 所制造的 POWER 和 PPC 硬件上的發行版本。

  在 POWER 上 Linux 中安裝 MySQL

  在 POWER 上 Linux 中安裝 MySQL 與在任何其他體系結構上的 Linux 操作系統中安裝沒有區別。

  如果您使用的是 POWER 上 Linux 發行版本中所包含的 MySQL 程序包,那麼安裝 MySQL 非常簡單,只需要通過發行版本的媒介安裝所需的 rpm 軟件包。MySQL.com Web 站點也以 Linux 社區通常接受的壓縮格式提供了 POWER 和 PPC 上 Linux 的下載。

  MySQL 本身及很多工具的源代碼只是遵循開放源代碼許可提供,可以在 POWER 上 Linux 中使用 GNU Compiler Collection(GCC)方便地進行編譯。

  MySQL 管理工具

  有一些 MySQL 管理工具,它們使用交互式圖形界面,簡化了 MySQL 數據庫的管理。

  MySQL Administrator

  MySQL Administrator 讓您能夠配置、備份/恢復、控制您的數據庫以及 MySQL 服務器環境。 圖 1 是在 POWER 上 Linux SLES 9 中運行的 MySQL Administrator 截圖,展示了我們將要在下一節中創建的數據庫結構。

  圖 1. MySQL Administrator 窗口

MySQL for Linux on POWER 數據庫創建簡介

  可以在 POWER 上 Linux 中編譯 MySQL Administrator 源代碼。要獲得關於 MySQL Administrator 的更多資料,請訪問 MySQL Administrator 網頁。(參閱 參考資料。)

  MySQL 查詢浏覽器(Query Browser)

  MySQL 查詢浏覽器是一個易用的圖形化工具,可以用來創建、執行和優化 MySQL 中的查詢。圖 2 給出了在 POWER 上 Linux SLES 9 中運行的 MySQL 查詢浏覽器窗口截圖。

  圖 2. MySQL 查詢浏覽器

MySQL for Linux on POWER 數據庫創建簡介

  類似於 MySQL Administrator,也可以獲得 MySQL 查詢浏覽器的源代碼並在 POWER 上 Linux 中編譯它。要獲得關於 MySQL 查詢浏覽器的更多資料,請訪問 MySQL 查詢浏覽器網頁。(參閱 參考資料。)

  PHPMyAdmin

  phpMyAdmin 是另一個 MySQL 管理和控制工具。這個工具完全用 PHP 編寫,如果有以下組件的支持,可以在任意 Linux 發行版本上應用:

  PHP 運行期環境

  具有 PHP 模塊的 apache web 服務器

  PHP-MySQL 模塊

  POWER 上 Linux 發行版本默認會附帶這些組件。配置很簡單,在 phpMyAdmin 附帶的文檔中詳細地進行了描述。 圖 3 是在 POWER 上 Linux SLES 9 中運行的 PHPMyAdmin 的截圖。

  圖 3. PHPMyAdmin

MySQL for Linux on POWER 數據庫創建簡介

  遷移 MySQL

  如果使用前面提到的管理工具,遷移 MySQL 數據庫非常簡單,因為 MySQL 數據庫表結構保存在文件中,您可以將它們備份和拷貝到其他系統。

  創建 MySQL 數據庫

  為了介紹一些關鍵的 MySQL 概念以及一些您可以在 MySQL 中執行的基本任務,文章的這一節將討論一個簡單的數據庫設計。

  數據庫設計

  此示例研究了一個簡單的數據庫,它保持了對某個 IT specialists contracting company 日常活動的追蹤。 圖 4 是一個實體關系圖(Entity Relational Diagram,ERD),給出了公司簡化的數據需求及操作宏觀視圖。

  圖 4. IT Specialists contracting company 數據庫

MySQL for Linux on POWER 數據庫創建簡介

  公司約定 IT 專家去從事不同客戶的項目,並基於已經確定的價格按小時收取所提供服務的費用。JOB 表保持對客戶為服務付費的每小時價格的追蹤,那些價格取決於工作的類型。EMPLOYEE 表保持對雇員信息的追蹤,其中包括雇員的職位,是指向 JOB 表中一個條目的外部關鍵字。JOB 表與 EMPLOYEE 表是 1:M 的任意關系。有可能存在某個職位而並沒有相應雇員。另一方面,雇員需要擁有恰好一個主要職位。

  PROJECT 表保存的是關於此公司所涉及到的項目的數據。一個項目必須恰好由公司的一位雇員來管理。有可能某個雇員會管理多於一個項目。不過,並不是每個雇員都會管理項目。

  每位雇員會得到一張定單表格,在那張表格上他們記錄每天為客戶的具體項目工作了多少個小時,每小時價格是多少,以及要向客戶收取的總費用。

  一個雇員可以一次被指派到多個項目,或者一個項目都不指派。可能會有多個雇員為某個項目工作,或者一個也沒有。這個 N:N 的關系通過聯合實體 ORDERFORM 實現。

  數據庫中的所有表都按第三范式(3rd Normal Form,3NF)進行了標准化,所以我們可以開始創建基於前面的 ERD 的數據庫結構。

  創建數據庫

  首先,您需要啟動 MySQL 客戶機,並登錄進入 MySQL:

shell> MySQL -h host -u user -p
Enter passWord: ********

  成功地登錄進入並獲得 MySQL 命令行界面提示符後,可以開始創建數據庫,如下:

MySQL> CREATE DATABASE CONTRACTING;
Query OK, 1 row affected (0.00 sec)

  要確認 CONTRACTING 數據已經創建,執行下面的命令並得到如下的輸出:

MySQL> SHOW DATABASES;
+-------------+
| Database  |
+-------------+
| CONTRACTING |
| MySQL    |
| test    |
+-------------+

  注意,SQL 代碼和 MySQL 內部命令的大寫是可選的,但是數據庫的名稱、表和列都對大小寫敏感。例如,名為 “TEST" 的數據庫不同於名為 “test" 的數據庫。

  現在需要切換到新創建的數據庫:

MySQL> USE CONTRACTING
Database changed

  此時,您就已經准備好在數據庫中開始創建表。可以首先創建 JOB 表,如下:

MySQL> CREATE TABLE JOB (
  -> JOB_CODE INTEGER NOT NULL UNIQUE,
  -> JOB_NAME LONG VARCHAR NOT NULL,
  -> JOB_HOUR_CHRG DECIMAL(10,2) NOT NULL,
  -> PRIMARY KEY (JOB_CODE)) ENGINE=InnoDB;

>Query OK, 0 rows affected (0.03 sec)

  將 JOB 表的類型指定為 InnoDB,以保證參照完整性。查看創建的表的參數,如下:

MySQL> describe JOB;
+---------------+---------------+------+-----+---------+-------+
| FIEld     | Type     | Null | Key | Default | Extra |
+---------------+---------------+------+-----+---------+-------+
| JOB_CODE   | int(11)    |   | PRI | 0    |    |
| JOB_NAME   | mediumtext  |   |   |     |    |
| JOB_HOUR_CHRG | decimal(10,2) |   |   | 0.00  |    |
+---------------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

  以類似的方式創建其余的表。MySQL 允許您以非交互、批處理的方式執行語句。您可以將所有的數據庫創建 SQL 代碼存入一個文本文件,然後從那裡執行它。下面是一個此類文件的示例:

-- Creating the database
CREATE DATABASE CONTRACTING;
-- Changing into the CONTRACTING database
USE CONTRACTING;
-- Creating table JOB
CREATE TABLE JOB (
    JOB_CODE INTEGER NOT NULL UNIQUE,
    JOB_NAME LONG VARCHAR NOT NULL,
    JOB_HOUR_CHRG DECIMAL(10,2) NOT NULL,
    PRIMARY KEY (JOB_CODE)) ENGINE=InnoDB;
-- Creating table EMPLOYEE
CREATE TABLE EMPLOYEE (
    EMP_SSN CHAR(9) NOT NULL UNIQUE,
    EMP_LNAME VARCHAR(50) NOT NULL,
    EMP_FNAME VARCHAR(50) NOT NULL,
    JOB_CODE INTEGER NOT NULL,
    PRIMARY KEY (EMP_SSN),
    FOREIGN KEY (JOB_CODE) REFERENCES JOB(JOB_CODE)
    ON UPDATE CASCADE
    ON DELETE RESTRICT) ENGINE=InnoDB;
-- Creating table PROJECT
CREATE TABLE PROJECT (
    PRJ_NUM INTEGER NOT NULL UNIQUE,
    PRJ_NAME VARCHAR(50) NOT NULL,
    EMP_SSN CHAR(9) NOT NULL,
    PRIMARY KEY (PRJ_NUM),
    FOREIGN KEY (EMP_SSN) REFERENCES EMPLOYEE(EMP_SSN)
    ON UPDATE CASCADE
    ON DELETE RESTRICT) ENGINE=InnoDB;
-- Creating table ORDERFORM
CREATE TABLE ORDERFORM (
    ORD_NUM INTEGER NOT NULL UNIQUE,
    ORD_DATE DATE NOT NULL,
    ORD_HOURS SMALLINT NOT NULL,
    ORD_CHRG_HOUR DECIMAL(10,2) NOT NULL,
    ORD_CHARGE DECIMAL(10,2) NOT NULL,
    PRJ_NUM INTEGER NOT NULL,
    EMP_SSN CHAR(9) NOT NULL,
    PRIMARY KEY (ORD_NUM),
    FOREIGN KEY (EMP_SSN) REFERENCES EMPLOYEE(EMP_SSN)
    ON UPDATE CASCADE
    ON DELETE RESTRICT,
    FOREIGN KEY (PRJ_NUM) REFERENCES PROJECT(PRJ_NUM)
    ON UPDATE CASCADE
    ON DELETE RESTRICT) ENGINE=InnoDB;

  注意創建表的順序。被參照的表必須在進行參照的表之前創建。如果您將表的類型指定為 InnoDB,那麼這個順序就不會那麼重要。不過,參照完整性將得不到保證。

  要深入了解 MySQL 參照完整性,請參考 MySQL 產品文檔中關於外部關鍵字的部分。

  要通過上述文件執行 SQL 語句,您只需要在命令行中將其傳遞給 MySQL,就可以讀取文件,類似這樣:

MySQL -u username < filename

  要深入了解 MySQL 的批處理使用模式,請參考 MySQL 產品文檔。

  要查看您創建的表結構,請輸入下面的命令:

MySQL> SHOW TABLES;
+-----------------------+
| Tables_in_CONTRACTING |
+-----------------------+
| EMPLOYEE       |
| JOB          |
| ORDERFORM       |
| PROJECT        |
+-----------------------+
4 rows in set (0.00 sec)
MySQL> DESCRIBE JOB;
+---------------+---------------+------+-----+---------+-------+
| FIEld     | Type     | Null | Key | Default | Extra |
+---------------+---------------+------+-----+---------+-------+
| JOB_CODE   | int(11)    |   | PRI | 0    |    |
| JOB_NAME   | mediumtext  |   |   |     |    |
| JOB_HOUR_CHRG | decimal(10,2) |   |   | 0.00  |    |
+---------------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
MySQL> DESCRIBE EMPLOYEE;
+-----------+-------------+------+-----+---------+-------+
| FIEld   | Type    | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| EMP_SSN  | varchar(9) |   | PRI |     |    |
| EMP_LNAME | varchar(50) |   |   |     |    |
| EMP_FNAME | varchar(50) |   |   |     |    |
| JOB_CODE | int(11)   |  | MUL | 0    |    |
+-----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
MySQL> DESCRIBE PROJECT;
+----------+-------------+------+-----+---------+-------+
| FIEld  | Type    | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| PRJ_NUM | int(11)   |   | PRI | 0    |    |
| PRJ_NAME | varchar(50) |   |   |     |    |
| EMP_SSN | varchar(9) |   | MUL |     |    |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
MySQL> DESCRIBE ORDERFORM;
+---------------+---------------+------+-----+------------+-------+
| FIEld     | Type     | Null | Key | Default  | Extra |
+---------------+---------------+------+-----+------------+-------+
| ORD_NUM    | int(11)    |   | PRI | 0     |    |
| ORD_DATE   | date     |   |   | 0000-00-00 |    |
| ORD_HOURS   | smallint(6)  |   |   | 0     |    |
| ORD_CHRG_HOUR | decimal(10,2) |   |   | 0.00    |    |
| ORD_CHARGE  | decimal(10,2) |   |   | 0.00    |    |
| PRJ_NUM    | int(11)    |   | MUL | 0     |    |
| EMP_SSN    | char(9)    |   | MUL |      |    |
+---------------+---------------+------+-----+------------+-------+
7 rows in set (0.00 sec)

  注意,在 EMPLOYEE 表中,屬性 EMP_SSN 的類型被從 CHAR(9) 轉換為 VARCHAR(9)。如果一個表有一個 VARCHAR 類型的列,那麼同一個表中長度大於 CHAR(3) 的 CHAR 類型會被轉換為 VARCHAR 類型。當在同一張表中同時存在 CHAR 和 VARCHAR 類型時,這一轉換會提高性能。

  輸入數據,並確認參照完整性

  此時您就已經完成了數據庫中表的創建,可以開始向表中填入數據。為此,可以使用 INSERT 語句,也可以從以制表符定界的文本文件中將數據導入表中。

INSERT INTO JOB (JOB_CODE, JOB_NAME, JOB_HOUR_CHRG)
VALUES (200, 'Application Designer', 38.50);

  要查看 JOB 表中加入的條目,請輸入下面的內容:

MySQL> SELECT * FROM JOB;
+----------+----------------------+---------------+
| JOB_CODE | JOB_NAME       | JOB_HOUR_CHRG |
+----------+----------------------+---------------+
|   200 | Application Designer |     38.50 |
+----------+----------------------+---------------+
1 row in set (0.00 sec)

  要通過文本文件向數據庫填入數據,需要創建一個以制表符定界的文件。可以使用下面的示例文件來導入 JOB 表:

200   Application Programmer 35.48
201   Database Administrator 38.50
202   Technical Support    27.00
203   Database Designer    49.99

  要通過這個文件導入數據,需要執行類似如下的命令:

MySQL> LOAD DATA LOCAL INFILE "job_data_load.txt" INTO TABLE JOB;
Query OK, 4 rows affected (0.00 sec)
Records: 4 Deleted: 0 Skipped: 0 Warnings: 0

  注意,如果文本文件不在啟動 mysql 客戶機的同一目錄,則需要指定那個文件的絕對路徑。在 LOAD DATA 語句中可以修改列值分隔符的缺省值。要獲得關於從文本文件導入數據的更多資料,請參考 MySQL 產品文件。

  要確認結果,請打印出 JOB 表中的所有行,如下:

MySQL> SELECT * FROM JOB;
+----------+------------------------+---------------+
| JOB_CODE | JOB_NAME        | JOB_HOUR_CHRG |
+----------+------------------------+---------------+
|   200 | Application Programmer |     35.48 |
|   201 | Database Administrator |     38.50 |
|   202 | Technical Support   |     27.00 |
|   203 | Database Designer   |     49.99 |
+----------+------------------------+---------------+
4 rows in set (0.00 sec)

  同樣,您可以填入其他表,記住,由於您使用的是 InnoDB 表類型,參照完整性是強制性的,因此,必須在填入進行參照的表之前先填入被參照的表。

  比如,向 EMPLOYEE 表填入下面的數據:

MySQL> SELECT * FROM EMPLOYEE;
+-----------+-----------+-----------+----------+
| EMP_SSN  | EMP_LNAME | EMP_FNAME | JOB_CODE |
+-----------+-----------+-----------+----------+
| 600000001 | Smith   | John   |   201 |
| 600000002 | Johnson  | James   |   200 |
| 600000003 | Jones   | Anne   |   203 |
+-----------+-----------+-----------+----------+
3 rows in set (0.00 sec)

  舉例來說,您所指定的外部關鍵字約束將不允許您刪除 JOB 表中 JOB_CODE 等於 203 的記錄,因為有一位雇員,即 Anne Jones,他在 EMPLOYEE 表中的記錄包含此工作代碼。

MySQL> DELETE FROM JOB WHERE JOB_CODE=203;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign
key constraint fails

  可見,參照完整性規則不允許您刪除正在由其他表參照的記錄。不過,如果更新 JOB 表中的 JOB_CODE,那麼進行參照的表也要進行這一更新,如下所示:

MySQL> UPDATE JOB SET JOB_CODE=207 WHERE JOB_CODE=203;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
MySQL> SELECT * FROM JOB;
+----------+------------------------+---------------+
| JOB_CODE | JOB_NAME        | JOB_HOUR_CHRG |
+----------+------------------------+---------------+
|   200 | Application Programmer |     35.48 |
|   201 | Database Administrator |     38.50 |
|   202 | Technical Support   |     27.00 |
|   207 | Database Designer   |     49.99 |
+----------+------------------------+---------------+
4 rows in set (0.00 sec)
MySQL> SELECT * FROM EMPLOYEE;
+-----------+-----------+-----------+----------+
| EMP_SSN  | EMP_LNAME | EMP_FNAME | JOB_CODE |
+-----------+-----------+-----------+----------+
| 600000001 | Smith   | John   |   201 |
| 600000002 | Johnson  | James   |   200 |
| 600000003 | Jones   | Anne   |   207 |
+-----------+-----------+-----------+----------+
3 rows in set (0.00 sec)

  為 MySQL 進行開發

  由於 MySQL 的流行,有大量的開發團體在使用大部分主流編程調語言為 MySQL 編寫應用程序。在 Linux 中(包括 Linux on POWER)有很多 API,讓您能夠使用以下編程語言編寫與 MySQL 通信的應用程序,比如 PHP、Java、C、C++、Perl、Python 和 Ruby,這只是列出了很少的一些。在本系列的 第 2 部分 中深入了解在 POWER 上 Linux 中為 MySQL 所做的開發。

  結束語

  人們普遍認為 MySQL 是當前可用的性能最好的開放源代碼企業級 Linux 關系數據庫服務器之一。IBM 64-位 POWER 平台具備出眾的性能、可靠性和高可用性,能夠滿足現今客戶的所有需求。MySQL RDBMS 具備強健的特性,基於 IBM POWER 處理器的服務器具備微分區、動態啟用和禁用 SMT 的能力,它們聯合起來為市場提供了一個最為強大的 Linux 數據庫服務器平台

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved