MySQL创建数据表(附带实例)
表是数据库中用户存储所有数据的对象,是关系模型中表示实体的方式,是组成数据库的基本元素。可以说没有表,也就没有数据库。在一个关系数据库中,可以包含多个表,所有数据存储在表中。
在数据表中,数据以行和列的形式存储在规范化的二维表格中。表类似于电子表格软件的工作表,但更规范。MySQL 中的每个表都有一个名字,以标识该表。
下表所示为 student 表(即学生表)。下面说明一些与表有关的名词。
student 表保存学校所有学生的信息,包括学生学号、姓名和身份证号等,其信息说明如下表所示。
数据表属于数据库,在创建数据表之前,应该使用“USE <数据库名>”语句指定操作是在哪个数据库中进行,如果没有选择数据库,就会抛出“No database selected”的错误。
创建数据表的语句为 CREATE TABLE,语法规则如下:
表创建完成后,为确保表的定义正确,可以查看表结构的定义。可以采用两种方式来查看,一种是通过工具软件的图形化界面查看;另一种是通过 MySQL Command Line Client 方式使用 DESCRIBE 和 SHOW CREATE TABLE 语句查看。
DESCRIBE/DESC 语句可以查表的字段信息,包括字段名、字段数据类型、是否为主键、是否有默认值等,其语法规则如下:
通过 DESCRIBE 命令查看 student 表的基本结构,DESCRIBE 命令的执行结果如下:
使用 SHOW CREATE TABLE 语句可以查看创建表时的定义语句,还可以查看表的存储引擎和字符编码,在表名之后加上“\G”,可以使所显示的信息更加简洁,其语法规则如下:
在数据表中,数据以行和列的形式存储在规范化的二维表格中。表类似于电子表格软件的工作表,但更规范。MySQL 中的每个表都有一个名字,以标识该表。
下表所示为 student 表(即学生表)。下面说明一些与表有关的名词。
表:student 表

- 表结构:每个数据库包含若干个表,每个表具有一定的结构,称为“表型”,即组成表的名称及数据类型,也就是寻常表格的“栏目信息”;
- 表:由定义的列数和可变的行数组成的逻辑结构;
- 列:用来保存对象的某一类属性。每列又称为一个字段,每列的标题称为字段名;
- 行:用来保存一条记录,是数据对象的一个实例,包括若干信息项;
- 记录:每个表包含若干行数据,它们是表的“值”,表中的一行称为一条记录,每一行都是实体的一个完整描述。实体可以是人也可以是物,甚至可以是一个概念。因此,表是记录的有限集合;
- 字段:每条记录由若干个数据项构成,将构成记录的每个数据项称为字段;
- 关键字:在 student 表中,若不加以限制,每条记录的姓名、性别、出生年月日、所在系部和邮政编码这 5 个字段的值都有可能相同,但是学号字段的值对表中所有记录来说一定不同,学号是关键字,也就是说通过学号字段可以将表中的不同记录区分开来;
student 表保存学校所有学生的信息,包括学生学号、姓名和身份证号等,其信息说明如下表所示。
表:student 表的信息说明

