04丨使用DDL创建数据库&数据表时需要注意什么?
该思维导图由 AI 生成,仅供参考
DDL 的基础语法及设计工具
创建表结构
- 深入了解
- 翻译
- 解释
- 总结
本文从DDL的基础语法及设计工具、数据表的常见约束等方面展开讨论。首先介绍了DDL的基础语法,包括对数据库进行定义和对数据表进行定义的语法示例,并推荐了可视化工具Navicat的使用。其次,详细介绍了数据表的常见约束,包括主键约束、外键约束、唯一性约束、NOT NULL约束、DEFAULT约束和CHECK约束。文章通过实际示例和SQL语句展示了如何使用DDL命令来创建和修改表结构,以及如何使用可视化工具进行表结构设计。此外,文章提出了“三少一多”原则,即数据表的个数越少越好、数据表中的字段个数越少越好、数据表中联合主键的字段个数越少越好、使用主键和外键越多越好。这一原则为读者提供了在设计数据表时的指导原则。总体而言,本文通过具体的语法示例和实际操作指导,帮助读者了解了DDL的基础知识和设计原则,为数据库设计和管理提供了实用的指导。
《SQL 必知必会》,新⼈⾸单¥68
全部留言(122)
- 最新
- 精选
- 我知道了嗯置顶外键多了会有很多维护问题吧?
作者回复: 是否使用外键确实会有一些争议。我来解释下关于外键的使用: 首先,外键本身是为了实现强一致性,所以如果需要正确性>性能的话,还是建议使用外键,它可以让我们在数据库的层面保证数据的完整性和一致性。 当然不用外键,你也可以在业务层进行实现。不过,这样做也同样存在一定的风险,因为这样,就会让业务逻辑会与数据具备一定的耦合性。也就是业务逻辑和数据必须同时修改。而且在工作中,业务层可能会经常发生变化。 当然,很多互联网的公司,尤其是超大型的数据应用场景,大量的插入,更新和删除在外键的约束下会降低性能,同时数据库在水平拆分和分库的情况下,数据库端也做不到执行外键约束。另外,在高并发的情况下,外键的存在也会造成额外的开销。因为每次更新数据,都需要检查另外一张表的数据,也容易造成死锁。 所以在这种情况下,尤其是大型项目中后期,可以采用业务层来实现,取消外键提高效率。 不过在SQL学习之初,包括在系统最初设计的时候,还是建议你采用规范的数据库设计,也就是采用外键来对数据表进行约束。因为这样可以建立一个强一致性,可靠性高的数据库结构,也不需要在业务层来实现过多的检查。 当然在项目后期,业务量增大的情况下,你需要更多考虑到数据库性能问题,可以取消外键的约束,转移到业务层来实现。而且在大型互联网项目中,考虑到分库分表的情况,也会降低外键的使用。 不过在SQL学习,以及项目早期,还是建议你使用外键。在项目后期,你可以分析有哪些外键造成了过多的性能消耗。一般遵循2/8原则,会有20%的外键造成80%的资源效率,你可以只把这20%的外键进行开放,采用业务层逻辑来进行实现,当然你需要保证业务层的实现没有错误。不同阶段,考虑的问题不同。当用户和业务量增大的时候,对于大型互联网应用,也会通过减少外键的使用,来减低死锁发生的概率,提高并发处理能力。
2019-06-1914286 - 夜路破晓类比自己, 主键就好比是我的身份证; 外键就好比我在各种团队组织中的身份,如在单位是员工和管理者、在家是儿子和丈夫、在协会是会员和委员等; 索引就好比是我的某些特征或者独树一帜的风格,玉树临风、风流倜傥之类的。
作者回复: 可以这么理解,这么说也比较有趣。在数据库系统中实现他们会采用一些技术方式。比如索引,常用的算法有BTree何Hash索引,是一种数据结构来实现快速检索的目的。
2019-06-19339 - 夜路破晓修改字段数据类型,报错,改写成: ALTER TABLE player MODIFY column player_age float(3,1)
作者回复: 对的
2019-06-19320 - allean实际生产环境,更多的是用一个冗余字段取代外键吧?
作者回复: 分情况而定,如果外键或者这些属性字段不需要修改的话,可以使用冗余字段替代,达到通过“空间换时间”的效果 所以呢,如果冗余字段可控好维护,可以使用。如果涉及到级联删除/级联更新,冗余字段不可控,建议还是采用外键的方式。
2019-06-1911 - Danpier数据库管理工具墙裂推荐开源免费的 HeidiSQL(支持 MariaDB,MySQL,Microsoft SQL Server,PostgreSQL),运存占用低,很流畅,功能还全,Navicat 年费实在太贵了。
作者回复: HeidiSQL 不错
2019-07-10310 - chengzise我的理解: 主键:确保本表每行数据的唯一性 外键:与外表建立连接 索引:加快本表数据的查找
作者回复: 对的
2019-06-1910 - 番茄直接写这段,会报错哦 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-0725 - 学习爱好者老师能给推荐几本关于SQL以及MySQL的书吗?市面上的书感觉讲的太零散,不系统,也不全面,看完之后总觉得缺少了很多知识点。希望老师能回复。
作者回复: 《MySQL技术内容:InnoDB存储引擎》 《MySQL性能调优与架构设计》 《深入浅出MySQL》 《MySQL 8 Cookbook》
2019-10-184 - EglinuxALTER TABLE student DROP COLUMN player_age; 这里是 player 吧?
作者回复: 对
2019-06-194 - 满怀主键:主键是一张表中唯一表示每一个行记录的属性 外键:外键是当子表中存在父表中的主键字段时,将子表中的字段设置为父表的外键,用于实现参照完整性 索引:类似书中的书签,索引就是表中的"书签",根据索引字段存储记录信息,从而利用索引的快速查找功能,提高我们的SQL语句执行效率
作者回复: 不错的总结
2019-06-263