mysql入门(四)
1.视图是一张虚拟表,它表示一张表的数据或多张表的数据;
2.视图是建立在实体表结构的基础上的;
3.视图中没有数据的,只有表结构,数据的来源基于实体表(获取);
4.一张表可以创建多个视图,一个视图可以引用多张表。
(1).创建视图
create view `视图的名`
as
查询sql语句;
create view stuinfo_ as select * from stuinfo;
(2).查询视图中的数据
select * from stuinfo_;
(3).修改视图
视图就是为了让查询边的更加简单,常用;视图只能查询。
alter view stuinfo_ as select * from stuinfo natural left join stumarks;
(4).查看所有视图
show tables;
(5).查看视图信息
show create view stuinfo_\G
(6).查看视图的结构
desc stuinfo_;
(7).删除视图
drop view stuinfo_;
mysql的事务操作
1.事务是一个不可拆分工作单元;
2.事务作为一个整体向mysql系统提交(针对多条sql语气,要么一起执行成功,要么一起失败);
3.事务不可以嵌套。
(1).事务的特性
1.原子性:不可被拆分
2.一致性:要么一起执行成功,要么一起失败
3.隔离性:相互独立
4.永久性:一旦执行成功,不能被修改(事务执行成功,本次事务执行完毕)
-- 事务需要开启 start transaction; -- 在事务当中写行为sql语句,增删改 insert into stuinfo values(null,'tom',2,18,'伦敦'); insert into stumarks set sid=14,ch=100,ma=90; -- 事务需要提交 成功->提交 commit; -- 如果失败 失败->回滚 rollback;
注意:事务只能在innodb引擎的表中取使用,myisam不支持事务
(2).自动提交事务
-- 查看自动提交事务是否开启(其它语言调用)(默认开启) show variables like 'autocommit'; -- 开启或关闭 set autocommit = 1|0;
mysql的索引操作
优点:mysql的索引增加了查找的速度。
缺点:1.需要更多的空间来存储索引;2.myisam的索引比innodb的要多(myisam管查询,innodb管理动作)。
(1).创建索引的原则
适合:
1.用于频繁查找的列;
2.用于条件判断的列;
3.用于排序的列。
不适合:
1.列中的数据不多(少见,null);
2.表中的数据很小。
(2).索引的类型
create index `索引名` on `表名`('字段'); alter table `表名` add index `索引名`('字段');
1.主键索引(primary key)
唯一性,不能为空。
2.唯一索引(unique)
唯一性。
3.全文索引(fulltext key)
myisam 支持全文索引,但是innodb可以创建全文索引(不能使用)。
全文索引是配合like使用的,在模糊查询的时候增加查询的速度。
4.普通索引(index)
除了提升查找速度,几乎无作用
【补充】:联合索引
-- 将多个字段联合成一个索引,联合索引在同时使用所有的定义字段时才会触发 create index `index` on `stuinfo`('age,sname,city'); -- 联合索引的触发方式之一,一起查询 select age,sname,city from stuinfo ;
(3).删除索引
drop index `索引名` on `表名`;
-- 语法: create procedure 存储过程名(参数,....) begin sql语句; end//
注意:存储过程是保存sql语句的,sql语句需要分号来被保证完整性,索引结束符必须要更换
/* 更改结束符 ,以前的sql结束符都是封号,现在可以改成除封号以外的符号 临时命令,一次性命令,(只要cmd关闭再重新打开就失效了) */ -- 将封号结束符改成了// delimiter //
(1).创建简单的存储过程
-- procedure 中只有一句sql,begin和end可以省略 create procedure pro_1() select * from stuinfo; // -- 调用:procedure是一个特殊的函数,使用call关键字来调用 call pro_1()//
创建包含多条sql语句的procedure
create procedure pro_2() begin select * from stuinfo; select * from stumarks; end// call pro_2()
(2).procedure的输入输出参数
特殊的存储过程,没有return,通过'输入输出参数'来实现。
1.输入参数in(默认in)
2.输出参数out
3.输入输出参数inout
(3).创建带有参数的存储过程
procedure中参数是需要定义数据类型的。
create procedure pro_3(in id int) begin select * from stuinfo where sid=id; end// call pro_3(10)//
(4).删除存储过程
drop procedure [if exists] `存储过程名`//
语法:declare 变量 数据类型 [初始值]
通过select....into... 或者 通过 set 来重新赋值
-- 创建一个procedure查询学生的姓名(sname)和年龄(age),id外部传入 create procedure pro_4(id int) begin declare name varchar(10); declare agee tinyint unsigned; -- 这一句sql只是赋值 select sname,age into name,agee from stuinfo where sid=id; -- 因为上面的语句只是赋值,不会输出,所以使用下面语句让它来输出 select name,agee from dual; end// call pro_4(10)//
通过set来设置
-- 计算自己的周岁 create procedure pro_6(in num1 year,in num2 year,in name char(32)) begin -- 先设定一个num局部变量 declare num int default 0; set num = num2-num1; select name,num from dual; end// call pro_6(1999,2019,'小宋')//
变量的前面加上一个@ ,可以在函数外设置。
-- 设置全局变量 set @name = '小马'// -- 打印全局变量 select * from stuinfo where sname=@name//
系统常量是两个@@,一种是下划线连接的两个或多个单词
-- 打印系统版本号 select @@version from dual// -- 打印当前的时间日期 select current_timestamp from dual//
系统命令 | 作用 |
---|---|
@@version | 版本号 |
current_date | 当前的时间 |
current_time | 当前的时间 |
current_timestamp | 当前的时间日期 |
(8)带有输出的参数
关键字:out
create procedure pro_7(in num int,out result int) -- result不参与计算,只是用来做返回的 begin set result=num*num; end// call pro_7(6,@result)// -- @result用来接收输出
(9)带有输入和输出功能的参数
关键字:inout
create procedure pro_8(inout num int) begin set num=num*num; end// -- 先定义全局变量,用来给函数接收参数 set @num = 8// call pro_8(@num)//