13.2 MySQL数据库的基本操作
本节首先以MySQL为对象,介绍一些数据库的基本概念。然后,系统学习一些基本的数据库管理操作,如建立数据库等。
13.2.1 表、字段、记录和键的概念
图13-29 表的实例——用户信息
本小节介绍关系数据库中的一些基本概念,主要涉及表、字段、记录、键。
关系数据库由许多表构成,数据库中的所有数据都存储在这些表中。图13-29就是一个表的实例。
这个实例中的表有一个名字——Users;它有4列,每一列都代表某种数据类别;有3行,每一行都代表一个用户。
从图13-29可以看出,表中的每一列都有一个唯一的名字,每列包含了不同的数据,这些数据称作列的值。每一列都是某种特定的数据类型。如第1列是整数类型,而最后一列是日期类型,其余两列是字符串类型。在数据库中,一个表中的列叫做字段,例表中UserId、UserName、Gender和RegTime都是表Users的字段,同时它们也代表了各自的字段名称。
例表中的每一行,都是一条完整的数据,代表了某个具体用户的一些信息,这些信息分别存储在不同的字段中。通常,表中的一行叫做记录。数据库管理系统就是通过一定机制查找表中的这些记录,来获取数据的。
在例表中,每一条记录代表着唯一的用户信息数据。因此,每条记录必须能和其他记录有所区别。通常将表中某个字段的值设定为唯一的值,就可以区分不同的记录。这样的字段在数据库中称为键。由此可知,表中键的值是不能重复的。
注意 图13-29所示的用户信息表中,使用字段UserName作为键显然是不合适的,因为用户名完全有可能重复。选择作为键的字段的值应该具有唯一性,所以,可以选择UserId作为表Users的键。
13.2.2 登录和退出MySQL
Windows系统中,要在没有设置环境变量PATH的情况下登录MySQL,在命令提示符界面下进入MySQL安装目录的bin目录,使用如下所示的语法格式命令行即可。
mysql –u user_name –p password –h host
·选项参数-u用来指定用户名user_name。
·选项-p用来指定该用户名登录MySQL所使用的密码password。
·选项-h用来指定所要连接的数据库服务器host。
注意 通常,user_name是root用户,root表示MySQL的超级管理员用户,它拥有操作MySQL的最高权限。
初次安装MySQL时,默认密码为空,所以选项-p后的password可以留空,或者不加-p参数。因为MySQL安装在本地计算机上,所以选项-h可以不要。以本书将MySQL安装在Windows的C盘根目录下为例,登录MySQL使用的Windows命令提示界面如图13-30所示。
图13-30 在Windows命令提示符下登录MySQL
登录MySQL以后,会有MySQL的操作提示符:mysql>,管理和维护数据都将在此操作符下进行。
提示 如果要退出MySQL,可以在MySQL提示符下输入命令exit或quit。
13.2.3 建立和删除数据库
本书以在Windows命令提示符下使用MySQL为例,介绍MySQL及其有关操作。
图13-31 新装的MySQL
要使用MySQL,首先需要创建一个数据库。在MySQL中,使用命令SHOW DATABASES(可以全部使用小写字母)可以查看在当前MySQL系统中的所有数据库。如果是新安装的MySQL,使用这个命令应该看到如图13-31所示的结果。
当前MySQL中有两个数据库,第1个数据库mysql是MySQL的系统数据库;第2个是MySQL自带的供用户学习、测试使用的数据库test。
在MySQL中使用语句CREATE可以创建一个数据库,语句用法如下。
CREATE DATABASE database_name;
其中,database_name是要创建的数据库的名字,由用户自行命名。MySQL中,SQL语句必须以分号结束。如下示例代码即在MySQL中创建一个名叫test_db的数据库。
CREATE DATABASE test_db;
如果语句执行成功,MySQL会有类似于“Query OK,1row affected(0.03sec)”的提示信息,表示数据库创建成功。
如果需要删除一个数据库,可以使用DROP语句,语句用法如下。
DROP DATABASE database_name
其中,database_name是一个已经存在的、即将被删除的数据库名字。如在MySQL中,删除刚刚创建的数据库test_db,可以使用如下语句。
DROP DATABASE test_db;
13.2.4 表的查看与建立
图13-32 查看所有表
1.查看表
在MySQL中,使用命令USE database_name可以转到要管理或查看信息的数据库,其中database_name是数据库名称;使用SHOW TABLES命令可以查看某个数据库下的所有表。例如查看数据库mysql中的表,所用SQL语句及执行结果如图13-32所示。
可以看到,数据库mysql中有24个表。
2.建立表
在一个数据库中创建表,首先要使用USE语句转到该数据库,然后使用CREATE TABLE语句创建表,语句用法如下。
CREATE TABLE table_name ( column_1 type [modifiers] [, coloumn_2 type [modifiers] … );
其中,table_name是所要创建的表的名称;column_1是表的第一列,即第一个字段的名字;type是该字段的类型,其后是可选项,是对该字段的近一步说明。每一个列创建语句后必须以逗号(,)结尾,最后一个除外。整个CREATE TABLE语句以分号结束。
例如图13-29所示的表,它的创建语句如下。
01 CREATE TABLE Users ( 02 UserId INT UNSIGNED NOT NULL, 03 UserName VARCHAR(50) NOT NULL, 04 Gender CHAR(6) NOT NULL DEFAULT 'Male', 05 RegTime DATE NOT NULL 06 );
【代码解析】这个语句创建一个名为Users的表,它有4列(即4个字段)UserId、UserName、Gender和RegTime。每个字段后都有该字段的类型,后面是对其做进一步说明的修饰符。以字段Gender为例,Gender是该字段的名字,它的类型是CHAR,表示定长字符串类型,6表示该字段最多存储6个字符,如果字符串超过6个字符,多余部分将被截去,不会存入表中;后面的NOT NULL表示该字段不能存入任何null值;最后的DEFAULT指定一个字段的默认值,DEFAULT'Male'表示当向该字段存入null值时,Gender一列将被指定为默认值Male。
注意 代码中,除了使用CHAR类型的字段外,还使用了VARCHAR类型。VARCHAR是变长字符串。VARCHAR表示的长度范围为1~255,定义为VARCHAR的列,只存储所需长度的字符。而CHAR正好相反,无论字符串多长,它都会存入定长字符串,不足的部分会用空格填满后存入。
13.2.5 建立索引
如果一个表的数据量很大,例如有上百万行的时候,MySQL查找某条(或某些)特定的记录时会花费很长时间。通过在表中为那些要频繁查找的字段建立索引,可以减少MySQL查找记录所使用的时间。MySQL使用如下语法为一个表中的某些列(即字段)建立索引。
CREATE INDEX index_name ON table_name ( column_1, column_2, … )
其中,INDEX是表示建立索引的关键字,index_name是索引名称。也可以在创建表的同时为表指定索引,示例语句如下。
01 CREATE TABLE books ( 02 id INT NOT NULL, 03 name VARCHAR(40) NOT NULL, 04 price DECIMAL(3,2), 05 INDEX idx (id) 06 );
【代码解析】这段SQL语句为表books的字段id指定了一个名叫idx的索引。
注意 应该将所有建立索引的字段声明为NOT NULL。
另外,MySQL支持主键这种特殊索引。在MySQL中,主键是带有名称PRIMARY的唯一键。在创建表时,可以将某列设为主键。例如如下示例语句即创建了带有主键id的表users。
CREATE TABLE users ( id INT NOT NULL PRIMARY KEY, name VARCHAR(30), created_time DATE );