《MySQL数据库基础与实例教程 工业和信息化普通高等教育十二五 规划教材 教学课件 ppt 作者 孔祥盛 MySQL数据库基础与实例教程第3章》由会员分享,可在线阅读,更多相关《MySQL数据库基础与实例教程 工业和信息化普通高等教育十二五 规划教材 教学课件 ppt 作者 孔祥盛 MySQL数据库基础与实例教程第3章(56页珍藏版)》请在金锄头文库上搜索。
1、,孔祥盛,MySQL数据库基础与实例教程 之 MySQL表结构的管理,1,2,3,本章详细讲解“选课系统”数据库各个表的实施过程,通过本章的学习,读者可以掌握表结构管理的相关知识。,4,创建表,MySQL数据类型,修改表结构,删除表,5,索引,内容一览,1,2,3,MySQL提供的数据类型包括数值类型(整数类型和小数类型)、字符串类型、日期类型、复合类型(复合类型包括enum类型和set类型)以及二进制类型 。,MySQL小数类型,MySQL整数类型,MySQL字符串类型,4,5,MySQL日期类型,MySQL复合类型,3.1 MySQL数据类型,6,7,为字段选择合适的数据类型,MySQL二
2、进制类型,MySQL提供的数据类型包括数值类型(整数类型和小数类型)、字符串类型、日期类型、复合类型(复合类型包括enum类型和set类型)以及二进制类型 。,3.1 MySQL数据类型,3.1.1 MySQL整数类型,整数类型的数,默认情况下既可以表示正整数又可以表示负整数(此时称为有符号数)。如果只希望表示零和正整数,可以使用无符号关键字“unsigned”对整数类型进行修饰(此时称为无符号整数)。 例如:score tinyint unsigned,3.1.1 MySQL整数类型,3.1.1 MySQL整数类型,3.1.2 MySQL小数类型,decimal(length, precis
3、ion)用于表示精度确定(小数点后数字的位数确定)的小数类型,length决定了该小数的最大位数,precision用于设置精度(小数点后数字的位数)。 例如: decimal (5,2)表示小数取值范围:999.99999.99 decimal (5,0)表示: -9999999999的整数。,3.1.2 MySQL小数类型,3.1.2 MySQL小数类型,字符串类型的数据外观上使用单引号括起来,例如学生姓名张三、课程名java程序设计等。,3.1.3 MySQL字符串,char()与varchar(): 例如对于简体中文字符集gbk的字符串而言,varchar(255)表示可以存储255个
4、汉字,而每个汉字占用两个字节的存储空间。假如这个字符串没有那么多汉字,例如仅仅包含一个中字,那么varchar(255)仅仅占用1个字符(两个字节)的储存空间;而char(255)则必须占用255个字符长度的存储空间,哪怕里面只存储一个汉字。,3.1.3 MySQL字符串类型,date表示日期,默认格式为YYYY-MM-DD; time表示时间,格式为HH:ii:ss; year表示年份; datetime与timestamp是日期和时间的混合类型,格式为YYYY-MM-DD HH:ii:ss,3.1.4 MySQL日期类型,datetime与timestamp都是日期和时间的混合类型,区别在
5、于: 表示的取值范围不同,datetime的取值范围远远大于timestamp的取值范围。 将NULL插入timestamp字段后,该字段的值实际上是MySQL服务器当前的日期和时间。 同一个timestamp类型的日期或时间,不同的时区,显示结果不同。,3.1.4 MySQL日期类型,任务布置1:理解datetime与timestamp之间的区别。 上机操作,完成本书场景描述1以及场景描述2的任务要求,理解datetime与timestamp之间的区别。 学会使用now()函数。 注意:now()函数用于获得MySQL服务器的当前时间,该时间与时区的设置密切相关。,3.1.4 MySQL日期
6、类型,MySQL 支持两种复合数据类型:enum枚举类型和set集合类型。 enum类型的字段类似于单选按钮的功能,一个enum类型的数据最多可以包含65535个元素。 set 类型的字段类似于复选框的功能,一个set类型的数据最多可以包含64个元素。,3.1.5 MySQL复合类型,任务布置2:上机操作,完成本书场景描述3的任务要求,理解复合类型的用法。 注意:MySQL模式对复合类型数据的影响。,3.1.5 MySQL复合类型,二进制类型的字段主要用于存储由0和1组成的字符串,因此从某种意义上将,二进制类型的数据是一种特殊格式的字符串。 二进制类型与字符串类型的区别在于:字符串类型的数据按
7、字符为单位进行存储,因此存在多种字符集、多种字符序;而二进制类型的数据按字节为单位进行存储,仅存在二进制字符集binary。,3.1.6 MySQL二进制类型,3.1.6 MySQL二进制类型,选择合适的数据类型,不仅可以节省储存空间,还可以有效地提升数据的计算性能。 (1)在符合应用要求(取值范围、精度)的前提下,尽量使用“短”数据类型 (2)数据类型越简单越好 (3)在MySQL中,应该用内置的日期和时间数据类型,而不是用字符串来存储日期和时间。,3.1.7 选择合适的数据类型,(4)尽量采用精确小数类型(例如decimal),而不采用浮点数类型。使用精确小数类型不仅能够保证数据计算更为精
8、确,还可以节省储存空间,例如百分比使用decimal(4,2)即可。 (5)尽量避免NULL字段,建议将字段指定为NOT NULL约束。,3.1.7 选择合适的数据类型,1,2,3,create table 表名( 字段名1 数据类型 约束条件, 其他约束条件, 其他约束条件 )其他选项(例如存储引擎、字符集等选项),设置自增型字段,设置约束,其他选项的设置,4,5,创建“选课系统”数据库表,复制一个表结构,3.2 创建表,1设置主键(Primary Key)约束 (1)如果一个表的主键是单个字段,直接在该字段的数据类型或者其他约束条件后加上“primary key”关键字,即可将该字段设置为
9、主键约束,语法规则如下。 字段名 数据类型 其他约束条件 primary key 例如: student_no char(11) primary key,3.2.1 设置约束,1设置主键(Primary Key)约束 (2)如果一个表的主键是多个字段的组合(例如字段名1与字段名2共同组成主键),定义完所有的字段后,使用下面的语法规则将(字段名1, 字段名2)设置为复合主键。 primary key (字段名1, 字段名2),3.2.1 设置约束,任务布置:完成本书场景描述4:查看某个表的约束条件的任务要求。 注意:MySQL命令后,“G”的作用。,3.2.1 设置约束,默认情况下,MySQL自
10、增型字段的值从1开始递增,且步长为1。设置自增型字段的语法格式如下。 字段名 数据类型 auto_increment,3.2.2 设置自增型字段,1设置表的存储引擎,语法格式如下。 engine=存储引擎类型 2设置该表的字符集,语法格式如下。 default charset=字符集类型,3.2.3 其他选项的设置,3设置索引关键字的压缩方式,可以通过设置pack_keys选项实现(注意仅对MyISAM存储引擎的表有效),语法格式如下。 pack_keys=压缩类型 压缩类型值为default:表示只压缩索引中字符串类型的关键字(例如char、varchar、text等字段),但不压缩数值类型
11、的关键字。 压缩类型值为0:表示取消索引关键字的压缩。,3.2.3 其他选项的设置,3设置索引关键字的压缩方式 压缩类型值为1:表示压缩索引中所有关键字的储存空间,这样做通常会使检索速度加快,更新速度变慢。例如索引中第一个关键字的值为“perform”,第二关键字的值为“performance”,那么第二关键字会被存储为“7,ance”。,3.2.3 其他选项的设置,任务布置2:书写本书场景描述5:创建“选课系统”数据库表的SQL代码,调试,并运行。,3.2.4 创建“选课系统”数据库表,复制一个表结构的实现方法有两种。 方法一:在create table语句的末尾添加like子句,可以将源表
12、的表结构复制到新表中,语法格式如下。 create table 新表名 like 源表,3.2.5 复制一个表结构,复制一个表结构的实现方法有两种。 方法二、在create table语句的末尾添加一个select语句,可以实现表结构的复制,甚至可以将源表的表记录拷贝到新表中。下面的语法格式将源表的表结构以及源表的所有记录拷贝到新表中。 create table 新表名 select * from 源表,3.2.5 复制一个表结构,1,2,3,成熟的数据库设计,数据库的表结构一般不会发生变化。数据库的表结构一旦发生变化,基于该表的视图、触发器、存储过程将直接受到影响,甚至导致应用程序的修改。,
13、修改约束条件,修改字段相关信息,修改表的其他选项,4,修改表名,3.3 修改表结构,4,1删除字段 删除表字段的语法格式如下。 alter table 表名 drop 字段名,3.3.1 修改字段相关信息,2添加新字段 向表添加新字段时,通常需要指定新字段在表中的位置。向表添加新字段的语法格式如下。 alter table 表名 add 新字段名 新数据类型 新约束条件 first | after 旧字段名,3.3.1 修改字段相关信息,3修改字段名(或者数据类型) (1)修改表的字段名(及数据类型)的语法格式如下。 alter table 表名 change 旧字段名 新字段名 新数据类型,
14、3.3.1 修改字段相关信息,3修改字段名(或者数据类型) (2)如果仅对字段的数据类型进行修改,可以使用下面的语法格式。 alter table 表名 modify 字段名 新数据类型,3.3.1 修改字段相关信息,1添加约束条件 向表的某个字段添加约束条件的语法格式如下(其中约束类型可以是唯一性约束、主键约束及外键约束)。 alter table 表名 add constraint 约束名 约束类型 (字段名),3.3.2 修改约束条件,2删除约束条件 (1)删除表的主键约束条件语法格式比较简单,语法格式如下。 alter table 表名 drop primary key (2)删除表的
15、外键约束时,需指定外键约束名称,语法格式如下(注意需指定外键约束名)。 alter table 表名 drop foreign key 约束名,3.3.2 修改约束条件,2删除约束条件 (3)若要删除表字段的唯一性约束,实际上只需删除该字段的唯一性索引即可,语法格式如下(注意需指定唯一性索引的索引名)。,3.3.2 修改约束条件,alter table 表名 engine=新的存储引擎类型 alter table 表名 default charset=新的字符集 alter table 表名 auto_increment=新的初始值 alter table 表名 pack_keys=新的压缩类
16、型,3.3.3 修改表的其他选项,修改表名的语法格式较为简单,语法格式如下。 rename table旧表名to新表名 该命令等效于:alter table 旧表名 rename 新表名,3.3.4 修改表名,删除表的SQL语法格式比较简单,前面也已经讲过,这里不再赘述。这里唯一需要强调的是删除表时,如果表之间存在外键约束关系,此时需要注意删除表的顺序。,3.4 删除表,1,2,3,创建数据库表时,初学者通常仅仅关注该表有哪些字段、字段的数据类型及约束条件等信息,数据库表中另一个重要的概念“索引”很容易被忽视。,索引关键字的选取原则,理解索引,索引与约束,4,5,创建索引,删除索引,3.5 索引,想象一下现代汉语词典的使用方法,理解索引的重要性。 1索引的本质是什么? 2MySQL数据库中,数据是如何检索的? 3一个数据库表只能创建一个索引吗? 4什么是前缀索引? 5索引可以是字段的组合吗? 6能跨表创建索引吗?,3.5.1