gp数据库创建数据库
MySQL是当今最流行的开源数据库之一。 它在商业和开源双重许可模式下可用。 MySQL找到了从嵌入式设备到集群企业环境的各种应用程序。
POWER5™处理器是IBMPPC®AS架构(2.02版)的最新64位实现。 它与所有PPC和PPC AS应用程序级别代码二进制兼容。 POWER5芯片设计用于高达2.0 GHz的极高频率操作。 Power Architecture支持64位和32位寻址。 早期的实现使用32位子集,并且仅支持32位应用程序。 自1995年以来,64位处理器就实现了完整的体系结构,从而使二进制应用程序与现有的32位应用程序完全兼容,并支持新的64位应用程序。 在IBM®eServer™iSeries™,pSeries®,OpenPower™和BladeCenter™JS20服务器以及Apple的G5硬件中都可以找到64位POWER和PPC芯片。
POWER5体系结构是POWER4体系结构的增强,但是保持了二进制和结构兼容性。 相同的管道结构使针对POWER4的编译器优化可以在基于POWER5处理器的系统上同样出色地工作。 POWER5的主要功能包括微分区和同步多线程。
Linux已在商业和技术计算环境中占有重要地位,并Swift获得了各种企业的认可。 IBM Linux技术中心(LTC)是当今世界上用于企业Linux开发的首要组织,它们主要致力于开发,支持和增强Power Architecture上所有主要的Linux发行版。 独立软件供应商(ISV)和客户可以利用此支持,再加上来自开源社区的传统支持,为开发人员提供前所未有的网络支持。
传统上,MySQL已包含在所有主要的Linux发行版中。 主流的Linux on POWER发行版,例如Red Hat Enterprise Linux和SUSE LINUX Enterprise Server,也不例外。
尽管MySQL和MySQL的产品包装和版本在Linux发行版之间有所不同,但希望看到以下内容:
对于产品的详细列表和说明,请参考MySQL的主要枢纽,MySQL.com,下面列出相关主题 。 MySQL.com网站是MySQL信息和产品下载(包括Linux on POWER的下载)的主要来源。 可以从该站点下载适用于Linux on POWER的MySQL和相关产品的最新编译版本以及源代码。
MySQL数据库有多种修饰。 有些可以在商业和开源双重许可下获得,而有些只能在商业许可下才能获得。 有关更多信息,请参考MySQL数据库服务器页面。 (请参阅相关主题 。)
本文主要涉及针对POWER硬件的两个IBM支持的Linux on POWER发行版:
适用于Linux on POWER的MySQL还可以在其他Linux发行版上运行,例如Yellow Dog Linux,Y-HPC,Debian,以及许多其他在IBM和Apple生产的POWER和PPC硬件上运行的版本。
在Linux on POWER上安装MySQL与在其他任何体系结构的Linux OS上安装MySQL没什么不同。
如果您使用Linux on POWER发行版中包含的MySQL软件包,则安装MySQL与从发行版介质中安装所需的rpm软件包一样容易。 MySQL.com网站还以Linux社区普遍接受的压缩格式提供了Linux on POWER和PPC的下载。
MySQL本身的源代码和许多工具都是在开放源代码许可下公开提供的,可以使用GNU编译器集合(GCC)在Linux on POWER上轻松编译。
有几种MySQL管理工具,它们使用直观的图形用户界面来简化MySQL数据库的管理。
MySQL Administrator允许您配置,备份/还原和控制数据库以及MySQL服务器环境。 图1显示了在Linux on POWER的SLES 9上运行的MySQL Administrator的屏幕截图,显示了我们将在下一部分中创建的数据库结构。
可以从源代码在Linux on POWER上编译MySQL Administrator。 有关MySQL Administrator的更多信息,请参见MySQL Administrator页面。 (请参阅相关主题 。)
MySQL查询浏览器是一种易于使用的图形工具,用于在MySQL中创建,执行和优化SQL查询。 图2显示了在Linux on POWER的SLES 9上运行的MySQL Query Browser窗口的屏幕截图。
与MySQL Administrator类似,MySQL Query Browser的源代码可用,并且可以在Linux on POWER上进行编译。 有关MySQL查询浏览器的更多信息,请参考MySQL查询浏览器页面。 (请参阅相关主题 。)
另一个MySQL管理和控制工具是phpMyAdmin。 该工具完全用PHP编写,可在具有以下可用组件的任何Linux发行版上使用:
默认情况下,Linux on POWER发行版附带这些组件。 配置很简单,并在phpMyAdmin随附的文档中进行了详细说明。 图3显示了在Linux on POWER的SLES 9上运行的phpMyAdmin的屏幕截图。
有关更多信息并下载phpMyAdmin,请访问phpMyAdmin网站。 (请参阅相关主题 。)
当使用上述管理工具时,迁移MySQL数据库非常简单,因为MySQL数据库表结构保存在可以备份并复制到其他系统的文件中。 有关更多信息,请参考MySQL文档。
本文的这一部分检查了一个简单的数据库设计,以介绍一些关键的MySQL概念以及您可以在MySQL中执行的一些基本任务
本示例探索一个简化的数据库,该数据库跟踪IT专家承包公司的日常活动。 图4展示了一个实体关系图(ERD),它为您提供了公司简化的数据要求和操作的宏观视图。
该公司将IT专家与不同客户的项目签约,并根据既定的小时费率向客户收取所提供服务的费用。 JOB表跟踪客户每小时收取的服务费,费率取决于工作类型。 EMPLOYEE表跟踪员工信息,包括员工担任的职位,该信息被保留为JOB表中条目的外键。 JOB表与EMPLOYEE表具有1:M的可选关系。 一个职位可以不设人员而存在。 另一方面,要求员工仅担任一个主要职位。
PROJECT表保存有关该公司参与的项目的数据。 一个项目必须完全由公司的一名员工来管理。 员工可以管理多个项目。 但是,并非每个员工都可以管理一个项目。
每位员工都会收到一份订单表格,他们每天记录在一个客户的特定项目上工作多少小时,每小时多少费率以及向客户收取的总金额。
可以一次将一个雇员分配到多个项目,也可以一次不分配。 一个项目可以有很多员工在工作,或者根本没有。 通过复合实体ORDERFORM实现此M:N关系。
数据库中的所有表都被规范化为第三范式(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 |
+-------------+
3 rows in set (0.00 sec)
请注意,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产品文档。
要验证结果,请打印出作业表中的所有行,如下所示:
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_CODE等于203的JOB表中的条目,因为有一个雇员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应用程序。 在Linux(包括Linux on POWER)上,有许多API允许您编写应用程序以与MySQL,PHP,Java,C,C ++,Perl,Python和Ruby等编程语言进行通信。 在本系列的第2部分中 ,了解有关在Linux on Power上开发MySQL的更多信息。
MySQL被公认为当今性能最好的开源企业级Linux关系数据库服务器之一。 IBM 64位POWER平台通过提供卓越的性能,可靠性和高可用性来满足当今客户的所有需求。 MySQL RDBMS的强大功能与能够微分区,动态启用和禁用SMT的基于IBM POWER处理器的服务器的结合,提供了市场上最强大的Linux数据库服务器平台之一。
翻译自: https://www.ibm.com/developerworks/systems/library/es-mysqlp1/index.html
gp数据库创建数据库