《MySQL数据库管理与应用任务式教程(微课版)单元4 创建与管理表》由会员分享,可在线阅读,更多相关《MySQL数据库管理与应用任务式教程(微课版)单元4 创建与管理表(109页珍藏版)》请在金锄头文库上搜索。
1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2024/5/16,#,单元,4,创,建与管理表,MySQL,数据库管理与应用任务式教程(慕课版),学习内容,任务,1,操作学生成绩管理数据库的表,2,任务2 操作学生成绩管理数据库中表的数据,数据库系统的组成,任务3 操作学生成绩管理数据库中的索引,任务4 实现学生成绩管理数据库中表的数据完整性,在 cjgl 数据库中有 3 张表:学生表 xs、课程表 kc 和成绩表 cj,这些表的结构分别如表 4-1表 4-3 所示,表的初始数据分别如表 4-4、表 4-5 和表 4-6 所示。,任务,1,操作学生成绩管理
2、数据库的表,任务,1,操作学生成绩管理数据库的表,任务,1,操作学生成绩管理数据库的表,任务,1,操作学生成绩管理数据库的表,任务,1,操作学生成绩管理数据库的表,任务,1,操作学生成绩管理数据库的表,4.1.1 用命令方式创建和管理数据表,创建数据表的过程是定义表中数据列的过程,也是实施数据完整性(包括域完整性、实,体完整性和参照完整性)约束的过程。,1查看表,在 MySQL 中,可以用 SHOW TABLES 语句查看当前数据库中有哪些表。其语法格式如下,SHOW TABLES LIKE 匹配模式;,省略LIKE 匹配模式,表示查看当前数据库中的所有数据表。,添加LIKE 匹配模式,则按照
3、“匹配模式”查看数据表。“%”用于匹配任意长度的字符串;“_”用于仅匹配一个字符。,任务,1,操作学生成绩管理数据库的表,【例题 4.1】查看示例数据库 world 中的表。,执行的 SQL 语句及结果如图,。,任务,1,操作学生成绩管理数据库的表,在 MySQL 中,可以用 SHOW TABLE STATUS 语句查看数据库中数据表的状态信息,如数据表的名称、存储引擎、结构文件版本号、记录的存储格式、创建时间等。其语法格式如下。,SHOW TABLE STATUS FROM 数据库名 LIKE 匹配模式;,【例题 4.2】查看示例数据库 world 中表 city 的状态信息。,执行如下 S
4、QL 语句,mysqlSHOW TABLE STATUS LIKE cityG;,任务,1,操作学生成绩管理数据库的表,2创建表,在 MySQL 中,可以使用 CREATE TABLE 语句创建表,该语句完整的语法比较复杂,,主要由表创建定义(create_definition)、表选项(table_options)和分区选项(partition_options,)等部分组成,。其基本语法格式如下。,任务,1,操作学生成绩管理数据库的表,任务,1,操作学生成绩管理数据库的表,语法说明如下。,如果创建多个列,要用英文逗号将它们隔开。,列定义的完整形式比较复杂,涉及如下关键字。,AUTO_INCR
5、EMENT:用于设置某列有自增属性,仅用于整数列。当插入 NULL 或 0,到一个 AUTO_INCREMENT 列中时,列被设置为该列的最大值+1。AUTO_INCREMENT 顺,序从 1 开始。每个表只能有一个 AUTO_INCREMENT 列,并且它必须被索引。,COMMENT string:表的注释;最大长度为 60 个字符。,COLLATE collation_name:用于指定表的校验方式。,COLUMN_FORMAT:FIXED|DYNAMIC|DEFAULT。,STORAGE:DISK|MEMORY。,任务,1,操作学生成绩管理数据库的表,FULLTEXT:表示全文索引,在检
6、索长文本的时候效果最好,检索短文本时建议使用 Index。,SPATIAL:表示空间索引,是对空间数据类型的字段创建的索引。,table_options 子句:用于指定表的各种属性。,ASquery_expression:利用查询返回的结果创建表,此时 create_definition 子句可省略。,唯一索引中重复值的行根据指定的是 IGNORE 还是 REPLACE,选择忽略或者替换现有行。如果两者都未指定,出现重复值时将报错。,任务,1,操作学生成绩管理数据库的表,【例题 4.3】在学生成绩管理数据库 cjgl 中,用命令方式创建学生表 xs1,。,mysql,USE cjgl;,mys
7、qlCREATE TABLE xs1(,学号 CHAR(6),姓名 CHAR(8),专业名 CHAR(10),性别 ENUM(男,女),出生时间 DATETIME,总学分 TINYINT(1)COMMENT ,备注 TEXT(2,);,以上语句执行后,,可查看数据表是否创建成功,执行如下语句。,mysql SHOW TABLES;,任务,1,操作学生成绩管理数据库的表,3实现主键约束、空值约束、唯一性约束、默认约束和检查约束,完整性约束是 MySQL 提供的自动保持数据完整性的一种方法。它通过限制列中数据、,记录中的数据和表之间的数据来保证数据库中数据的正确性和有效性。在 MySQL 中有 6
8、 种,约束:主键约束、空值约束、唯一性约束、默认约束、外键约束和检查约束。在这 6 种约束,中,一个数据表中只能有一个主键约束,其他约束可以有多个。,完整性约束的基本语法格式如下。,CONSTRAINT ,任务,1,操作学生成绩管理数据库的表,在 MySQL 中,对于基本表的约束分为列约束和表约束。,列约束是对某一个特定列的约束,包含在列定义中,直接跟在列的其他定义之后,用空格分隔,不必指定列名。,表约束与列定义相互独立,不包括在列定义中,通常用于对多个列一起进行约束,与列定义之间用“,”分隔,定义表约束时必须指出要约束的列的名称。,任务,1,操作学生成绩管理数据库的表,此处仅介绍主键约束、空
9、值约束、唯一性约束、默认约束和检查约束,外键约束将在任务 4-4 中介绍。,(1)主键约束,主键(Primary Key)是数据表中的一列或多列的组合,能够唯一地确定表中的每一条记录。,在设计数据表时,一般情况下都会在表中设置一个主键。,例如,学号是学生表的主键,学号和课程号是成绩表的主键。,任务,1,操作学生成绩管理数据库的表,主键约束的基本语法格式如下。,列名 数据类型 PRIMARY KEY-列级约束,或,CONSTRAINT 约束名 PRIMARY KEY(列名 1,列名 n)-表级约束,主键约束用于定义基本表的主键,要求主键列的数据唯一,并且不允许为空。,主键既可用于列约束,也可用于
10、表约束。,主键可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度。,任务,1,操作学生成绩管理数据库的表,【例题 4.4】在学生成绩管理数据库 cjgl 中,用命令方式创建课程表 kc,主键为课程号,。,单字段组成的主键可以在定义列的同时指定。,执行如下 SQL 语句。,mysql USE cjgl;,mysqlCREATE TABLE kc,(课程号 CHAR(3)NOT NULL PRIMARY KEY,课程名 CHAR(16)NOT NULL,开课学期 TINYINT NOT NULL CHECK(开课学期=1 AND 开课学期 SHOW TABLES;,多字段联合组成
11、的主键只能在定义完所有列之后指定。,任务,1,操作学生成绩管理数据库的表,【例题 4.5】在学生成绩管理数据库 cjgl 中,用命令方式创建成绩表 cj,主键为(学号,课程号),。,执行如下 SQL 语句。,mysqlCREATE TABLE cj,(学号 CHAR(6)NOT NULL,课程号 CHAR(3)NOT NULL,成绩 TINYINT,PRIMARY KEY(学号,课程号);,以上 SQL 语句执行后,可查看数据表是否创建成功,执行如下 SQL 语句。,mysql SHOW TABLES;,任务,1,操作学生成绩管理数据库的表,(2)非空约束,非空约束(NOT NULL)用来控制
12、是否允许某列的值为 NULL。列的值默认为 NULL。,当某一列的值一定要不为 NULL 才有意义的时候,应为其设置非空约束。非空约束的基本语法格式如下。,列名 数据类型 NOT NULL,非空约束只能用于定义列约束。,创建非空约束的方法如例题 4.4 所示。,对于使用了非空约束的字段,如果在添加数据时没有指定值,数据库系统会报错。,任务,1,操作学生成绩管理数据库的表,(3)唯一性约束,唯一性约束(UNIQUE)是指一个或者多个列的组合值具有唯一性,用于防止在列中输入重复的值。定义了唯一性约束的列称为唯一键,系统自动为唯一键创建唯一索引,从而保证了唯一键的唯一性。唯一性约束的基本语法格式如下
13、。,列名 数据类型 UNIQUE-列级约束,或,CONSTRAINT UNIQUE(列名 1,列名 n)-表级约束,例如,在学生表中,如果要避免表中的学生姓名重复,就可以为姓名列设置唯一性约束。,唯一性约束与主键约束的共同之处是它们都能够确保表中对应列不存在重复值,但两者之间有着较大的区别:在一个基本表中只能定义一个主键约束,但可定义多个唯一性约束;,任务,1,操作学生成绩管理数据库的表,对于指定为主键的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于具有唯一性约束的唯一键,则允许为空,但只能有一个空值;,一般创建主键约束时,系统会自动产生索引,索引的默认类型为聚集索引,而创建唯一性
14、约束时,系统会自动产生一个唯一索引,索引的默认类型为非聚集索引。,注意:,不能为同一个列或一组列既定义唯一性约束,又定义主键约束。,任务,1,操作学生成绩管理数据库的表,(4)默认值约束,默认值约束(DEFAULT)用来指定某列的默认值。当数据表中的某个列未输入值时,系统自动为其添加一个已经设置好的值。如班里的男同学较多,学生表中的性别就可以默认为“1”,即男。如果插入一条新记录时没有为某列赋值,那么系统会自动将这个列赋值为 1。,默认值约束的基本语法格式如下。,列名 数据类型 DEFAULT,默认值约束只能用于定义列约束。,默认值约束通常用在已经设置了非空约束的列,这样能够防止数据表在录入数
15、据时出现错误。,如果没有为列指定默认值,MySQL 会自动分配一个默认值。,如果列可以取 NULL 作为值,那么其默认值是 NULL。,任务,1,操作学生成绩管理数据库的表,如果列被声明为 NOT NULL,那么其默认值取决于列类型,具体说明如下,。,对于数值列,除 AUTO_INCREMENT 列外,其默认值为 0。而对于 AUTO_INCREMENT列,其默认值为该列的序列中的下一个数。,对于非 TIMESTAMP 的日期和时间类型列,其默认值是该类型适当的“零”值。例如,DATE 类型的“零”值为“0000-00-00”。对于表中第一个 TIMESTAMP 列,其默认值是当前的日期和时间
16、,对于非 ENUM 的字符串类型列,其默认值是空字符串。对于 ENUM 列,其默认值是第一个枚举值。,任务,1,操作学生成绩管理数据库的表,(5)检查约束,检查约束(CHECK)用来检查数据表中的字段值是否有效。,检查约束在创建表时定义,可以定义成列级约束,也可以定义成表级约束。其基本语法格式如下。,列名 数据类型 CHECK(表达式),例如,课程表 kc 中的“开课学期”列的取值范围应该为 16,所以可以设置“开课学期=1 AND 开课学期 USE cjgl;,mysqlCREATE TABLE xs(,学号 CHAR(6)NOT NULL PRIMARY KEY,姓名 CHAR(8)NOT NULL,专业名 CHAR(10)NULL,性别 ENUM(男,女)NOT NULL DEFAULT 男 CHECK(性别=男 OR 性别=女),任务,1,操作学生成绩管理数据库的表,出生时间DATETIME NOT NULL,总学分 TINYINT(1)NULL COMMENT ,备注 TEXT(2)NULL);,以上 SQL 语句执行后,可查看数据表 xs 是否创建成功,执行如下 SQL 语