数据表属于数据库,在创建数据表之前,应该使用“USE <数据库名>”语句指定操作是在哪个数据库中进行,如果没有选择数据库,就会抛出“No database selected”的错误。
创建数据表的语句为 CREATE TABLE,语法规则如下:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] <表名> ( 字段名1,数据类型[列级别约束条件][默认值], 字段名2,数据类型[列级别约束条件][默认值], ......... [表级别约束条件] )ENGINE="存储引擎";说明如下:
- TEMPORARY:该关键字表示用 CREATE 命令新建的表为临时表。
- IF NOT EXISTS:在创建表中加上一个判断,只有该表目前尚不存在时才执行 CREATE TABLE 操作。用此选项避免出现表已经存在而无法再新建的错误。
- 表名:创建的表名。表名必须符合标识符规则,如果有 MySQL 保留字,必须用单引号引起来。
- 字段名:表中列的名字。字段名必须符合标识符规则,长度不能超过 64 个字符,而且在表中要唯一。如果有 MySQL 保留字,必须用单引号引起来。
- 数据类型:列的数据类型,有的数据类型需要指明长度,并用括号括起。
- 列级别约束条件:指定一些约束条件,来限制该列能够存储的数据。关系数据库中主要存在 5 种约束:非空、唯一、主键、外键、检查。除了以上 5 种标准的约束,MySQL 中还扩展了一些约束,比较常用的有默认值和标识列。
- 表级别约束条件:可以应用于一列上,也可以应用在一个表中的多列上。如果创建的约束涉及该表的多个属性列,则必须创建表级别约束;否则,既可以定义在列级别上,也可以定义在表级别上,此时只是 SQL 语句格式不同而已。
- ENGINE ="存储引擎":MySQL 支持数个存储引擎作为对不同表的类型的处理器,如 ENGINE=InnoDB。
USE STUDB; CREATE TABLE 'student' ( 'stu_no' char(12) NOT NULL, 'stu_name' char(20) NOT NULL, 'stu_sex' char(2) NOT NULL, 'stu_politicalstatus' varchar(20) DEFAULT NULL, 'stu_birthday' date NOT NULL, 'stu_identitycard' varchar(18) NOT NULL, 'stu_speciality' varchar(40) NOT NULL, 'stu_address' varchar(50) DEFAULT NULL, 'stu_postcode' char(6) DEFAULT NULL, 'stu_telephone' varchar(18) NOT NULL, 'stu_email' varchar(30) NOT NULL, 'stu_resume' text, 'stu_poor' tinyint(1) NOT NULL, 'stu_enterscore' float NOT NULL, 'stu_fee' int(11) NOT NULL, PRIMARY KEY ('stu_no') ) ENGINE=InnoDB DEFAULT CHARSET=utf8;在上面的例子里,每个字段都包含附加约束或修饰符,这些可以用来增加对所输入数据的约束。“PRIMARY KEY”表示将“stu_no”字段定义为主键。“NOT NULL”表示字段必须录入值。“ENGINE=InnoDB”表示采用的存储引擎是 InnoDB,InnoDB 是 MySQL 在 Windows 平台默认的存储引擎,所以“ENGINE=InnoDB”可以省略。
表创建完成后,为确保表的定义正确,可以查看表结构的定义。可以采用两种方式来查看,一种是通过工具软件的图形化界面查看;另一种是通过 MySQL Command Line Client 方式使用 DESCRIBE 和 SHOW CREATE TABLE 语句查看。
DESCRIBE/DESC 语句可以查表的字段信息,包括字段名、字段数据类型、是否为主键、是否有默认值等,其语法规则如下:
{DESCRIBE/DESC} 表名 [列名|通配符]
- DESC 是 DESCRIBE 的简写,二者用法相同。
- 列名|通配符,可以是一个列名称,或一个包含“%”和“_”的通配符的字符串,用于获得对于带有与字符串相匹配的名称的各列的输出。没有必要在引号中包含字符串,除非其中包含空格或其他特殊字符。
通过 DESCRIBE 命令查看 student 表的基本结构,DESCRIBE 命令的执行结果如下:
mysql> DESCRIBE student; +---------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+-------------+------+-----+---------+-------+ | stu_no | char(12) | NO | PRI | NULL | | | stu_name | char(20) | NO | | NULL | | | stu_sex | char(2) | NO | | NULL | | | stu_politicalstatus | varchar(20) | YES | | NULL | | | stu_birthday | date | NO | | NULL | | | stu_identitycard | varchar(18) | NO | | NULL | | | stu_speciality| varchar(40) | NO | | NULL | | | stu_address | varchar(50) | YES | | NULL | | | stu_postcode | char(6) | YES | | NULL | | | stu_telephone | varchar(18) | NO | | NULL | | | stu_email | varchar(30) | NO | | NULL | | | stu_resume | text | YES | | NULL | | | stu_poor | tinyint(1) | NO | | NULL | | | stu_enterscore| float | NO | | NULL | | | stu_fee | int(11) | NO | | NULL | | +---------------+-------------+------+-----+---------+-------+ 15 rows in set (0.10 sec)其中各列的含义分别为:
- “Field列”:表示定义的字段名称;
- “Type列”:表示字段类型及长度;
- “Null列”:表示字段是否可以为空值;
- “Key列”:表示字段是否为主键;
- “Default列”:表示该字段是否有默认值;
- “Extra列”:表示某字段的附加信息。
使用 SHOW CREATE TABLE 语句可以查看创建表时的定义语句,还可以查看表的存储引擎和字符编码,在表名之后加上“\G”,可以使所显示的信息更加简洁,其语法规则如下:
SHOW CREATE TABLE表名 \G;通过 SHOW CREATE TABLE 命令查看 student 表的详细信息,SHOW CREATE TABLE 命令的执行结果如下:
mysql> SHOW CREATE TABLE student\G *************************** 1. row *************************** Table: student Create Table: CREATE TABLE `student` ( `stu_no` char(12) NOT NULL, `stu_name` char(20) NOT NULL, `stu_sex` char(2) NOT NULL, `stu_politicalstatus` varchar(20) DEFAULT NULL, `stu_birthday` date NOT NULL, `stu_identitycard` varchar(18) NOT NULL, `stu_speciality` varchar(40) NOT NULL, `stu_address` varchar(50) DEFAULT NULL, `stu_postcode` char(6) DEFAULT NULL, `stu_telephone` varchar(18) NOT NULL, `stu_email` varchar(30) NOT NULL, `stu_resume` text, `stu_poor` tinyint(1) NOT NULL, `stu_enterscore` float NOT NULL, `stu_fee` int(11) NOT NULL, PRIMARY KEY (`stu_no`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec)通过以上两个查看命令的应用可见,它们的侧重点是不一样的,如果要查询表的基本结构,用 DESCRIBE 命令;如果要查看表创建时使用的语句以及存储引擎和字符编码,用 SHOW CREATE TABLE 命令。