数据库创建完成后就要创建数据表了,其实创建数据表的过程就是在规定存储什么类型的数据和按什么格式存储。
创建数据表之前要先用 USE 命令指定数据库,这个操作的目的是告诉数据库系统:“我要在这个数据库中创建表”。若没有执行这项操作就直接创建数据表,数据库会显示“No database selected”的错误提示。
在 MySQL/MariaDB 数据库中,创建表需要使用 CREATE TABLE 命令,其语法格式为:
CREATE TABLE [IF NOT EXISTS]表名称(
字段名称 数据类型[(宽度)] [字段属性|约束] [索引] [注释],
字段名称 数据类型[字段属性|约束] [索引] [注释],
...
)[ENGINE=存储引擎] [CHARSET=编码方式];
[ ] 中的内容是可选的;语句中的逗号一定要是英文的逗号,不能是中文的;最后一行定义字段不能有逗号。
语句中每段的具体含义如下:
CREATE TABLE:创建表。
[IF NOT EXISTS]:如果表不存在就创建表(可选)。
表名称:要创建的表的名称。命名只能使用小写英文字母、数字、下划线,且必须是英文字母开头;多个单词之间可以用下划线“_”隔开;命名简洁明确;禁止使用大写字母。
字段名称:表示列名,也就是表头中的列的名称。
数据类型[(宽度)]:指定存储什么类型的数据;[(宽度)]表示指定存储大小(可选)。
[字段属性|约束]、[索引]、[注释]:这 3 个字段都是可选的,具体有下表所示的配置项可供选择(不区分大小写,可以有多个):
配置项
功能
PRIMARY KEY
主键约束,表示唯一标识,且一个表中只能有一个主键。拥有主键约束的字段(列)不能为空,而且不能有重复的值,一般用来约束 ID 之类的内容,例如,学生信息表中的学号是唯一的。
UNIQUE KEY
唯一约束,表示该字段下的值不能重复,能够确保列的唯一性。与主键约束不同的是,唯一约束在一个表中可以有多个,并且设置唯一约束的列是允许有空值的,虽然只能有一个空值。
FOREIGN KEY
外键约束,目的是保证数据的完整性和唯一性,以及实现一对一或一对多关系。外键约束经常和主键约束一起使用,用来确保数据的一致性。
NOT NULL
非空约束,表示该字段下的值不能为空。
AUTO_INCREMENT
自增长,只能用于数值列,配合索引使用,默认起始值从 1 开始,每次增加 1。
UNSIGNED
数据类型为无符号,值从 0 开始,无负数
ZEROFILL
零填充,当数据的显示长度不够的时候可以使用在数据前补 0 的方式填充至指定长度,字段会自动添加“UNSIGNED”
DEFAULT
表示如果插入数据时没有给该字段赋值,那么就使用默认值
[ENGINE=存储引擎] [CHARSET=编码方式]:可选,用来指定存储引擎和编码方式,不写等于使用数据库默认指定的存储引擎与编码。在 MySQL/MariaDB 数据库中默认的存储引擎为 InnoDB,默认的编码方式是 utf8。
在整张表中,设为自增长约束条件的字段必须是主键。数据宽度和约束条件的关系:数据宽度用于限制数据的存储,约束条件是在宽度的基础之上增加的额外的约束。
接下来就让我们登录到 MariaDB 数据库中创建一个表,这个表根据学生成绩信息表创建,表头有 ID、学生姓名和英语、数学、地理 3 门课的考试成绩。
[root@linux ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.6.5-MariaDB Source distribution
Copyright (c) 2000, 2000, 2000, 2000, 2000, 2000, 2000, MariaDB Corporation Ab and others.
Type 'help;' or 'h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> create database test01; #创建数据库
Query OK, 1 row affected (0.000 sec)
MariaDB [(none)]> show databases;
+---------------+
| Database |
+---------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test01 |
+---------------+
5 rows in set (0.001 sec)
MariaDB [(none)]> use test01; #指定此数据库,在这个库中创建表
Database changed
MariaDB [test01]> create table stu_score (
-> stu_id int not null,
-> name varchar(20) primary key,
-> english char(3) not null,
-> mathematics char(3),
-> geography char(3) not null
-> );
Query OK, 0 rows affected (0.004 sec)
MariaDB [test01]>
可以看到,我们使用 CREATE TABLE 命令创建了一个名为 stu_score 的表,在这张表中共添加了 5 个字段:
stu_id 字段采用 int 数据类型,并且约束条件设置为不允许为空;
name 字段表示学生的名字,采用 varchar 数据类型,并且将这个字段设置为主键,也就是说在这张表中,学生的名字是唯一的标识且不允许重复;
english 字段表示英语考试的成绩,采用 char 数据类型,字段中的值不允许为空;
mathematics 字段表示数学考试成绩,采用 char 数据类型,没有添加任何约束条件;
最后一个字段 geography 表示地理考试成绩,采用 char 数据类型,且不允许为空。容易发现,在定义的最后一个字段,结尾是没有逗号的,这个地方最容易被忽视。