mysql数据库的高级操作(查询)

(1)实体与实体之间有3中对应关系,这些关系也需要存储下来,关系型数据库主要是存储关系
(2)在开发中需要对存储的数据进行一些处理,用到内置的一些函数
(3)视图用于完成查询语句的封装
(4)事务可以保证复杂的增删改查操作有效----在操作中去使mysql数据有效
关系介绍:
关系在数据库中是非常重要的,多个数据表之间是有关系的,表之间的关系可以通过某种属性进行对应,这样就可以使用这个关系进行对数据的查询
学生表的属性: id name
成绩表的属性: id score
科目表的属性:id title
成绩表中有id和分数,每一个分数都会对应多个名字,每一个分数也会对应多个科目,所以是1对多的关系,所以需要建立外键连接其他的表,成绩表中需要建立外键来连接学生表和成绩表

成绩表的创建语句如下:
create table scores(
id int primary key auto_increment,
stuid int,
subid int,
score decimal(5, 2)
)
外键
怎么保证关系列数据的有效性呢:可以通过外键约束进行数据的有效性验证,为stuid,subid添加外键约束。
create table scores(
id int primary key auto_increment,
stuid int,
subid int,
score decimal(5, 2)
foreign key (stuid) references students(id)
foreign key (subid) references subjects(id)
);

外键的级联操作
(1)在删除students表的数据时,如果这个id值在scores中已经存在,则会抛异常
(2)可以创建表时指定级联操作,也可以在创建表后在修改外键的级联操作
语法: alter table scores add constraint stu_sco foreign key(stuid)
外键操作主要是为了关联多张数据表。

把所有的表放到一起查询,并将结果显示在同一个结果集中
当查询结果来源于多张表时,需要使用连接查询,关键:找到表间的关系,当前的关系是:
students表的id------scores表的stuid
subjects表的id------scores表的subid

eg: select  students.name,subjects.title,scores.score  from  scores  inner join  students  on scores.stuid=students.id  inner  join  subjects on scores.subid=subjects.id;

结论: 当需要对有关系的多张表进行查询时,需要使用连接join

连接查询:
连接查询分类如下:
表A inner join 表B:表A与表B匹配的行为出现在结果中
表A left join表B:表A与表B匹配的行为出现在结果中,外加表A中独有的数据,未对应的数据使用null填充
表A right join 表B:表A与表B匹配的行为会出现在结果中,外加表B中独有的数据,未对应的数据使用null填充
在查询或条件中推荐使用 “表名.列名” 的语法,
如果多个表中列名不重复可以省略 “表名” 部分
如果表的名称太长,可以在表名后面使用‘as’简写名,为表起个临时的简写名称

内置函数
(1)字符串函数:对数据中的字符串进行操作
(2)数学函数:
–绝对值abs(n): select abs(-32)
–求m除以n的余数mod(m, n),同运算符%: select mod(10, 3); select 10%3–
–地址floor(n),表示不大于n的最大整数
–天花板ceiling(n),表示不小于n的最大整数
–求四舍五入值round(n, d) ,n表示原始,d表示小数位置,默认为0
–求x得y次幂pow(x,y)
–获取圆周率PI(),select rand()

(3)日期函数
用于查询日期
select data_format(‘2016-12-21’,‘%Y %m %d’)
当前日期:current_date() select current_date();
当前时间:current_time() select current_time();
当前日期和时间: select now();

视图: 对sql语句得一个封装,结果是以表的形式呈现
视图的意义:对于复杂的查询,在多次使用后,维护是一件非常麻烦的事情,定义视图本质就是对查询的一个封装----把查询的结果以一个新的表呈现
定义视图:create view 视图名 as (查询代码)
eg: create view 视图名 as select students.*, scores.score from scores inner join students on scores.stuid = students.id
------视图创建完毕之后,需要查询—和普通表的查询方式是一样的:
select * from 视图名

mysql中的事务:当一个业务逻辑需要多个sql完成时,如果其中某条sql语句出错,则希望整个操作都撤回,使用事务可以完成退回的功能,保证业务逻辑的正确性
需要记住:事务四大特性(ACID)
原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么都执行,要么都不执行
一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致
隔离性(Isolation):事务执行不受其他事务干扰,事务执行的中间结果对其他事务必须是透明的
持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障
事务的支持:表的类型是innodb或bdb类型

事务语句:
开启:begin 默认是开启的
提交:commit 需要手动操作
撤回:rollback 不需要实现sql语句的时候可以撤回操作
这个在python交互中会经常用到

查询的总结:
关系的存储:使用外键–>建立连接(多张表),查询的时候使用连接查询就可以
连接查询: 用于多张张之间的查询
内置函数
视图:用于对sql语句进行封装操作
事务:四性,保持业务逻辑的正确性

发布了129 篇原创文章 · 获赞 43 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/nbxuwentao/article/details/104435498