《MySQL表的创建与约束:定义结构化数据的存储载体》

**前引:**创建表是数据存储的起点,需结合业务场景明确字段类型、约束规则、字符集与校验规则等核心属性。合理的表结构设计,既能适配业务数据的存储需求,也能从源头避免后续数据混乱、查询性能低下等问题。本小节聚焦表创建的核心语法与设计原则,确保表结构的合理性与扩展性!

目录

【一】表的入门操作

(1)创建表

(2)表插入数据

(3)显示所有表

(4)显示表数据

(5)显示表结构

(6)删除表

(7)给表追加字段

(8)查询表指定数据

【二】表的约束

(1)空属性

(2)默认值

(3)列描述

(4)zerofill

(5)主键

(6)自增长

(7)唯一键

(8)外键


【一】表的入门操作

说明:表的增删查找后面会单独出一章进行学习,前面两章只是满足基本的需要

(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)
 );
相关推荐
老纪的技术唠嗑局2 小时前
用自然语言玩转 AI 原生数据库 —— seekdb MCP Server
数据库·人工智能
wasp5202 小时前
Hudi Spark 集成分析
数据库·spark·hudi·数据湖
Maggie_ssss_supp2 小时前
linux-ProxyQSL读写分离
数据库·mysql
2501_944521592 小时前
Flutter for OpenHarmony 微动漫App实战:骨架屏加载实现
android·开发语言·javascript·数据库·redis·flutter·缓存
l1t2 小时前
将追赶法求连续区间的Oracle SQL改写成DuckDB
数据库·sql·oracle·duckdb
予枫的编程笔记2 小时前
【Java进阶】深度解析Canal:从原理到实战,MySQL增量数据同步的利器
java·开发语言·mysql
时艰.2 小时前
Redis 核心知识点归纳与详解
数据库·redis·缓存
莞理员2 小时前
新老数据库表同步问题
数据库
聆风吟º11 小时前
Oracle到KingbaseES数据库迁移:全流程实战指南与避坑总结
数据库·oracle·数据库迁移·kingbasees