项目2 创建与维护教学管理
数据表
建表、对表数据的增删改查操作
创建教学管理数据库
解读MySQL的数据类型
创建数据表
操作表数据库
使用Navicat管理表
添加表的约束
解读MySQL的数据类型
学号sno 姓名sname 性别ssex
出生日期
birthday
专业spec
20231012101 李伟 男 2002-09-06 计算机应用
20231012102 张兰 女 2003-03-09 软件技术
20231012103 王芳 女 2003-05-06 通信技术
20231012104 刘勇 男 2003-06-16 软件技术
课程号cno 课程名cname 学分credit 开课学期
term
c06101 高等数学 4 1
c06102 大学英语 2 1
c06103 C语言 5 2
c05101 软件工程 4 4
学号sno 课程号cno 成绩grade
20231012101 c06101 90
20231012101 c06102 89
20231012102 c06101 85
20231012103 c06103 75
字符串类型
数值类型
日期时间类型
三大类型:三大类型:
学生表
课程表 成绩表
1 字符串类型
char类型:定长的字符串。
varchar类型:不定长的字段串。
解读MySQL的数据类型
插入值 char(4) char(4)存储需求 varchar(4) varchar(4)存储需求
‘’ ‘ ‘ 4字节 ‘’ 1字节
‘ab’ ‘ab ‘ 4字节 ‘ab’ 3字节
‘abc’ ‘abc ‘ 4字节 ‘abc’ 4字节
‘abcd’ ‘abcd’ 4字节 ‘abcd’ 5字节
1 字符串类型
text类型:用于保存大文本数据,例如,文章内容、评论等比较长的文本。
binary和varbinary类型:binary 和 varbinary 类型类似于 char和 varchar,不
同的是,它们所表示的是二进制数据。
blob类型:是一种特殊的二进制类型,它用于表示数据量很大的二进制数据,
例如图片、 PDF 文档等。
解读MySQL的数据类型
1 字符串类型
enum类型:也称为枚举类型,只能从枚举列表中取,并且只能取一个。
set类型:集合类型,用于表示字符串对象, 它的值可以有零个或多个。
与 enum 不同的是,enum只允许向一条记录中插入一个值,而set可以向一条
记录中插入多个值。
解读MySQL的数据类型
2 数字类型
1.整数类型
数据类型 字节数 有符号数的取值范围 无符号数的取值范围
tinyint 1 -128~127 0~255
smallint 2 -32768~32767 0~65535
mediumint 3 -8388608~8388607 0~16777215
int 4 -2147483648~2147483647 0~4294967295
bigint
8 -9 223 372 036 854 775 808~9
223 372 036 854 775 807
0~18446744073709551615
int unsigned
解读MySQL的数据类型
2 数字类型
2.小数类型
数据类型 精度 取值范围 字节数
float(p[,s]) 8位精度,p表示数据长度,s表示
小数位数,若不指定精度,则默认
保存实际精度
+(-) 823 466E+38 4
double(p[,s]) 16位精度,p表示数据长度,s表示
小数位数,若不指定精度,则默认
保存实际精度
+(-) 693 134 862 315
7E+308+(-) 073 858 507
201 4E-308
8
decimal(p[,s]) p表示数据长度,s表示小数位数,
默认的精度为10,小数位数为0
可 变 自定义
浮点数
定点数--
解读MySQL的数据类型
3 日期和时间类型
类型 取值范围 说明
year 1901~2155 年份,格式YYYY或YY
date 1000-01-01~1999-12-31 日期,格式YYYY-MM-DD
time -838:59:59~838:59:59 时间,格式HH:MM:SS
datetime
1000-01-01 00:0:0~9999-12-31
23:59:59
日期和时间,格式 YYYY-MM-DD HH:MM:SS
timestamp
1970-01-01 00:00:01~2038-01-
19 03:14:07
时间标签,在处理报告时使用显示格式取决于
M的值
解读MySQL的数据类型
创建教学管理数据库
解读MySQL的数据类型
创建数据表
操作表数据库
使用Navicat管理表
添加表的约束
1 表的基本概念
创建数据表
学号sno 姓名sname 性别ssex 出生日期birthday 专业spec
20231012101 李伟 男 2002-09-06 计算机应用
20231012102 张兰 女 2003-03-09 软件技术
20231012103 王芳 女 2003-05-06 通信技术
20231012104 刘勇 男 2003-06-16 软件技术
表名、表结构、字段名、字段长度和小数位数
student表
1 表的基本概念
创建数据表
说明:
(1)字符串类型。对于字符串类型来说,长度代表字段所能容纳字符的数目,因此
它会限制用户所能输入的文本长度。
(2)整数类型。对于整数类型来说,长度代表该数据类型指定的显示宽度。显示宽
度是指能够显示的最大数据的长度。在不指定宽度的情况下,每个整数类型都有默
认的显示宽度。
(3)二进制类型。对于二进制类型来说,长度代表字段所能容纳的最大字节数。
(4)浮点数类型和定点数类型。对于浮点数类型和定点数类型来说,长度代表数据
的总长度,也就是精度。精度是指数据中数字的位数(包括小数点左侧的整数部分
和小数点右侧的小数部分),而小数位数是指数字中小数点右侧的位数。例如,数
字 的精度是 8,小数位数是 3。
1 表的基本概念
创建数据表
确定数据类型的原则:
(1)数据内容是数值。
如果数据内容是数值,则数据类型应为整型、浮点型和定点型中的一种。其遵循的原则如下。
① 选择最小的可用类型,如果值永远不超过 127,则使用 tinyint。
② 对于没有小数部分的数,可以选择整数类型。
③ 浮点类型用于可能具有小数部分的数,如货物单价、网上购物支付金额等。
(2)数据内容是文本。
如果数据内容是文本,则数据类型应为字符串类型,具体选择哪一种字符串类型,可以遵循以下原则。
① 从速度方面考虑,要选择固定长度的列,可以使用 char 类型。
② 要节省空间,使用长度可变的列,可以使用 varchar 类型。
③ 要将列中的内容限制在一种选择,可以使用 enum 类型。
④ 允许在一列中有多于一个的条目,可以使用 set 类型。
⑤ 对于长文本数据,如果要搜索的内容不区分大小写,可以使用 text 类型。
⑥ 对于长文本数据,如果要搜索的内容区分大小写,可以使用 blob 类型。
2 建表
创建数据表
学号sno 姓名sname 性别ssex 出生日期birthday 专业spec
20231012101 李伟 男 2002-09-06 计算机应用
20231012102 张兰 女 2003-03-09 软件技术
20231012103 王芳 女 2003-05-06 通信技术
20231012104 刘勇 男 2003-06-16 软件技术
student表
2 建表
创建数据表
mysql> create table student(
-> sno char(11) comment '学号' primary key,
-> sname char(8) comment '姓名',
-> sex enum('男','女') comment '性别',
-> birthday date comment '出生日期',
-> spec varchar(20) comment '专业'
-> );
CREATE TABLE [IF NOT EXISTS] 表名
(字段名 字段类型 [字段属性]…)[表选项]
语法格式:
3 查看表结构
创建数据表
1. SHOW CREATE TABLE 表名;
2. DESCRIBE 表名;
3.使用SHOW TABLES 语句查看库中所有表;
mysql> show create table student;
mysql> desc student;
mysql> show tables;
4 修改表结构
创建数据表
ALTER TABLEALTER TABLE 命令命令
1. 修改表名
2. 修改字段名
ALTER TABLE 旧表名 RENAME [TO] 新表名;
ALTER TABLE 表名 CHANGE 旧属性名 新属性名 新数据类型 [字段属性];
3.增加字段
ALTER TABLE 表名 ADD [COLUMN] 新字段名 字段类型 [FIRST|AFTER 字段
名]
mysql> alter table student rename to students;
mysql> alter table student add email varchar(30) after spec;
4 修改表结构
创建数据表
ALTER TABLEALTER TABLE 命令命令
4.修改字段的数据类型
ALTER TABLE 表名 MODIFY [COLUMN] 字段名 数据类型 [字段属性];
5.删除字段
ALTER TABLE 表名 DROP [COLUMN] 字段名;
mysql> alter table course modify term
enum('1','2','3','4','5','6');
mysql> alter table student drop email;
5 删除数据表
创建数据表
DROP TABLE 表名;
删除数据表是指删除数据库中已存在的表,在删除数据表的同时, 数据表
中存储的数据都将被删除。
创建教学管理数据库
解读MySQL的数据类型
创建数据表
操作表数据库
使用Navicat管理表
添加表的约束
1 添加数据
操作表数据
INSERT [INTO] 表名 [字段名,…] VALUES(值1,[值2]…);
1.为所有字段添加数据
2.为部分字段添加数据
mysql> insert into student
-> values('20231012101','李伟','男','2004-09-06','计算机应用');
mysql> insert into student(sno,sname) values('20231012102','张兰
');
3.一次添加多行数据
mysql> insert into student values
-> ('20231012103','王芳','女','2005-05-06','通信技术'),
-> ('20231012104','刘勇','男','2005-06-16','软件技术'),
-> ('20231012105','高兴','男',null,null);
2 查询数据
操作表数据
2.查询表中部分字段
SELECT * FROM 数据表名;
1.查询表中全部数据
SELECT {字段名1, 字段名2, 字段名3, …} FROM 数据表名;
3.简单条件查询
SELECT * |{字段名1, 字段名2, 字段名3, …} FROM 数据表名
WHERE 字段名=值;
mysql> select * from student;
mysql> select sno,sname from student;
mysql> select * from student where spec='软件技术';
3 修改数据
操作表数据
UPDATE 表名 SET 字段名1=值1 [, 字段名2=值2,…] [WHERE 条件=表达式];
4 删除数据
1.使用DELETE语句删除数据
DELETE FROM 表名 [WHETE 条件表达式];
2.使用TRUNCATE语句删除数据
TRUNCATE [TABLE] 表名
mysql> update course set term='1' where cname='C 语言';
mysql> delete from student where sno='20231012105';
创建教学管理数据库
解读MySQL的数据类型
创建数据表
操作表数据库
使用Navicat管理表
添加表的约束
1 建表
使用Navicat管理表
打开连接--->打开数据库--->用鼠
标右键单击“表”节点--->快捷菜
单中选择“新建表”--->在打开的
设计表窗口中输入列名、数据类型
等等列属性--->保存并输入表名
使用Navicat管理表
2 编辑表数据
左侧窗口中展开数据库中的表--->
选中要编辑的表--->鼠标右键快捷
菜单中选择“打开表”命令--->打
开该表的数据窗口--->利用窗口底
部的“+”、“—”按钮进行添加、
删除数据--->“√”按钮保存编辑
结果
创建教学管理数据库
解读MySQL的数据类型
创建数据表
操作表数据库
使用Navicat管理表
添加表的约束
1 非空约束
添加表的约束
NOT NULL
字段名 数据类型 NOT NULL;
非空约束指的是数据列不能为 NULL,非空表示数据列不允许有空值出现,空值
表示数值未确定,并不是数字“0”或字符“空格”。非空约束可以确保数据列中必
须是有意义的值。
语法格式:
添加表的约束
2 主键约束 PRIMARY KEY
1.创建表时定义主键约束
2.修改表的主键
修改表结构ALTER TABLE
设置主键的目的是帮助 MySQL 以最快的速度查找到表中的指定信息。主键的
值能唯一标识表中的记录,类似指纹、身份证用于标识人的身份一样。
#列级约束
mysql> create table course01(
-> cno char(6) primary key,
-> cname varchar(20) not null,
-> credit tinyint not null,
-> term tinyint not null
-> );
#表级约束
mysql> create table course02(
-> cno char(6),
-> cname varchar(20) not null,
-> credit tinyint not null,
-> term tinyint not null,
-> primary key(cno)
-> );
mysql> alter table student01 add primary key(sno);
3 外键约束
添加表的约束
FOREIGN KEY
CONSTRAINT 外键名 FOREIGN KEY (字段名 1,[字段名 2…])
REFERENCES 表名(字段名 1,[字段名 2…])
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
1.参照完整性
在关系数据库中,有很多规则是跟表之间的关系有关的,表与表之间往往存在
一种“父子”关系。外键的作用是建立子表与其父表的关联关系,保证子表与父表
关联数据的一致性。当父表中更新或删除某条信息时,子表中与之对应的信息也必
须有相应的改变。
语法格式:
3 外键约束
添加表的约束
FOREIGN KEY
参数名称 功能描述
RESTRICT 默认值。拒绝父表删除或修改外键关联字段
CASCADE 父表中删除或更新记录时,同时自动删除或更新子表中对应的记录
SET NULL
父表中删除或更新记录时,使用NULL值替换子表中对应的记录(不适
用于NOT NULL字段)
NO ACTION 与默认值RESTRICT相同,拒绝父表删除或修改外键关联字段
SET DEFAULT 设默认值,但InnoDB目前不支持
外键约束的参数说明
3 外键约束
添加表的约束
FOREIGN KEY
2.创建表时定义外键
mysql> create table score(
-> sno char(11) not null,
-> cno char(6) not null,
-> grade int,
-> primary key(sno,cno),
-> foreign key(sno) references student(sno)
-> );
3.对已有的表添加外键
mysql> alter table score add constraint fk_cno
-> foreign key(cno) references course(cno);
添加表的约束
4 检查约束 CHECK
CONSTRAINT 约束名 CHECK(条件)
5 唯一约束 UNIQUE
唯一性约束是指所有记录中该字段的值不能重复出现。
在进行数据完整性管理时,还需要一些针对数据表列的取值范围进行限定的约束。
语法格式:
mysql> alter table student
-> add constraint check_birth
-> check(birthday>'1999-12-31');
mysql> alter table course add unique(cname);
添加表的约束
6 其他约束
默认值DEFAULT、自动增长 AUTO_INCREMENT
默认约束就是给数据表中的字段指定默认值。在插入一条新的记录时,如果
没有为这个字段赋值,那么系统会自动为这个字段插入默认值。
1.默认约束
字段名 数据类型 DEFAULT 默认值;
语法格式:
mysql> create table my_default(
-> id int primary key,
-> stu_id int unique,
-> grade float default 0);
添加表的约束
6 其他约束
默认值DEFAULT、自动增长 AUTO_INCREMENT
AUTO_INCREMENT 是 MySQL 数据库中一个特殊的约束。其主要用于为表中插
入的新记录自动生成唯一的 ID。AUTO_INCREMENT 约束的字段可以是任何整数类
型(TINYINT、SMALLINT 、INT、BIGINT 等)。
2.自动增长字段
字段名 数据类型 AUTO_INCREMENT
语法格式:
mysql> create table test(
-> id int primary key auto_increment,
-> name varchar(20));
添加表的约束
6 其他约束
默认值DEFAULT、自动增长AUTO_INCREMENT
2.自动增长字段
说明:
(1)一个表中只能有一个自动增长字段,该字段的数据类型是整数类型,且必须为
键,如唯一键、主键。
(2)若为自动增长字段插入 Null、0 或在插入时省略该字段,则该字段就会使用自
动增长值;若插入的是一个具体值,则不会使用自动增长值。
(3)自动增长从 1 开始自增,每次加 1。若插入的值大于自动增长的值,则下次插
入的自动增长值会自动使用最大值加 1;若插入的值小于自动增长值,则不会对自动
增长值产生影响。
(4)使用 DELETE 删除记录时,自动增长值不会减小或填补空缺。
7
添加表的约束
字段名 数据类型 约束 说明
sno char(11) 主键 学号
sname char(8) 非空 姓名
sex char(2) 默认值’男’且只
有’男’或’女’
两种情况
性别
birthday date 大于1999-12-31 出生日期
spec varchar(20) 非空 专业
课堂练习:按照下表要求创建student表
7
添加表的约束
课堂练习:按照下表要求创建course表
字段名 数据类型 约束 说明
cno char(6) 主键 课程号
cname varchar(20) 非空,唯一 课程名
credit tinyint 非空,数值范围(1~8) 学分
term tinyint 非空,数值范围(1~8) 开设学期
7
添加表的约束
课堂练习:按照下表要求创建score表
字段名 数据类型 约束 说明
sno char(11) 组合主键,外键 学号
cno char(6) 组合主键,外键 课程号
grade int 数值范围(1~100) 成绩
项目小结
本项目介绍了数据表的创建、修改、删除及表数据的增、删、改
等操作,还介绍了数据类型及添加表约束的方法。学习完本项目,读
者能够对数据表的管理具备一定的理论和操作基础。
下课了。。。
休息一会儿。。。