△数据库系统(DBS)
数据库(DB) + 数据库管理系统 (DBS)+ 数据库应用程序 + 数据库管理员 (BDA)+ 最终用户
△数据库管理系统-DBM
我们要使用服务端的数据 - 需要有一个客户端
客户端可以自己写 : 未来写代码的时候
也可以用别人写好的 : 第三方的工具 数据库管理软件的公司出版的官方客户端
数据库管理系统本质上也是管理一堆文件
只不过人家的管理方式比我们更高效 更安全
△数据库管理员-DBA
用户的创建 权限的管理
数据库的二次开发 : 让数据库具有公司的特质
1、易于维护:都是使用表结构,格式一致
2、使用方便:SQL语言通用,可用于复杂查询
3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询
1、读写性能比较差,尤其是海量数据的高效率读写
2、固定的表结构,灵活度稍欠
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈
1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等
2、速度快,成本低:nosql数据库部署简单,基本都是开源软件
1、不提供sql支持,学习和使用成本较高
3、数据结构相对复杂,复杂查询方面稍欠
△ SQL是关系数据库管理系统的标准语言。
终端,python,第三方工具
△服务端-安装启动关闭
#创建用户eva 在所有网段允许 设置密码为1231,先跟数据库进行连接(用账号和密码,默认3306端口)
m: 显示宽度,和数据类型的取值范围是无关的
MySQL中使用浮点数和定点数来表示小数。它们都可以用(m,n)来表示,其中m称为精度,表示总共的位数;n称为标度,是表示小数的位数(会四舍五入)
让datetime 自动写当前时间,级联更新
例如建表时定义字段
爱好 set(“游泳”,“篮球”,“下棋”,“音乐”,“旅游”)
insert into t_1 values("游泳,篮球,音乐")
添加时会自动去重和去掉不存在的
填充的时候也必须时字符串格式,添加时会自动去重和去掉不存在的
在维护和操作时,一定要先备份一份,之后再去操作数据库
会遭遇各的数据丢失的情况:
# 默认用户登陆之后并没有实际操作的权限 # 需要使用管理员root用户登陆 # 输入“ipconfig”即可查看到本机的ip信息。 # ;表示sql语句的结束 # \c放弃当前要执行的sql语句
先切换到文件夹下:use db1 show creat table 表名; 查看建表语句和搜索引擎,显示的信息更全面
_ 通配符 表示一个字符长度的任意内容
% 通配符 表示任意字符长度的任意内容
查看所有员工中名字是jin开头,n或者g结果的员工信息
(判断某个字段是否为NULL不能用等号,需要用IS) 注意''是空字符串,不是null 再用上条查看,就会有结果了
先执行执行select,把查到的内容导入到t2
having要跟在group by之后,对分组查询的结果进行过滤(过滤分组)
where要出现在group by之前,执行表中所有数据来进行过滤(过滤行)
另外,having可以用聚合函数,并支持所有where子句操作符数
查看字符的ASCII码值,str是空时返回0
查看ASCII码值对应的字符
字符串中包含的字符个数
截取字符串左端的len个字符
返回删除了左空格的字符串
返回删除了右空格的字符串
返回由n个空格组成的字符串
表示将值 n 四舍五入为整数,无小数位
表示将值 n 四舍五入为小数点后 D 位的数值,D为小数点后小数位数
若要保留 n 值小数点左边的 D 位,可将 D 设为负值
获取一个0.0-1.0之间的随机数
format参数可用的值如下: %Y 年份,返回4 位整数 %y 年份,返回2 位整数 %d 日期,返回0-31之间的整数
查询每个国家都有谁,注意:distinct后面的字段用逗号分隔,逗号两边不能有空格
# 查询岗位名以及岗位包含的所有员工名字 # 查询各部门年龄在20岁以上的人的平均薪资
having放在分组之后,因为作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组
查询平均薪资大于1w的部门 1. 查询各岗位内包含的员工个数小于2的岗位名、岗位内包含员工名字、个数 3. 查询各岗位平均薪资大于10000且小于20000的岗位名、平均工资
# 约束各自不能为空 且联合唯一 还占用了整张表的主键
排列顺序从高到低 DESC
在查询时可以只检索前几条或者中间某几行数据(数据量很大时,几百万条)
SELECT * FROM t_user LIMIT 0,3;
limit 后面的第一个数字设置从哪里开始检索(偏移量,从0开始)
limit 后面的第二个数字是设置显示多少条
所有不在条件匹配内的数据,都会被剔出连表
子查询效率相对于连表查低, 因为 子查询要查两张表,连表查询查一张表-- id 你自己起的字段名字。 -- int 数据类型,整型。 所有的操作都无法改变auto_increment的自动计数。但是我们也没有必要去改变它。 1.至少要看到自增的效果 2.至少写3条数据 4,5,6 3.删掉第5条,再看结果 5.删掉第5条,再看结果 8.再insert一条数据,再看结果 不支持对自增长字段插入" ”值-空字符串 不支持text字段有默认值 直接在mysql中生效(重启失效): 配置文件添加(永久失效): # 约束各自不能为空 且联合唯一 # pri 是怎么产生的? 第一个被设置了非空+唯一约束会被定义成主键 primary key # 主键在整张表中只能有一个
△外键:用来和其他表建立联系
外键具有保持数据完整性和一致性的机制,目前MySQL只在InnoDB引擎下支持
外键是表中的一个列,其值必须在另一个表的主键或者唯一键中列出
作为主键的表称为 主表,作为外键的表称为 依赖表
外键会参照主表的主键或唯一键
1.对子表(外键所在的表)的作用:子表在进行写操作的时候,如果外键字段在父表中找不到对应的匹配,操作就会失败
2.对父表的作用:对父表的主键字段进行删和改时,如果对应的主键在子表中被引用,操作就会失败
△以下情况创建外键会失败:
外键的引用类型不一样,如主键是int外键是char
主键和外键的字符编码不一样
数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作
使用不同的存储引擎还可以获得特定的功能
表结构 存在一个文件中 : 硬盘上
表数据 存在另一个文件中、内存中
索引(目录) 为了方便查找设计的一个机制 :
存储方式为索引+数据 表结构 ,数据的持久化存储
提供了具有提交、回滚和崩溃恢复能力的事务安全,支持外键。但是比起Myisam存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间。MySQL 5.5.5 之后,InnoDB 作为默认存储引擎.
存储方式为索引 数据 表结构 数据的持久化存储 ,有表级锁
不支持事务、也不支持外键,但访问速度快,对事务没有要求
存储方式为表结构,数据断电消失
建表的时候可以指定引擎
一致性 n条语句的执行状态是一致的
commit; # 提交事务 解锁被锁住的数据,让他们能够被修改
行级锁 :只对涉及到修改的行加锁,利于并发的修改,但是对于一次性大量修改效率低下
表级锁 :一次性加一把锁就锁住了整张表,不利于并发的修改,但是加锁速度比行锁的效率要高
外键约束 :被约束表中的数据不能随意的修改/删除 约束字段据要根据被约束表来使用数据
△聚集索引/聚簇索引 : 叶子节点会存储整行数据 —— innodb的主键
△辅助索引/非聚集索引 :除了主键之外的普通索引都是辅助索引,一个索引没办法查到整行数据,需要回聚集索引再查一次(回表)
△b+树 是为了更好的处理范围问题在b树的基础上有所优化
△mysql中innodb存储引擎的所有的索引树都是b+树
当数据库中存在很多条记录,例如几十万条,查询速度就成了一个问题
先在目录中查询,然后根据目录所示的页码找到查询内容,大大缩短查询时间.
不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行
表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件
索引也需要占空间,如果我们有大量的索引,索引文件可能会占很多空间
3、当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。
1.对经常更新的表就避免对其进行索引,对经常用于查询的字段应该创建索引
2.数据量小的表最好不要使用索引
3.在不同值少的列上(字段上)不要建立索引,比如在"性别"字段上只有男,女两个不同值
1,创建表时,主键会默认带有索引
创建一个索引 索引名 从 表名 在哪个字段在创建一个视图时,只存放视图的定义,也就是动态检索数据的查询语句,并不存放视图对应的数据,在用户使用视图时才去求相对应的数据,所以视图称为‘虚表’
-- 查看每个国家的总人数,年龄总和,平均年龄,最高年龄,最低年龄 为上面的语句创建视图:
#三个部门:教学,销售,运营
0.建表book,并向表中插入数据
1.查询egon写的所有书和价格
2.找出最贵的图书的价格
4.将所有图书按照出版日期排序
5.查询alex写的所有书的平均价格
6.查询人民音乐不好听出版社出版的所有图书
7.查询人民音乐出版社出版的alex写的所有图书和价格
8.找出出版图书均价最高的作者
9.找出最新出版的图书的作者和出版社
10.显示各出版社出版的所有图书
11.查找价格最高的图书,并将它的价格修改为50元
12.删除价格最低的那本书对应的数据
自己研究上面sql语句中的year函数的功能,完成需求:
将所有2017年出版的图书从数据库中删除
15.有文件如下,请根据链接自学pymysql模块,使用python写代码将文件中的数据写入数据库
△数据库系统(DBS)
数据库(DB) + 数据库管理系统 (DBS)+ 数据库应用程序 + 数据库管理员 (BDA)+ 最终用户
△数据库管理系统-DBM
我们要使用服务端的数据 - 需要有一个客户端
客户端可以自己写 : 未来写代码的时候
也可以用别人写好的 : 第三方的工具 数据库管理软件的公司出版的官方客户端
数据库管理系统本质上也是管理一堆文件
只不过人家的管理方式比我们更高效 更安全
△数据库管理员-DBA
用户的创建 权限的管理
数据库的二次开发 : 让数据库具有公司的特质
1、易于维护:都是使用表结构,格式一致
2、使用方便:SQL语言通用,可用于复杂查询
3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询
1、读写性能比较差,尤其是海量数据的高效率读写
2、固定的表结构,灵活度稍欠
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈
1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等
2、速度快,成本低:nosql数据库部署简单,基本都是开源软件
1、不提供sql支持,学习和使用成本较高
3、数据结构相对复杂,复杂查询方面稍欠
△ SQL是关系数据库管理系统的标准语言。
终端,python,第三方工具
△服务端-安装启动关闭
#创建用户eva 在所有网段允许 设置密码为1231,先跟数据库进行连接(用账号和密码,默认3306端口)
m: 显示宽度,和数据类型的取值范围是无关的
MySQL中使用浮点数和定点数来表示小数。它们都可以用(m,n)来表示,其中m称为精度,表示总共的位数;n称为标度,是表示小数的位数(会四舍五入)
date 年-月-日 入职日期 出账日期 还款日期
timestamp 年-月-日 时:分:秒 不能为空,自动写当前时间,级联更新,范围小
now() 函数表示当前时间
让datetime 自动写当前时间,级联更新
char(255) :定长的 节省时间 浪费空间 手机号码、身份证号
set 多选,自动去重
爱好 set(“游泳”,“篮球”,“下棋”,“音乐”,“旅游”)
添加时会自动去重和去掉不存在的
在维护和操作时,一定要先备份一份,之后再去操作数据库
会遭遇各的数据丢失的情况:
# 默认用户登陆之后并没有实际操作的权限
# 需要使用管理员root用户登陆
# 输入“ipconfig”即可查看到本机的ip信息。
# ;表示sql语句的结束
# \c放弃当前要执行的sql语句
先切换到文件夹下:use db1
show creat table 表名; 查看建表语句和搜索引擎,显示的信息更全面
先执行执行select,把查到的内容导入到t2
having要跟在group by之后,对分组查询的结果进行过滤(过滤分组)
where要出现在group by之前,执行表中所有数据来进行过滤(过滤行)
另外,having可以用聚合函数,并支持所有where子句操作符数
查看字符的ASCII码值,str是空时返回0
查看ASCII码值对应的字符
字符串中包含的字符个数
截取字符串左端的len个字符
返回删除了左空格的字符串
返回删除了右空格的字符串
返回由n个空格组成的字符串
表示将值 n 四舍五入为整数,无小数位
表示将值 n 四舍五入为小数点后 D 位的数值,D为小数点后小数位数
若要保留 n 值小数点左边的 D 位,可将 D 设为负值
获取一个0.0-1.0之间的随机数
format参数可用的值如下: %Y 年份,返回4 位整数 %y 年份,返回2 位整数 %d 日期,返回0-31之间的整数_ 通配符 表示一个字符长度的任意内容
% 通配符 表示任意字符长度的任意内容
查看所有员工中名字是jin开头,n或者g结果的员工信息(判断某个字段是否为NULL不能用等号,需要用IS)
注意''是空字符串,不是null 再用上条查看,就会有结果了# 查询岗位名以及岗位包含的所有员工名字
# 查询各部门年龄在20岁以上的人的平均薪资
having放在分组之后,因为作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组
查询平均薪资大于1w的部门
1. 查询各岗位内包含的员工个数小于2的岗位名、岗位内包含员工名字、个数
2. 查询各岗位平均薪资大于10000的岗位名、平均工资
3. 查询各岗位平均薪资大于10000且小于20000的岗位名、平均工资
排列顺序从高到低 DESC
在查询时可以只检索前几条或者中间某几行数据(数据量很大时,几百万条)
limit 后面的第一个数字设置从哪里开始检索(偏移量,从0开始)
limit 后面的第二个数字是设置显示多少条
所有不在条件匹配内的数据,都会被剔出连表
子查询效率相对于连表查低, 因为 子查询要查两张表,连表查询查一张表 # 约束各自不能为空 且联合唯一 还占用了整张表的主键 -- id 你自己起的字段名字。 -- int 数据类型,整型。 所有的操作都无法改变auto_increment的自动计数。但是我们也没有必要去改变它。 1.至少要看到自增的效果 2.至少写3条数据 4,5,6 3.删掉第5条,再看结果 5.删掉第5条,再看结果 8.再insert一条数据,再看结果 不支持对自增长字段插入" ”值-空字符串 不支持text字段有默认值 直接在mysql中生效(重启失效): 配置文件添加(永久失效): # 约束各自不能为空 且联合唯一 # pri 是怎么产生的? 第一个被设置了非空+唯一约束会被定义成主键 primary key # 主键在整张表中只能有一个
△外键:用来和其他表建立联系
外键具有保持数据完整性和一致性的机制,目前MySQL只在InnoDB引擎下支持
外键是表中的一个列,其值必须在另一个表的主键或者唯一键中列出
作为主键的表称为 主表,作为外键的表称为 依赖表
外键会参照主表的主键或唯一键
1.对子表(外键所在的表)的作用:子表在进行写操作的时候,如果外键字段在父表中找不到对应的匹配,操作就会失败
2.对父表的作用:对父表的主键字段进行删和改时,如果对应的主键在子表中被引用,操作就会失败
△以下情况创建外键会失败:
外键的引用类型不一样,如主键是int外键是char
主键和外键的字符编码不一样
数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作
使用不同的存储引擎还可以获得特定的功能
表结构 存在一个文件中 : 硬盘上
表数据 存在另一个文件中、内存中
索引(目录) 为了方便查找设计的一个机制 :
存储方式为索引+数据 表结构 ,数据的持久化存储
提供了具有提交、回滚和崩溃恢复能力的事务安全,支持外键。但是比起Myisam存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间。MySQL 5.5.5 之后,InnoDB 作为默认存储引擎.
存储方式为索引 数据 表结构 数据的持久化存储 ,有表级锁
不支持事务、也不支持外键,但访问速度快,对事务没有要求
存储方式为表结构,数据断电消失
建表的时候可以指定引擎
一致性 n条语句的执行状态是一致的
commit; # 提交事务 解锁被锁住的数据,让他们能够被修改
行级锁 :只对涉及到修改的行加锁,利于并发的修改,但是对于一次性大量修改效率低下
表级锁 :一次性加一把锁就锁住了整张表,不利于并发的修改,但是加锁速度比行锁的效率要高
外键约束 :被约束表中的数据不能随意的修改/删除 约束字段据要根据被约束表来使用数据
△聚集索引/聚簇索引 : 叶子节点会存储整行数据 —— innodb的主键
△辅助索引/非聚集索引 :除了主键之外的普通索引都是辅助索引,一个索引没办法查到整行数据,需要回聚集索引再查一次(回表)
△b+树 是为了更好的处理范围问题在b树的基础上有所优化
△mysql中innodb存储引擎的所有的索引树都是b+树
当数据库中存在很多条记录,例如几十万条,查询速度就成了一个问题
先在目录中查询,然后根据目录所示的页码找到查询内容,大大缩短查询时间.
不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行
表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件
索引也需要占空间,如果我们有大量的索引,索引文件可能会占很多空间
3、当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。
1.对经常更新的表就避免对其进行索引,对经常用于查询的字段应该创建索引
2.数据量小的表最好不要使用索引
3.在不同值少的列上(字段上)不要建立索引,比如在"性别"字段上只有男,女两个不同值
1,创建表时,主键会默认带有索引
创建一个索引 索引名 从 表名 在哪个字段在创建一个视图时,只存放视图的定义,也就是动态检索数据的查询语句,并不存放视图对应的数据,在用户使用视图时才去求相对应的数据,所以视图称为‘虚表’
-- 查看每个国家的总人数,年龄总和,平均年龄,最高年龄,最低年龄
为上面的语句创建视图:
#三个部门:教学,销售,运营
0.建表book,并向表中插入数据
1.查询egon写的所有书和价格
2.找出最贵的图书的价格
4.将所有图书按照出版日期排序
5.查询alex写的所有书的平均价格
6.查询人民音乐不好听出版社出版的所有图书
7.查询人民音乐出版社出版的alex写的所有图书和价格
8.找出出版图书均价最高的作者
9.找出最新出版的图书的作者和出版社
10.显示各出版社出版的所有图书
11.查找价格最高的图书,并将它的价格修改为50元
12.删除价格最低的那本书对应的数据
自己研究上面sql语句中的year函数的功能,完成需求:
将所有2017年出版的图书从数据库中删除
15.有文件如下,请根据自学pymysql模块,使用python写代码将文件中的数据写入数据库
△数据库系统(DBS)
△数据库管理系统-DBM △数据库管理员-DBA
用户的创建 权限的管理
1、易于维护:都是使用表结构,格式一致
1、读写性能比较差,尤其是海量数据的高效率读写
1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等
1、不提供sql支持,学习和使用成本较高 △ SQL是关系数据库管理系统的标准语言。 终端,python,第三方工具 △服务端-安装启动关闭 #创建用户eva 在所有网段允许 设置密码为1231,先跟数据库进行连接(用账号和密码,默认3306端口) m: 显示宽度,和数据类型的取值范围是无关的 MySQL中使用浮点数和定点数来表示小数。它们都可以用(m,n)来表示,其中m称为精度,表示总共的位数;n称为标度,是表示小数的位数(会四舍五入) date 年-月-日 入职日期 出账日期 还款日期 timestamp 年-月-日 时:分:秒 不能为空,自动写当前时间,级联更新,范围小 now() 函数表示当前时间 默认当前时间并级联更新
char(255) :定长的 节省时间 浪费空间 手机号码、身份证号 set 多选,自动去重
爱好 set(“游泳”,“篮球”,“下棋”,“音乐”,“旅游”) 在维护和操作时,一定要先备份一份,之后再去操作数据库
会遭遇各的数据丢失的情况:
先执行执行select,把查到的内容导入到t2
having要跟在group by之后,对分组查询的结果进行过滤(过滤分组) 查看字符的ASCII码值,str是空时返回0 查看ASCII码值对应的字符 字符串中包含的字符个数 截取字符串左端的len个字符 返回删除了左空格的字符串 返回删除了右空格的字符串 返回由n个空格组成的字符串 表示将值 n 四舍五入为整数,无小数位
表示将值 n 四舍五入为小数点后 D 位的数值,D为小数点后小数位数 获取一个0.0-1.0之间的随机数 format参数可用的值如下: %Y 年份,返回4 位整数 %y 年份,返回2 位整数 %d 日期,返回0-31之间的整数使用算数表达式查询某几列:年龄增加50查询每个国家都有谁,注意:distinct后面的字段用逗号分隔,逗号两边不能有空格_ 通配符 表示一个字符长度的任意内容 % 通配符 表示任意字符长度的任意内容 查看所有员工中名字是jin开头,n或者g结果的员工信息(判断某个字段是否为NULL不能用等号,需要用IS) 注意''是空字符串,不是null 再用上条查看,就会有结果了
having放在分组之后,因为作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组
排列顺序从高到低 DESC
在查询时可以只检索前几条或者中间某几行数据(数据量很大时,几百万条) 所有不在条件匹配内的数据,都会被剔出连表 子查询效率相对于连表查低, 因为 子查询要查两张表,连表查询查一张表 # 约束各自不能为空 且联合唯一 还占用了整张表的主键 -- id 你自己起的字段名字。 -- int 数据类型,整型。 所有的操作都无法改变auto_increment的自动计数。但是我们也没有必要去改变它。 1.至少要看到自增的效果 2.至少写3条数据 4,5,6 3.删掉第5条,再看结果 5.删掉第5条,再看结果 8.再insert一条数据,再看结果 不支持对自增长字段插入" ”值-空字符串 不支持text字段有默认值 直接在mysql中生效(重启失效): 配置文件添加(永久失效): # 约束各自不能为空 且联合唯一 # pri 是怎么产生的? 第一个被设置了非空+唯一约束会被定义成主键 primary key # 主键在整张表中只能有一个
△外键:用来和其他表建立联系
1.对子表(外键所在的表)的作用:子表在进行写操作的时候,如果外键字段在父表中找不到对应的匹配,操作就会失败
△以下情况创建外键会失败:
数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作 表结构 存在一个文件中 : 硬盘上 表数据 存在另一个文件中、内存中 索引(目录) 为了方便查找设计的一个机制 : 存储方式为索引+数据 表结构 ,数据的持久化存储 提供了具有提交、回滚和崩溃恢复能力的事务安全,支持外键。但是比起Myisam存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间。MySQL 5.5.5 之后,InnoDB 作为默认存储引擎. 存储方式为索引 数据 表结构 数据的持久化存储 ,有表级锁 不支持事务、也不支持外键,但访问速度快,对事务没有要求 存储方式为表结构,数据断电消失 查看MySQL重要引擎建表的时候可以指定引擎 一致性 n条语句的执行状态是一致的 commit; # 提交事务 解锁被锁住的数据,让他们能够被修改
行级锁 :只对涉及到修改的行加锁,利于并发的修改,但是对于一次性大量修改效率低下
△聚集索引/聚簇索引 : 叶子节点会存储整行数据 —— innodb的主键
△b+树 是为了更好的处理范围问题在b树的基础上有所优化
当数据库中存在很多条记录,例如几十万条,查询速度就成了一个问题
索引也需要占空间,如果我们有大量的索引,索引文件可能会占很多空间
1.对经常更新的表就避免对其进行索引,对经常用于查询的字段应该创建索引 1,创建表时,主键会默认带有索引 创建一个索引 索引名 从 表名 在哪个字段在创建一个视图时,只存放视图的定义,也就是动态检索数据的查询语句,并不存放视图对应的数据,在用户使用视图时才去求相对应的数据,所以视图称为‘虚表’ #三个部门:教学,销售,运营
0.建表book,并向表中插入数据 |