mysql/mariadb 进阶知识之表设计和查询

本文深入探讨MySQL/MariaDB的表设计,包括数据类型选择,如数字、字符、日期时间类型的细节,并讲解字段约束条件,如外键约束的管理。此外,介绍了复杂的查询技术,如分组、子查询、多表连接和分页处理,帮助提升SQL查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进阶知识之表设计和查询

学生信息、成绩、课程数据表,提取码:iqub

评论及回复数据表,提取码:hdr7


一、表设计之数据类型选择

1.1、表设计步骤

  1. 第一步,确定大类型:数字、字符串、日期等级等;
  2. 第二步,确定具体的类型:如整数类型,tinyint/smallint/mediumint/int/bigint

1.2、数据类型

1.2.1、数字类型(整数/小数)

整数类型
在这里插入图片描述
整数类型说明:

  • 存储值的范围越大,所需要的存储空间也会越大
  • 可以添加AUTO_INCREMENT自增约束条件
  • UNSIGNED属性(无符号显示):默认是SIGNED(有符号显示),正数的上限提升约1倍
  • INT(11):显示宽度,即能显示的最大数字个数

小数类型
在这里插入图片描述
浮点数取值范围:
在这里插入图片描述

1.2.2、字符类型

在这里插入图片描述
utf8mb3字符集:一个字符=3个字节

utf8mb4字符集:一个字符=4个字节

1.2.3、日期时间类型

在这里插入图片描述

1.2.4、其他类型

在这里插入图片描述

1.2.5、数据类型的选择

选择的参考规则

  • 尽可能选择满足业务需求的最小数据类型
    速度更快,更省资源(磁盘、内存、CPU)
    精度不同,消耗的资源不同
  • 尽可能选择使用简单数据类型,如:整形比字符操作代价更低
  • 尽可能避免NULL,注意:NULL与空值的区别。避免NULL方法 NOT NULL限制,或者DEFAULT指定默认值。

二、表设计之字段约束条件

2.1、字段约束

在这里插入图片描述

2.2、外键约束管理

同创建表时创建外键约束

CREATE TEABLE `account_user`(
	`id` INT NOT NULL AUTO_INCREMENT,
	PRIMARY KEY(`id`)
);

建立外键的时,可以给外键取一个名字,方便后续进行修改和删除
CREATE TABLE `account_user_address`(
	`user_id` INT NOT NULL,
	FOREIGN KEY [key_name](`user_id`) REFERENCES `account_user`(`id`)
);

修改表时增加外键约束

ALTER TABLE `account_user_address` ADD FROEIGN KEY key_name(`user_id`) REFERENCES `account_user(`id`)`;

删除外键约束

ALTER TABLE `account_user_address` DROP FOREIGN KEY key_name;

外键约束使用要点

  • 用来约束多个表中数据的关系
  • 在【子表】上定义约束内容
  • 约束关联字段的类型要保持一致
  • 注意添加外键约束后的数据删除问题,只能先删除外键表相关的数据后,才能正常删除主表中的数据

2.3、实战:设计学生成绩表

在这里插入图片描述

-- 学生信息表
CREATE TABLE `school_student_info` (
 `id` INT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
 `stu_no` SMALLINT NOT NULL COMMENT '学号',
 `stu_name` VARCHAR(16) NOT NULL COMMENT '姓名',
 `sex` TINYINT DEFAULT 1 COMMENT '性别, 0: 女,1:男',
 `age` TINYINT UNSIGNED DEFAULT 0 COMMENT '年龄',
 `class_name` VARCHAR(10) DEFAULT '' COMMENT '班级',
 `address` VARCHAR(255) DEFAULT &#
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值