MySQL认证教程:create创建数据库和表
最新学讯:近期OCP认证正在报名中,因考试人员较多请尽快报名获取最近考试时间,报名费用请联系在线老师,甲骨文官方认证,报名从速!
我要咨询MySQL认证教程:create创建数据库和表,假设你已拥有创建和修改服务器上数据库所必需的权限,那么我们来看一下如何创建数据库以及数据库中的表。在本章的示例中,我们将为一个虚拟的书店建立一个数据库:
- CREATE DATABASE bookstore;
通过这条简单的SQL 语句,本书已创建了名为bookstore 的数据库。你可能已经注意到上述语句中的命令及保留字的字母都是大写的。这并不是必需的,MySQL 语句以及子句中的保留字对大小写并不敏感。数据库与表名对大小写是否敏感取决于你所用的操作系统,比如在Linux 系统上对大小写是敏感的,而Windows 系统,对大小写则不敏感。按照通常的习惯,在SQL 说明文档中保留字均使用大写字母,而数据库名、表名以及字段名都使用小写字母。你可能也注意到了SQL 语句结尾处的分号。一条完整的SQL 语句可能不止一行,直到输入分号以后,客户机程序才会将SQL 语句发送到服务器解析执行。用"\c" 替代分号,可取消正在执行的SQL 语句。
创建好数据库后,这虽然只是个空库,但是我们可通过下面的语句从默认数据库切换到新数据库:
- USE bookstore
使用上述语句,就不必在每个SQL 语句中都指定所用到的数据库名了。默认情况下,MySQL 会把最后一个指定的数据库作为当前使用的数据库。该语句是基于客户机程序的SQL 语句,所以在句尾不必添加分号。
下面,我们将创建第一个表,以后本书将把数据添加到此表中。首先创建一个存放图书基本信息的数据表,因为这是书店业务的核心信息:
- CREATE TABLE books ( book_id INT, title
VARCHAR(50), author VARCHAR(50));
上面的SQL 语句创建了带有三个列的图书信息表。圆括号内是列的全部列表。
第一列是每条记录的标识码,代表一本书。你可以按照上面的例子将其数据类型设为INTEGER 或INT 。第二列和第三列是可变长的字符类型,每列值的长度不能超过50 。
输入DESCRIBE 语句可查看刚刚创建的表的结果,该结果以表格形式输出:
- DESCRIBE books; +---------+---------------+------+---
--+---------+-------+ | Field | Type | Null | Key |
Default | Extra | +---------+---------------+-----
-+-----+---------+-------+ - | book_id | int(11) | YES | | NULL | |
- | title | varchar(50) | YES | | NULL | |
- | author | varchar(50) | YES | | NULL | |
- +---------+---------------+------+-----+---------+-------+
考虑到书店规模有点大,我们认为还需要为数据元素多添加几个列:出版商、出版年份、ISBN 码、图书类型(例如:小说、诗歌、戏剧)、图书描述,等等。我们还想让MySQL 自动为book_id 列分配一个数字编号,这样在添加一行新记录时就不必担心有重复问题发生。另外,我们决定将作者字段的真实作者名改成标识码,通过标识码可将本表与包含作者名字段的其他表关联起来。这种方式将数据统一起来,可以简化数据的输入,也使排列查找操作更容易实现。输入下列SQL 语句可在已创建好的数据表中完成修改操作:
- ALTER TABLE books
- CHANGE COLUMN book_id book_id INT AUTO_INCREMENT PRIMARY KEY,
- CHANGE COLUMN author author_id INT,
- ADD COLUMN description TEXT,
- ADD COLUMN genre ENUM('novel','poetry','drama'),
- ADD COLUMN publisher_id INT,
- ADD COLUMN pub_year VARCHAR(4),
- ADD COLUMN isbn VARCHAR(20);
在这个SQL 语句的起始行后,可以看到每个修改或添加字段的子句都是由一个逗号分开的。第二行子句修改book_id 列。即便是使用原来的列名和数据类型,我们也要将其重写一遍。我们还要为其添加AUTO_INCREMENT 标记,它负责执行前一段提到的任务,就是将任意一个唯一的值分配给表中的每条记录。另外,我们还要将该字段设为主键,以提高数据检索的速度。
第一个CHANGE 子句可能会让人感到迷惑,因为其中列名(book_id )出现了二次。当了解CHANGE 子句的语法时,你就会明白其中的意义了:第一个book_id 表示将要修改的现有列,该子句余下的部分用于指定一个新列。要想更好地理解这个子句的意思,可查看第二条CHANGE 子句:该子句用新列author_id 替代了现有列author 。数据表中不再有名为author 的列。
在第三行子句中,我们修改了author 列,令其名称及数据类型与将要创建的authors 表中的名称与类型一致。如同books 表中的索引列代表图书一样,authors 表中也有一个代表每个作者的索引列。我们把books 表和authors 表关联起来做查询操作,这样就可通过books 表的author_id 列找到author 表中相应的记录。由于authors 表中相应列的数据类型是INT ,所以该子句中author_id 列的数据类型也一定是INT 。
第四行子句为每本书添加了一个描述列。该列的数据类型是文本型,文本类型是可变长数据类型,可支持长度小于64 千字节的数据。然而,还有许多其他因素可进一步约束文本列。请参阅附录A以查看数据类型列表及其对应的范围以及其他的限定因素。
在genre 列中,为了确保统一性,事先已列举了几个可用的值。该字段允许为空值或NULL ,空值或NULL 并不需要指定。
向books 表输入数据之前,我们先快速建立一个aurhors 表。该表做为备查表。首先要向author 表中添加数据,因为当我们向books 表中添加数据时,需要知道books 表中authors 列的标识号:
- CREATE TABLE authors
- (author_id INT AUTO_INCREMENT PRIMARY KEY,
- author_last VARCHAR(50),
- author_?rst VARCHAR(50),
- country VARCHAR(50));
尽管我们为虚拟书店添加了其他几个字段,但authors 表用到的字段并不多。如前段所述,根据需要,我们还要把books 表与authors 表通过author_id 字段关联在一起。
在authors 表中,将作者的名和姓分别存放在二个不同的字段中,这样可以很容易通过姓对数据进行分类查找。另外还要添加一个作者的国籍列,这样就可以根据顾客的要求查找特定国家作者的相关作品。为了方便起见,最好使用国家代码,然后在其他备查表中列出国家的全称。我们尽量保持本指南的简单性,所以仅把有实用价值的信息列举出来。