

**前引:**创建表是数据存储的起点,需结合业务场景明确字段类型、约束规则、字符集与校验规则等核心属性。合理的表结构设计,既能适配业务数据的存储需求,也能从源头避免后续数据混乱、查询性能低下等问题。本小节聚焦表创建的核心语法与设计原则,确保表结构的合理性与扩展性!
目录
【一】表的入门操作
说明:表的增删查找后面会单独出一章进行学习,前面两章只是满足基本的需要
(1)创建表
首先我们需要在指定的数据库中操作,假设现在存在数据库:hello
先选中数据库:
cpp
use hello; # 切换到hello数据库,执行后会提示"Database changed"
例如:

创建表:(字段名就是变量名,字段(数据)类型我们后面会讲解!)
cpp
create table 表名(
字段名1 字段类型,
字段名2 字段类型
);
例如:

创建表时可以选中字符集和检验规则:
cpp
create table 表名 (
id int,
name varchar(20) comment '用户名',
password char(32) comment '密码是32位的md5值',
birthday date comment '生日'
) character set 字符集 engine 校验规则;
例如:

(2)表插入数据
作用:插入具体数据
cpp
insert into 表名(字段名称(逗号区分))
values (插入的数据(逗号区分));
例如:

(3)显示所有表
作用:显示当前数据库的所有表
先选中数据库:
cpp
use hello; # 切换到hello数据库,执行后会提示"Database changed"
例如:

再执行指令:
cpp
show tables;
例如:

(4)显示表数据
作用:显示表中的数据
cpp
select * from 表名;
例如:

(5)显示表结构
作用:显示表中数据结构(后面会进行介绍)
cpp
desc 表名;
例如:

(6)删除表
作用:删除指定的表
cpp
drop table 表名;
例如:

(7)给表追加字段
说明:给表追加字段,比如给学生增加学号信息
cpp
alter table 表名 add column 字段名 数据类型;
(8)查询表指定数据
说明:查询表中具体的数据栏,比如根据 ID 查找学生
cpp
select 要查询的字段名 -- 查单个字段写字段名,查整行写*
from 表名
where 精准筛选条件; -- 条件要能唯一定位目标数据(优先用主键/唯一字段)
例如:
单个条件:

多个条件:用and追加条件

【二】表的约束
说明:"表的约束"即给表的一些规则,比如某些值不能为空,某些值可以选,表中一些值的长度也 属于规则,一般都是对参数字段进行约束添加操作
(1)空属性
说明:空属性表示该值是否支持空值------是否必须填写,选项为"null "或者"not null"
注意:在下面(2)中可以实验出,null 也属于一个值,代表空值
例如:我现在创建一个学生信息表,其中"学号"不能为null,"名字"可以为null(举例)

然后我们查看表结构,看有什么变化:可以看到第一行的NUll显示NO,然后我们再插入数据:

先同时省略,再只省略第二行,看是什么情况:

再打印表数据:

(2)默认值
说明:默认值即缺省值,你不填会默认采用你设置的缺省值"default"
例如:


(3)列描述
说明:没有实际意义,一般用来当做注释使用即描述字段"comment"
例如:

如果要显示查看注释,可以执行:
cpp
show create table 表名;

(4)zerofill
说明:zerofill 为补充位数,当长度小于设置的长度,自动补充0,否则正常显示**(搭配括号使用)**
例如:


(5)主键
说明:主键即相当于具有唯一性的 key,primary key (支持复合)即给某个数据字段设置为主键值
例如:

表建好之后如何追加主键?
cpp
alter table 表名 add primary key(字段列表)
表搭配主键建好之后如何删除主键?
cpp
alter table 表名 drop primary key;
(6)自增长
说明:给该字段添加auto_increment描述后,该字段如果不给值,每次会自动+1,形成自增长
注意:一张表最多只能有一个自增长,且自增长的字段必须是整数
例如:
cpp
mysql> create table tt21(
-> id int unsigned primary key auto_increment,
-> name varchar(10) not null default ''
-> );
mysql> insert into tt21(name) values('a');
mysql> insert into tt21(name) values('b');
mysql> select * from tt21;
+----+------+
| id | name |
+----+------+
| 1 | a |
| 2 | b |
+----+------+
(7)唯一键
说明:一个表中往往有多个字段需要具备唯一性,比如电话、学号、班级,但是主键只能存在一个,那么多余的字段也需要具备唯一性,就需要唯一键来完成。唯一键(UNIQUE )也是 MySQL 的字段约束,核心作用是保证指定字段 / 字段组合的值在表中唯一、不重复
它与主键的区别?
| 特性 | 唯一键(UNIQUE) | 主键(PRIMARY KEY) |
|---|---|---|
| 唯一性 | 字段值必须唯一 | 字段值必须唯一 |
| 非空性 | 允许存储 NULL 值(多个 NULL 不冲突) | 不允许存储 NULL 值 |
| 数量限制 | 一个表可创建多个唯一键 | 一个表只能有一个主键 |
| 索引特性 | 自动创建唯一索引 | 自动创建主键索引 |
(8)外键
说明:当两个表需要建立联系时就需要外键,比如商品信息和消费信息,二者通过外键形成某种绑定的关系,外键约束主要定义在从表上,主表则必须是有主键约束或unique 约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null,理解:

cpp
foreign key (字段名) references 主表(列)
例如:主表设计
cpp
create table myclass (
id int primary key,
name varchar(30) not null comment'班级名'
);
例如:从表设计,二者通过外键形成关联
cpp
create table stu (
id int primary key,
name varchar(30) not null comment '学生名',
class_id int,
foreign key (class_id) references myclass(id)
);
