SQL 必知必会
陈旸
清华大学计算机博士
73337 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
第一章:SQL语法基础篇 (19讲)
SQL 必知必会
15
15
1.0x
00:00/00:00
登录|注册

04丨使用DDL创建数据库&数据表时需要注意什么?

使用主键和外键越多越好
数据表中联合主键的字段个数越少越好
数据表中的字段个数越少越好
数据表的个数越少越好
CHECK约束
DEFAULT约束
NOT NULL约束
唯一性约束
修改表结构
创建表结构
CREATE TABLE
DROP DATABASE
CREATE DATABASE
"三少一多"原则
字段约束
外键约束
主键约束
设计工具推荐:Navicat
DDL的基础语法
设计数据表的原则
数据表的常见约束
DDL的基础语法及设计工具
使用DDL创建数据库&数据表时需要注意什么?

该思维导图由 AI 生成,仅供参考

DDL 是 DBMS 的核心组件,也是 SQL 的重要组成部分,DDL 的正确性和稳定性是整个 SQL 运行的重要基础。面对同一个需求,不同的开发人员创建出来的数据库和数据表可能千差万别,那么在设计数据库的时候,究竟什么是好的原则?我们在创建数据表的时候需要注意什么?
今天的内容,你可以从以下几个角度来学习:
了解 DDL 的基础语法,它如何定义数据库和数据表;
使用 DDL 定义数据表时,都有哪些约束性;
使用 DDL 设计数据库时,都有哪些重要原则。

DDL 的基础语法及设计工具

DDL 的英文全称是 Data Definition Language,中文是数据定义语言。它定义了数据库的结构和数据表的结构。
在 DDL 中,我们常用的功能是增删改,分别对应的命令是 CREATE、DROP 和 ALTER。需要注意的是,在执行 DDL 的时候,不需要 COMMIT,就可以完成执行任务。
1.对数据库进行定义
CREATE DATABASE nba; // 创建一个名为nba的数据库
DROP DATABASE nba; // 删除一个名为nba的数据库
2.对数据表进行定义
创建表结构的语法是这样的:
CREATE TABLE [table_name](字段名 数据类型,......)

创建表结构

