2.3 创建数据库和表
在学习如何创建数据库和表之前,可以使用如下步骤来查询当前服务器中存在的数据库:
使用show语句查询当前服务器上存在哪些数据库:
从以上信息可以了解到,当我们执行show databases语句后,服务器将查询当前存在的所有数据库。
mysql数据库存储了用户访问权限等信息。test数据库是系统提供的默认测试库,可以删除。上述语句显示的数据库列表可能和读者计算机上显示的数据库列表有所不同,因为不会显示当前用户没有访问权限的数据库。
如果mysql数据库存在,那么我们可以进入mysql数据库查询当前数据库中的表。比如,使用如下语句可以切换到mysql数据库:
使用如下语句可以查询当前数据库中的所有表:
执行结果如图2-7所示,首先切换到mysql数据库,然后查询出当前mysql数据库中的所有表。
图2-7 查询mysql数据库中的所有表
2.3.1 创建数据库
如果要创建一个新的数据库,那么可以执行如下语句:
create database DEMO;
执行结果如图2-8所示,创建数据库成功。
图2-8 创建数据库
在UNIX操作系统中,数据库的名称是区分字母大小写的(这与SQL关键字不区分字母大小写不同),因此在进入数据库时,必须使用数据库的名称DEMO来指向正确的数据库,而不能使用Demo、demo。对于表名也是如此(注意,在Windows中此限制不适用)。如图2-9所示,切换数据库时,由于未正确使用大小写而导致切换数据库操作失败。
如图2-10所示,唯有数据库名称的大小写正确才能正常完成数据库的切换。
图2-9 数据库切换操作失败
图2-10 数据库切换操作成功
如果在创建数据库时出现诸如ERROR 1044 (42000): Access denied for user clay@'localhost'的错误,则说明用户没有创建数据库所需的权限。
2.3.2 创建表
如图2-11所示,进入DMEO数据库中,此时该数据库中并没有任何表。
图2-11 切换数据库并查询所有表
如果要在DEMO数据库中创建表,那么在创建之前需要了解如下信息:
· 表名:代表数据表的名称,如果我们想要存储用户信息,则可以取名为userinfo。
· 表字段名:表示表中有哪些属性,比如name、age、address等字段。
以下为创建MySQL数据表的通用语法:
create table table_name (column_name column_type);
例2.10 在DEMO数据库中创建数据表userinfo,SQL语句如下:
create table if not exists `userinfo`( `id` int unsigned auto_increment, `name` varchar(100) not null, `age` int not null, `date` date, primary key ( `id` ))engine=innodb default charset=utf8;
上述语句说明如下:
· 如果不希望字段的值为null,那么可以将字段的属性设置为not null,如果在操作数据库时将null输入到该字段,则会报错。
· auto_increment:把列定义为自增的属性,一般用于主键,数值会自动加1。
· primary key:用于把列定义为主键,可以使用多列来定义主键,列之间以逗号分隔。
· engine:设置存储引擎。
· charset:设置字符集的编码。
· varchar(100)与int:代表此字段使用的数据类型,后续章节会专门讲解每一种数据类型。
创建结果如图2-12所示。
图2-12 创建表
如果想查询此表的结构,可以执行如下语句:
describe userinfo;
执行结果如图2-13所示,可以清晰地看到此表的结构及其说明。
图2-13 查询表的结构及其说明
此后若再次查询当前数据库中的表,则会显示已创建表的基本信息,如图2-14所示。
图2-14 查询数据库中表的基本信息