mysql入门(四)

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 `表名`;

 

存储过程(procedure)

-- 语法:
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] `存储过程名`//

(5).局部变量

语法: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,'小宋')//

(6)全局变量

变量的前面加上一个@ ,可以在函数外设置。

-- 设置全局变量
set @name = '小马'//

-- 打印全局变量
select * from stuinfo where sname=@name//

(7).系统常量

系统常量是两个@@,一种是下划线连接的两个或多个单词

-- 打印系统版本号
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)//

 

posted @ 2020-03-28 20:04  大-道-至-简  阅读(208)  评论(0编辑  收藏  举报