比如我们想创建一个球员表,表名为 player,里面有两个字段,一个是 player_id,它是 int 类型,另一个 player_name 字段是varchar(255)类型。这两个字段都不为空,且 player_id 是递增的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文从DDL的基础语法及设计工具、数据表的常见约束等方面展开讨论。首先介绍了DDL的基础语法,包括对数据库进行定义和对数据表进行定义的语法示例,并推荐了可视化工具Navicat的使用。其次,详细介绍了数据表的常见约束,包括主键约束、外键约束、唯一性约束、NOT NULL约束、DEFAULT约束和CHECK约束。文章通过实际示例和SQL语句展示了如何使用DDL命令来创建和修改表结构,以及如何使用可视化工具进行表结构设计。此外,文章提出了“三少一多”原则,即数据表的个数越少越好、数据表中的字段个数越少越好、数据表中联合主键的字段个数越少越好、使用主键和外键越多越好。这一原则为读者提供了在设计数据表时的指导原则。总体而言,本文通过具体的语法示例和实际操作指导,帮助读者了解了DDL的基础知识和设计原则,为数据库设计和管理提供了实用的指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《SQL 必知必会》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(122)

  • 最新
  • 精选
  • 我知道了嗯
    置顶
    外键多了会有很多维护问题吧?

    作者回复: 是否使用外键确实会有一些争议。我来解释下关于外键的使用: 首先,外键本身是为了实现强一致性,所以如果需要正确性>性能的话,还是建议使用外键,它可以让我们在数据库的层面保证数据的完整性和一致性。 当然不用外键,你也可以在业务层进行实现。不过,这样做也同样存在一定的风险,因为这样,就会让业务逻辑会与数据具备一定的耦合性。也就是业务逻辑和数据必须同时修改。而且在工作中,业务层可能会经常发生变化。 当然,很多互联网的公司,尤其是超大型的数据应用场景,大量的插入,更新和删除在外键的约束下会降低性能,同时数据库在水平拆分和分库的情况下,数据库端也做不到执行外键约束。另外,在高并发的情况下,外键的存在也会造成额外的开销。因为每次更新数据,都需要检查另外一张表的数据,也容易造成死锁。 所以在这种情况下,尤其是大型项目中后期,可以采用业务层来实现,取消外键提高效率。 不过在SQL学习之初,包括在系统最初设计的时候,还是建议你采用规范的数据库设计,也就是采用外键来对数据表进行约束。因为这样可以建立一个强一致性,可靠性高的数据库结构,也不需要在业务层来实现过多的检查。 当然在项目后期,业务量增大的情况下,你需要更多考虑到数据库性能问题,可以取消外键的约束,转移到业务层来实现。而且在大型互联网项目中,考虑到分库分表的情况,也会降低外键的使用。 不过在SQL学习,以及项目早期,还是建议你使用外键。在项目后期,你可以分析有哪些外键造成了过多的性能消耗。一般遵循2/8原则,会有20%的外键造成80%的资源效率,你可以只把这20%的外键进行开放,采用业务层逻辑来进行实现,当然你需要保证业务层的实现没有错误。不同阶段,考虑的问题不同。当用户和业务量增大的时候,对于大型互联网应用,也会通过减少外键的使用,来减低死锁发生的概率,提高并发处理能力。

    2019-06-19
    14
    286
  • 夜路破晓
    类比自己, 主键就好比是我的身份证; 外键就好比我在各种团队组织中的身份,如在单位是员工和管理者、在家是儿子和丈夫、在协会是会员和委员等; 索引就好比是我的某些特征或者独树一帜的风格,玉树临风、风流倜傥之类的。

    作者回复: 可以这么理解,这么说也比较有趣。在数据库系统中实现他们会采用一些技术方式。比如索引,常用的算法有BTree何Hash索引,是一种数据结构来实现快速检索的目的。

    2019-06-19
    3
    39
  • 夜路破晓
    修改字段数据类型,报错,改写成: ALTER TABLE player MODIFY column player_age float(3,1)

    作者回复: 对的

    2019-06-19
    3
    20
  • allean
    实际生产环境,更多的是用一个冗余字段取代外键吧?

    作者回复: 分情况而定,如果外键或者这些属性字段不需要修改的话,可以使用冗余字段替代,达到通过“空间换时间”的效果 所以呢,如果冗余字段可控好维护,可以使用。如果涉及到级联删除/级联更新,冗余字段不可控,建议还是采用外键的方式。

    2019-06-19
    11
  • Danpier
    数据库管理工具墙裂推荐开源免费的 HeidiSQL(支持 MariaDB,MySQL,Microsoft SQL Server,PostgreSQL),运存占用低,很流畅,功能还全,Navicat 年费实在太贵了。

    作者回复: HeidiSQL 不错

    2019-07-10
    3
    10
  • chengzise
    我的理解: 主键:确保本表每行数据的唯一性 外键:与外表建立连接 索引:加快本表数据的查找

    作者回复: 对的

    2019-06-19
    10
  • 番茄
    直接写这段,会报错哦 create table player ( player_id int(11) NOT NULL AUTO_INCREMENT, player_name varchar(255) NOT NULL ); 报错信息如下,所以是要设置主键吗: Incorrect table definition; there can be only one auto column and it must be defined as a key

    作者回复: 对,如果是有自增列,这个自增列必须定义为键

    2019-08-07
    2
    5
  • 学习爱好者
    老师能给推荐几本关于SQL以及MySQL的书吗?市面上的书感觉讲的太零散,不系统,也不全面,看完之后总觉得缺少了很多知识点。希望老师能回复。

    作者回复: 《MySQL技术内容:InnoDB存储引擎》 《MySQL性能调优与架构设计》 《深入浅出MySQL》 《MySQL 8 Cookbook》

    2019-10-18
    4
  • Eglinux
    ALTER TABLE student DROP COLUMN player_age; 这里是 player 吧?

    作者回复: 对

    2019-06-19
    4
  • 满怀
    主键:主键是一张表中唯一表示每一个行记录的属性 外键:外键是当子表中存在父表中的主键字段时,将子表中的字段设置为父表的外键,用于实现参照完整性 索引:类似书中的书签,索引就是表中的"书签",根据索引字段存储记录信息,从而利用索引的快速查找功能,提高我们的SQL语句执行效率

    作者回复: 不错的总结

    2019-06-26
    3
收起评论
显示
设置
留言
99+
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部