MySQL设计开发基础
- 格式:pdf
- 大小:1.82 MB
- 文档页数:58
使用MySQL数据库实现的在线教育平台系统设计与开发一、引言随着互联网的快速发展,在线教育平台成为了教育行业的一个重要组成部分。
在线教育平台可以为学生提供更加灵活、便捷的学习方式,同时也为教育机构提供了更广阔的发展空间。
在这样的背景下,设计和开发一个高效稳定的在线教育平台系统显得尤为重要。
本文将介绍如何使用MySQL数据库实现在线教育平台系统的设计与开发。
二、系统需求分析在设计和开发在线教育平台系统之前,首先需要进行系统需求分析。
在线教育平台系统通常包括学生、教师、课程、作业、考试等多个模块,每个模块都有相应的功能需求。
在进行需求分析时,需要充分考虑用户的需求,确保系统能够满足用户的学习和教学需求。
三、数据库设计1. 数据库表设计在使用MySQL数据库实现在线教育平台系统时,需要设计合适的数据库表结构来存储各种数据。
常见的数据库表包括学生表、教师表、课程表、作业表、考试表等。
每个表都需要定义合适的字段来存储相关信息,并建立适当的关联关系来保证数据的完整性和一致性。
2. 数据库索引设计为了提高系统的查询效率,需要在数据库表中设计合适的索引。
索引可以加快数据检索速度,减少数据库查询时间。
在设计索引时,需要根据实际情况选择合适的字段作为索引字段,并避免创建过多或不必要的索引,以免影响系统性能。
四、系统架构设计1. 前端架构设计在线教育平台系统的前端架构通常包括用户界面设计和交互设计两部分。
用户界面设计需要考虑页面布局、色彩搭配、字体大小等因素,以提供良好的用户体验;交互设计则需要考虑用户操作流程、按钮点击事件等,以确保用户能够方便快捷地完成操作。
2. 后端架构设计后端架构是在线教育平台系统的核心部分,负责处理业务逻辑和数据存取。
在使用MySQL数据库实现系统时,需要设计合理的后端架构来实现数据的增删改查操作,并确保系统具有良好的扩展性和可维护性。
五、系统开发与测试1. 系统开发在进行系统开发时,需要按照需求分析和数据库设计完成前端和后端代码编写工作。
《快速念咒:MySQL入门指南与进阶实战》阅读记录1. 第一章数据库基础在开始学习MySQL之前,了解一些数据库的基础知识是非常重要的。
数据库是一个用于存储和管理数据的计算机软件系统,它允许用户通过关键字或特定的查询语言来检索、更新和管理数据。
在数据库中,数据是以表格的形式进行组织的,每个表格都包含了一组相关的数据项,这些数据项被称为记录。
表(Table):表是数据库中存储数据的基本单位。
每个表都有一个唯一的名称,并由行(Row)和列(Column)组成。
每一行代表一个数据记录,每一列代表一个特定的数据属性。
字段(Field):字段是表中的一列,代表了数据的一种属性。
每个字段都有一个唯一的名称和一个数据类型,用于定义该字段可以存储的数据种类。
主键(Primary Key):主键是表中的一个特殊字段,用于唯一标识表中的每一行记录。
主键的值必须是唯一的,且不能为NULL。
外键(Foreign Key):外键是一个表中的字段,它的值引用了另一个表的主键值。
外键用于建立两个表之间的联系,确保引用完整性。
索引(Index):索引是一种数据库优化技术,用于提高查询性能。
通过创建索引,数据库可以更快地定位到表中的特定记录,而不必扫描整个表。
SQL(Structured Query Language):SQL是用于与数据库进行交互的编程语言。
它包括用于数据查询、插入、更新和删除的操作符和语法结构。
理解这些基本概念是学习MySQL的前提。
通过掌握SQL语言的基本语法和操作,你将能够有效地管理和操作数据库中的数据。
在接下来的章节中,我们将深入探讨MySQL的具体应用,包括如何创建和管理数据库、表、以及如何执行复杂的查询操作。
2. 第二章数据库设计《快速念咒:MySQL入门指南与进阶实战》是一本全面介绍MySQL 数据库的书籍,其中第二章详细阐述了数据库设计的基础知识和实践技巧。
在这一章节中,作者首先介绍了数据库设计的基本概念和目标,包括数据模型、实体关系模型(ER模型)等,并解释了如何通过这些模型来描述现实世界中的数据和业务逻辑。
mysql课程大纲一、课程简介1.1 课程背景1.2 课程目标1.3 课程适用对象1.4 课程前置知识二、数据库基础概念2.1 数据库的定义和分类2.2 数据库管理系统(DBMS)介绍2.3 关系型数据库和非关系型数据库2.4 MySQL数据库介绍和历史2.5 MySQL的优势和应用场景三、MySQL安装和配置3.1 下载和安装MySQL3.2 MySQL配置文件详解3.3 数据目录和日志文件3.4 启动和停止MySQL服务四、基本 SQL 语法4.1 SQL语言简介4.2 数据库和表的创建4.3 插入、更新和删除数据4.4 查询语句的基本使用4.5 表的连接和子查询4.6 排序和聚合函数五、MySQL高级特性5.1 索引和优化5.1.1 索引类型及其适用场景 5.1.2 创建和管理索引5.1.3 查询性能优化5.2 事务和并发控制5.2.1 事务的概念和特性5.2.2 事务隔离级别5.2.3 并发控制方法5.3 视图和存储过程5.3.1 创建和使用视图5.3.2 存储过程的定义和执行 5.4 备份和恢复5.4.1 数据库备份策略5.4.2 数据库备份工具的使用5.4.3 数据库恢复方法六、MySQL性能调优6.1 监控和调试工具6.1.1 慢查询日志和错误日志 6.1.2 性能监控工具6.2 查询优化6.2.1 EXPLAIN 分析6.2.2 索引优化6.3 硬件优化6.3.1 硬件配置建议6.3.2 I/O调优6.4 高可用性和容灾6.4.1 主从复制原理6.4.2 复制配置和自动切换七、项目实战7.1 项目需求分析7.2 数据库设计和建模7.3 数据库迁移和初始化7.4 业务逻辑实现7.5 性能调优和优化7.6 项目部署和维护八、课程总结和展望8.1 知识总结回顾8.2 学习心得体会8.3 MySQL发展趋势和应用前景九、参考资料9.1 《MySQL官方文档》9.2 《深入浅出MySQL》9.3 《高性能MySQL》9.4 《MySQL技术内幕》以上是《MySQL课程大纲》的详细内容,从课程简介到参考资料,全面涵盖了MySQL数据库的基础知识、高级特性、性能调优以及项目实战等内容。
计算机与信息工程学院教案2015―2016学年度第1学期课程名称 MySQL数据库主讲教师孔祥盛授课对象 2017计算机科学与技术1、2班授课时间周一1、2、3、4授课地点 A12-0304 A14-0321教案(首页)教案编写时间:2.预留版面不够可另附页。
第1章数据库设计概述一、教学目的:【了解】:本章抛开MySQL讲解关系数据库设计的相关知识,以“选课系统”为例,讲解“选课系统”数据库的设计流程。
【掌握】:通过本章的学习,学生将具备一定的数据库设计能力二、教学重点:教学重点是E-R图的设计。
教学难点是关系数据库的设计。
三、教学难点:教学难点是关系数据库的设计。
四、教学进程(含教学内容、教学方法、辅助手段、师生互动、时间分配、板书设计、作业布置等):教学内容:本章首先介绍数据库概述,然后介绍数据库设计的相关知识,并以选课系统E-R图为例介绍关系数据库的设计过程。
通过本章的学习,读者可以了解关系数据库的设计流程。
教学过程设计:新课导入、案例教学、课堂讨论、作业讲评。
教学方法:以多媒体讲授为主,适当结合提问、设问、讨论等方法。
内容提要:1.1 数据库概述1.1.1 关系数据库管理系统1.1.2 关系数据库1.1.3 结构化查询语言SQL1.2 数据库设计的相关知识1.2.1 商业知识和沟通技能1.2.2 数据库设计辅助工具1.2.3 “选课系统”概述1.2.4 定义问题域1.2.5 编码规范1.3 E-R图1.3.1 实体和属性1.3.2 关系1.3.3 E-R图的设计原则1.4 关系数据库设计1.4.1 为每个实体建立一张数据库表1.4.2 为每张表定义一个主键1.4.3 增加外键表示一对多关系1.4.4 建立新表表示多对多关系1.4.5 为字段选择合适的数据类型1.4.6 定义约束(constraint)条件1.4.7 评价数据库表设计的质量1.4.8 使用规范化减少数据冗余1.4.9 避免数据经常发生变化4、课后小结和布置作业(5分钟)讨论与思考:1.数据库管理系统中常用的数学模型有哪些?2.您听说过的关系数据库管理系统有哪些?数据库容器中通常包含哪些数据库对象?3.通过本章知识的讲解,SQL与程序设计语言有什么关系?4.通过本章的学习,您了解的MySQL有哪些特点?5.通过本章的学习,您觉得数据库表与电子表格(例如Excel)有哪些区别?6.您所熟知的数据库设计辅助工具有哪些?您所熟知的模型、工具、技术有哪些?7.请您罗列出“选课系统”需要实现哪些功能,使用数据库技术能够解决“选课系统”中的哪些商业问题?8.您所熟知的编码规范有哪些?9.您是如何理解“E-R图中实体间的关系是双向的”?能不能举个例子?10.E-R图中,什么是基数?什么是元?什么是关联?作业:1.根据本章的场景描述——“很多团购网站在网上对房源进行出租”的E-R图,请设计该场景描述的数据库表。
mysql 数据库程序设计教材MySQL数据库程序设计是计算机科学和软件工程领域中非常重要的一个方向。
本文将介绍MySQL数据库程序设计的基本概念和技术,以及一些常用的MySQL数据库程序设计方法。
MySQL是一个开源的关系型数据库管理系统(RDBMS),它使用SQL(结构化查询语言)来管理和操作数据库。
MySQL具有以下几个重要的特点:1.简单易用:MySQL的命令和语法相对简单,上手较快。
同时,MySQL配备了强大的图形化界面工具,如phpMyAdmin,可以帮助开发人员更方便地操作数据库。
2.可靠稳定:MySQL具有高可用性、高性能和高扩展性的特点。
它可以处理数十亿行数据,并支持大型企业级应用程序。
3.跨平台支持:MySQL可以在多个操作系统上运行,包括Windows、Linux、macOS等。
这使得MySQL成为了一个广泛使用的数据库管理系统。
MySQL数据库程序设计的基本概念和技术包括以下几个方面:1.数据库设计:在进行MySQL数据库程序设计之前,首先需要进行数据库的设计。
数据库设计包括确定数据表的结构、定义字段和字段类型、设置主键和外键、创建索引等。
好的数据库设计可以提高数据库的性能和可用性。
2.数据库连接:MySQL数据库连接是数据库程序设计的基础。
开发人员可以使用多种编程语言和技术来连接和操作MySQL数据库,如PHP、Java、Python等。
3. SQL查询和操作:在MySQL数据库程序设计中,使用SQL查询语言来操作数据库是非常常见的。
SQL查询包括增删改查等操作,开发人员可以根据需要使用不同的SQL语句来完成各种任务。
4.数据库事务:数据库事务是指一组操作,要么全部执行,要么全部取消。
MySQL数据库支持事务的原子性、一致性、隔离性和持久性(ACID)特性。
使用事务可以确保数据库中的数据一致性和完整性。
5.数据库优化:数据库优化是提高MySQL数据库性能的一种关键技术。
MySQL中的数据库设计与规范数据库是现代软件系统中不可或缺的一部分,而MySQL作为最常用的关系型数据库管理系统,其数据库设计和规范对于系统的性能和可靠性至关重要。
本文将从设计原则、规范要求和最佳实践等方面对MySQL中的数据库设计与规范进行探讨。
一、数据库设计原则与方法数据库设计是整个系统开发过程中至关重要的一环,一个合理优化的数据库设计能够提高系统的性能和扩展性。
以下是一些常用的数据库设计原则和方法:1. 实体与属性的识别和关系确定在数据库设计时,首先要识别出系统中涉及的实体和属性,进而确定实体之间的关系。
以学生管理系统为例,学生和课程可以被认为是两个实体,而学生和课程之间存在选课关系。
2. 规范化处理规范化是数据库设计的基础,它能够减少数据冗余,提高数据的一致性和完整性。
常用的规范化级别包括第一范式(1NF)、第二范式(2NF)和第三范式(3NF)等。
在设计中,应根据实际情况选择适当的范式级别。
3. 性能与扩展性考虑在设计时,需考虑系统的性能和扩展性。
尽量避免使用大量的联合查询和复杂的关联操作,以提高数据库的查询效率。
同时,可通过使用索引和分区等技术手段,提高系统的并发处理能力和负载均衡性。
二、数据库规范要求除了上述设计原则和方法外,数据库设计还需要满足一定的规范要求,以保证系统的可靠性和易用性。
以下是一些常见的数据库规范要求:1. 数据库命名规范表名、字段名、索引名等应按照统一规范进行命名,建议使用英文单词或缩写,避免使用中文和特殊字符。
同时,命名应具有一定的可读性和语义性,以方便他人理解和维护。
2. 数据类型和长度设置在设计时,应根据实际需要选择合适的数据类型和长度。
避免过度设置字段长度,以节约存储空间。
同时,需注意字段的取值范围和精度,避免数据溢出或不精确的情况。
3. 约束和索引的定义通过定义适当的约束和索引,可以保证数据库的数据一致性和查询效率。
例如,可以使用主键、外键和唯一约束来保证数据的完整性。
2023计算机二级mysql考试大纲
2023年计算机二级MySQL考试大纲主要包括以下内容:
一、基本概念与方法
1. 数据库基础知识:包括数据库相关的基本概念、数据库系统的特点与结构、数据模型等。
2. 关系数据库和关系模型:重点理解关系数据库和关系模型的基本概念,以及关系代数和关系数据库标准语言SQL的基础知识。
3. 数据库设计基础:掌握数据库设计的步骤和关系数据库设计的方法,能够设计合理的数据库结构。
4. MySQL基础:理解MySQL的系统特性和工作方式,熟悉MySQL的编
程基础,包括结构化查询语言SQL和MySQL语言结构。
二、MySQL应用开发
1. 数据库操作:熟练掌握在MySQL平台下使用SQL语言实现数据库的交
互操作,包括数据查询、数据更新、表的管理等。
2. 数据库编程:熟练掌握MySQL的数据库编程,包括存储过程、触发器、视图等。
3. PHP应用开发语言:熟悉PHP应用开发语言,初步具备利用该语言进行简单应用系统开发的能力。
4. 数据库管理与维护:掌握MySQL数据库的管理与维护技术,包括数据备份与恢复、性能优化等。
三、考试内容
考试将通过选择题、填空题、简答题、编程题等形式,全面考察考生对MySQL数据库应用开发的理解和掌握程度。
考试内容将根据上述大纲要求进行命题,难度和范围均与大纲保持一致。
以上是2023年计算机二级MySQL考试大纲的主要内容,考生需要认真学习和掌握大纲要求的知识点,通过实践和练习提高自己的技能和能力,以应对考试挑战。
MySQL设计开发基础周卫丰◆MySQL数据库设计基础◆MySQL InnoDB存储原理◆MySQL数据库设计原则◆MySQL数据库开发基础◆MySQL事务隔离级别◆MySQL SQL书写规范◆MySQL SQL性能优化MySQL InnoDB单表记录上限•MySQL InnoDB单表记录数有没有上限?•500万?•1000万?•2000万?•还是更多?官方给的limitation看起来还不错•每个InnoDB数据库最多可创建40亿张表,InnoDB permits up to 4 billion tables•InnoDB16KB页的单个tablespace最大容量64T,The maximum tablespace size depends on the InnoDB page size•每个表允许定义1017列,A table can contain a maximum of 1017 columns•MySQL针对所有引擎限制最大行长64K(text和lob除外)The MySQL maximum row size limit of 65,535 bytes•InnoDB16KB页每行最大页内存储长度为8K(text和lob除外),超出部分页外存储(增加IO次数)。
the maximum row size is slightly less than 8KB for the default 16KB InnoDB page size•每个表中行的数量没有直接限制,但它受数据库存储空间的限制。
InnoDB表存储和Oracle有何区别•为什么InnoDB表记录数多了性能会下降?•InnoDB表和Oracle有什么区别?•Oracle表的存储格式为堆表;InnoDB表的存储格式为IOT索引组织表什么是IOT IOT索引组织表,索引表合一,索引保存表的所有列IOT表访问索引就可以获得全部数据,不需要回表IOT表适合表中列数非常少,且全部列经常频繁访问同Cluster Table一样,IOT是在Oracle 的场景比较少从索引回表访问全部列数据访问索引即可获得全部列数据为什么InnoDB页内存储限制8K字节•MySQL 5.5及更低版本,每个InnoDB页的大小固定为16 KB•MySQL 5.6开始,InnoDB实例的页大小可以是4KB,8KB或16KB(缺省值),innodb_page_size参数控制•MySQL 5.7.6开始,InnoDB还支持32KB和64KB页大小,对于32KB和64KB页大小,不支持ROW_FORMAT = COMPRESSED,最大记录大小为16KB(超出部分页外存储)•Innodb表存储采用索引组织表的格式,即B+TREE结构,缺省设置每个页大小为16k,MySQL限制每个页块中至少有两行数据,否则就失去了B+TREE的意义(每一个页中只有一条数据,整个树就退化成为了一条双向链表),这样就得出了单行页内存储的最大长度就限制为了8k•Blob和Text类型,innodb_file_format参数的影响:• 5.6版本Antelope(羚羊)前864个字节存储在page里;• 5.7版本Barracuda(梭鱼)page里头只存储一个20byte大小的指针•何为B+树?B树结构B+树结构B树和B+树B+树和B树的区别•B树的节点(根节点/分支节点//叶子节点)中没有重复元素,B+树有。
•B树的分支节点会存储索引条目,而B+树只有叶子节点才存储(分支节点保存每个叶子的第一条)。
•B+树的每个叶子节点有一个指针指向下一个节点,把所有的叶子节点串在了一起。
那B+树比起B树有什么优势• 1. 由于分支节点不保存全部的索引条目(大部分数据库都是保留每个叶子节点的第一条记录指针),同样大小的磁盘页可以容纳更多的节点元素,树的高度就小。
(数据量相同的情况下,B+树比B树更加“矮胖”),查找起来就更快。
• 2. B+树每次查找都必须到叶子节点才能获取数据,而B树不一定,B树可以在非叶子节点上获取数据。
因此B+树查找的时间更稳定。
• 3. B+树的每一个叶子节点都有指向下一个叶子节点的指针,方便范围查询和全表查询:只需要从第一个叶子节点开始顺着指针一直扫描下去即可,而B树则要对树做中序遍历。
InnoDB的B+树和Oracle的B+树的区别•InnoDB表存储采用B+树(聚簇索引)格式,B+树保存了表里所有列•Oracle索引存储采用B+树格式,B+树仅保存了索引列键值和ROWID•MySQL聚簇索引叶子节点保存的记录数会比Oracle索引叶子节点少很多•如果行长很大,索引层高增长会比较快•MYSQL InnoDB二级索引存储主键值而不是存储行指针(ROWID)•减少行移动或页分裂时二级索引的维护工作(Oracle行迁移链接ROWID不变)•二级索引访问需要两次索引查找,第二次通过主键去聚簇索引查找InnoDB表记录数和聚簇索引层高•假设B+树层高为2,一个根节点和若干个叶子节点,那么这棵B+树的存放总记录数为:根节点指针数(叶子节点个数)* 单个叶子节点记录行数。
•假设单个叶子节点(页)中的记录数=16K/1K=16。
(假设一行记录大小为1k,现在很多互联网业务行长大小通常就是1K左右)。
•假设主键ID为bigint类型,长度为8字节,而指针大小在InnoDB源码中设置为6字节,这样一共14字节,我们一个页中能存放16384/14=1170 个叶子节点指针。
可以算出一棵高度为2的B+树,能存放1170*16=18720条这样的数据。
•同样可以算出一个高度为3的B+树可以存放:1170*1170*16=21902400条数据。
所以在InnoDB中B+树高度为3时,大约可以存放2000多万数据,这个的前提是主键列选择的整型等比较小的列而且单行长度为1K。
通过主键索引查询只需要3次IO操作即可查找到数据。
•MySQL单表记录数没有固定的理论上限,【聚簇】索引的层高由索引键类型的选择和行长大小决定,通常来说高并发系统索引层高控制在3层之内可以保证访问效率。
如果索引层高增长一层,索引唯一查找效率就会下降,索引范围查找以及在嵌套连接循环体内效果更明显。
所以MySQL数据库单表数据量大了会变慢主要是由于索引层高的增长导致。
•注意在数据库设计的时候索引键要选择递增的列,这一点至关重要,不要用递减的列及uuid等随机数的列!!!一个极端的例子InnoDB表允许的key length最大3072(测试用的羚羊)hexdump查看索引层高为0(第一层)倒序插入数据,第6条数据开始索引层高加1 (第二层)大约20条数据,索引层高加1 (第三层)大约100条数据,索引层高加1 (第四层)大约200条数据,索引层高加1 (第五层)◆MySQL数据库设计基础◆MySQL InnoDB存储原理◆MySQL数据库设计原则◆MySQL数据库开发基础◆MySQL事务隔离级别◆MySQL SQL书写规范◆MySQL SQL性能优化了解原理,数据库设计该注意什么•建表的时候尽量减小总列数,不要建大宽表(拆成多个,垂直分表),数据类型优先选择数值和日期等累型,控制行长越小越好,让叶子节点能存更多数据•主键索引要注意列数要少、数据类型长度要小,让分支节点能存更多条目•主键索引选择递增列,倒序无序插入导致索引分裂并快速长高•主键索引选择不会频繁修改的列,避免主键索引及二级索引的维护•二级索引的键值选择和主键索引一样,表上索引个数尽量少,太多降低insert性能•如果实在没有合适的索引列,可以考虑自增列做主键(牺牲最佳性能的主键索引保证二级索引可以高效利用自增列)•自增列做主键建议数据库参数设置innodb_autoinc_lock_mode=2,不能保证连号,支持高并发不锁表,不建议把自增列做为业务号码使用•索引要建在选择性高的列上(唯一值很多,过滤效果才好)数据类型选择数据库操作中最为耗时的操作就是IO 处理,大部分数据库操作90% 以上的时间都花在了IO 读写上面。
所以尽可能减少IO 读写量,可以在很大程度上提高数据库操作的性能。
我们无法改变数据库中需要存储的数据,但是我们可以在这些数据的存储方式方面花一些心思。
下面的这些关于字段类型的优化建议主要适用于记录条数较多,数据量较大的场景,因为精细化的数据类型设置可能带来维护成本的提高,过度优化也可能会带来其他的问题:1.数字类型:非万不得已不要使用DOUBLE,不仅仅只是存储长度的问题,同时还会存在精确性的问题。
同样,固定精度的小数,也不建议使用DECIMAL,建议乘以固定倍数转换成整数存储,可以大大节省存储空间,且不会带来任何附加维护成本。
对于整数的存储,在数据量较大的情况下,建议区分开TINYINT / INT / BIGINT 的选择,因为三者所占用的存储空间也有很大的差别,能确定不会使用负数的字段,建议添加unsigned定义。
当然,如果数据量较小的数据库,也可以不用严格区分三个整数类型。
2.字符类型:非万不得已不要使用TEXT 数据类型,其处理方式决定了他的性能要低于char或者是varchar类型的处理。
定长字段,建议使用CHAR 类型,不定长字段尽量使用VARCHAR,且仅仅设定适当的最大长度,而不是非常随意的给一个很大的最大长度限定,因为不同的长度范围,MySQL 也会有不一样的存储处理。
3.时间类型:尽量使用TIMESTAMP类型,因为其存储空间只需要DATETIME 类型的一半(5.6之前分别为4和8字节,高版本为4和5字节)。
对于只需要精确到某一天的数据类型,建议使用DATE类型,因为他的存储空间只需要3个字节,比TIMESTAMP还少。
不建议通过INT类型类存储一个unixtimestamp 的值,因为这太不直观,会给维护带来不必要的麻烦,同时还不会带来任何好处。
4.ENUM & SET:对于状态字段,可以尝试使用ENUM 来存放,因为可以极大的降低存储空间,而且即使需要增加新的类型,只要增加于末尾,修改结构也不需要重建表数据。
如果是存放可预先定义的属性数据呢?可以尝试使用SET类型,即使存在多种属性,同样可以游刃有余,同时还可以节省不小的存储空间。
5.BLOB类型:强烈反对在数据库中存放BLOB 类型数据,虽然数据库提供了这样的功能,但这不是他所擅长的,我们更应该让合适的工具做他擅长的事情,才能将其发挥到极致。
在数据库中存储BLOB 数据就像让一个多年前在学校学过一点Java的营销专业人员来写Java 代码一样。
6. 尽量使用NOT NULLNULL 类型比较特殊,SQL 难优化。
虽然MySQL NULL类型和Oracle 的NULL 有差异,会进入索引中,但如果是一个组合索引,那么这个NULL 类型的字段会极大影响整个索引的效率。