DBA 创建视图 创建存储过程 变量 MySQL视图 MySQL存储过程

准备集群环境:
一主多从  :  半同步复制   禁用自动删除中继日志文件
ssh秘钥对认证登陆:   56-->(51-55)   51<->55
所有数据库服务器 要给管理主机添加监控时的连接用户
grant  all on  *.*  to  root@"%"  identified by "123qqq...A";
在所有主机上安装mha软件依赖的perl软件包
 
配置高可用集群:
数据库服务器(51-56)
安装mha_node软件包
 
管理主机(56)
安装mha_node和mha_manager软件包
创建管理命令  
编写主配置文件 app1.cnf  (定义56主机本机的配置   指定数据库服务器)
                                         [server default]           [serverX]
 
创建vip地址切换脚本  chmod  +x  master_ip_failover
                                                     定义VIP地址
              VIP地址部署在那块网卡上  
 
测试配置文件:
masterha_check_ssh  --conf=/etc/mha_manager/app1.cnf
masterha_check_repl  --conf=/etc/mha_manager/app1.cnf
 
启动管理服务:
masterha_manager  --conf=/etc/mha_manager/app1.cnf
 
查看服务状态:
masterha_status  --conf=/etc/mha_manager/app1.cnf
 
测试集群:
1 客户端连接VIP地址访问数据库服务。能够存取数据。
 
2 测试高可用  
 
3 把坏掉的主库添加到集群里:运行数据库服务器   手动指定为当前主库的从库。在app1.cnf文件里添加主机信息   启动管理服务
+++++++++++++++++++++++++++++++++++
休息到  9:50
DBA2_day04
MySQL视图
 

先准备环境:导入一个表数据:

[root@host50 ~]# mkdir /mydata
[root@host50 ~]# chown mysql /mydata
[root@host50 ~]# vim /etc/my.cnf
[root@host50 ~]# systemctl restart mysqld
[root@host50 ~]# mysql -uroot -p123456


mysql> create database nsd;

mysql> create table user(name char(50),
    -> password char(2),
    -> uid int(2),
    -> gid int(2),
    -> comment varchar(160),
    -> homedir char(150),
    -> shell char(50));         视图不能创建索引)

 load data infile "/mydata/passwd" into table nsd.user fields terminated by ":" lines terminated by "\n";

mysql> alter table user  add id int(2) primary key auto_increment first;
基本使用:
创建视图?

create  view  视图名称 (字段名列表)   as    sql查询;
create view  视图名  as   SQL查询;
 查看创建视图具体命令:show  create   view  视图名;

查看视图:查看当前库下所有表的状态信息:show   table   status;

show  table    status   where   comment="view" \G;

使用视图:

查询记录:select   字段名列表    from    视图名   where  条件;

插入记录:insert  into  视图名(字段名列表)  values(字段值列表);

更新记录:update   视图名   set  字段名=值  where  条件;

删除记录:delete  from  视图名  where  条件;

删除视图:drop  view   视图名;


create view  v1                         (创建视图)
as  
select  name,uid,shell,homedir from user;
 
create view  v2(vname,vuid,vshell,abc)  
as  
select  name,uid,shell,homedir from user;
 
show tables;
 
 
drop view v1;
 
> create table  t1  select name,uid,shell from user limit 3 ;
 
> create  table  t2    
select name,uid,homedir,gid from  user limit 6;
 
 select  *  from  t1  left join  t2  on
t1.name=t2.name  and  t1.uid  = t2.uid;     (左连接查询)
 
 
create view v3 as  select  *  from  t1  left join  t2  on                     (字段名不能一样,得改名)
t1.name=t2.name  and  t1.uid  = t2.uid;
 
 
create view v3 as  select  t1.*  from  t1  left join  t2  on
t1.name=t2.name  and  t1.uid  = t2.uid;
 
休息到 11:05
 
创建视图时,给视图表里的字段定义别名。
create view v3  
as   
 select  t1.name as aname , t2.name as bname , t1.uid as auid , t2.uid as buid   from  t1 left join t2  on t1.uid=t2.uid; (不给表名取别名,就要写表名)
 
 
create view v4 as  select   
a.name as aname , b.name as bname , a.uid as auid , b.uid as  buid   from t1 a left join t2 b on a.uid=b.uid;  (给t1,t2表取别名,前面写别名就可以)
 重要选项说明

 创建视图已存在时,会替换已有的视图:create or replace view 视图名 as select 查询;
创建视图时,忽略已有的视图
create  view  v3 as select name,uid from user;
create or replace view  v3 as select name,uid from user;   (替换已有视图)
 

create table nsd.user(name char(50),
    -> password char(1),
    -> uid int(2),
    -> gid int(2),
    -> comment varchar(150),
    -> homedir char(160),
    -> shell char(50));

create table user2 select id,name,password,homedir from user where uid <=40;

 create view v6 as select * from user2 where id<=10 with check option;   (with check option支持检查选项)

mysql> show create table v6;

mysql> update v6 set id=10 where name="root";   (修改的值必须符合自己的条件,否者不行)
create  view  v3 as select name,uid from user  with check option;
 
 
with check option

重要选项说明(2)

local和cascaded关键字决定检查的范围
local  仅检查视图的创建条件。(仅检查当前视图的限制)
CASCADED  同时要满足基表的限制(默认值)
 
mysql> create table user2  select id,name,password,homedir from user  where uid <=40;
 
mysql>  select  * from user2;
 
mysql> create view  v6
    -> as
    -> select  * from  user2  where id<=10
    -> with check option;
 
update  v6  set  id=9 where name="root";
 
select  * from v6;
 
 
mysql> create view  v7  
    -> as
    -> select name,id,password from user2 where id<=18;
select  * from  v7;
 
create view  v17  as
select  name,id,password from v7 where  id >=10     (既要满足基表又要满足视图)
with  check option;
select  * from  v17;
update v17 set id=20 where name="rpc";
update v17 set id=15 where name="rpc";
select  * from  v7;
select  * from  v17;
select  * from  user2;
休息到 15:05
 
create view  v18  as
select  name,id,password from v7 where  id >=10
with  local  check option;
 
update v18 set id=20 where name="rpc";
select   * from v18;
select   * from v7;
select   * from user2;
++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++
MySQL存储过程: MySQL服务里的脚本

创建存储过程:

语法格式:mysql>delimiter  //

create   procedure  名称()      例:create procedure  p1()               (存储过程名小括号里没参数可以不写,有参数必须写)

begin                                                 begin   (后面开始写功能代码)

功能代码                                    select * from p1  库名。表名  where  name="root";

end                                           end

//    结束存储过程                       //

delimiter;                                  delimider

  注:(delimider关键字用来指定存储过程的分隔符(默认为;)                                              

若没有指定分隔符,编译器会把存储过程当sql语句进行处理,从而执行出错
 
delimiter //
create procedure p1()
begin
select count(name) from db9.user;
end
//
delimiter ;
 
 查看存储过程

方法1:show  procedure  status;

方法2:select db,name,type  from  mysql.proc  where name="存储过程名";
mysql> select  db,name,type,body  from mysql.proc  
 
mysql> select  db,name,type,body  from mysql.proc where name="p1"\G;
 
call  p1;
call  p1();
 
 调用/删除存储过程

调用:call   存储过程名();

删除存储过程:drop  procedure  存储过程名;
mysql> drop procedure p1;
 
 存储过程优点:1,提高性能  2,可减轻网络负担   3, 可以防止对表的直接访问  4, 避免重复编写sql操作
 存储过程介绍:存储过程,相当于是mysql语句组成的脚本,指的是数据库中保存的一系列sql命令的集合,

可以在存储过程中使用变量,条件判断,流程控制等。
delimiter //
create procedure p1()
begin
    select count(name)  from user where shell="/bin/bash";       (统计/bin/bash/个数)
end
//
delimiter ;
 
call  p1;
休息到 16:00
MySQL变量
系统环境 :  
会话变量  全局变量    
show session variables;  show global variables;  

调用局部变量时,变量名前不需要加@

会话变量,全局变量:会话变量和全局变量叫系统变量,使用set命令定义全局变量的修改回影响到整个服务器,但是对会话变量的修 改,  只会影响当前的会话。  select  @@hostname;

用户变量:在客户端连接到数据库服务的整个过程都是有效的。当当前连接断开后所有用户变量失效。

定义set  @变量名=值;   输出select  @变量名;

局部变量:存储过程中的begin/end。其有效范围仅限于改语句块中,语句块执行完毕后,变量失效。

declare专门用来定义局部变量。

show  global  variables;(查看全局变量)

show  session  variables;(查看会话变量)

set  session  sort_buffer_size=4000; (设置会话变量)

show  session  variables  like  "sort_buffer_size"; (查看会话变量)

show  global  variables  like  "%关键字%";(查看全局变量)

select  max(uid)   into  @y  from  user;(使用sql命令查询结果赋值)
用户变量:
mysql> set  @name="yaya";    (用户自定义变量,直接赋值)
mysql> select  @name;
 
局部变量:在存储过程里有效
declare  @x=9;
 
 
 
set  @x  =  9;
delimiter //
create procedure p3()
begin
         declare  x int  default  99;                  (局部变量)                  局部变量不需要加@,不然变成自定义变量
         declare  name char(10);
         set name = "bob";
        select  x ,  name;                        局部变量只能用于begin和end之间
end
//
delimiter ;
call  p2;
select @x;
++++++++++++++++++++++++++++++++++
存储过程参数类型  in   out    inout
 
 

 参数类型:

调用参数时,名称前也不需要加@:create   procedure  名称(类型  参数名  数据类型 ,类型 参数名 数据类型)
 

关键字          名称                              描述

in            输入参数             作用是给存储过程传值,必须在调用存储过程时赋值,在存储过程中参数的值不允许修改;默认类型是in.

out         输出参数               该值可在存储过程内部被改变,并可返回。

inout       输出参数/输入        调用时指定,并且可被改变和返回

delimiter //
create procedure p4( in shellname char(20) )    (定义in类型的参数变量shellname)
begin
       select  count(name)  from user where  shell=shellname;      
end
//
delimiter ;
 
call  p4();    (不赋值不能)
 
call  p4("/bin/bash");   (调用过程给值)
 
set  @x =  "/sbin/nologin"
call  p4(@x);
 

 

 

休息到17:10
delimiter //
create procedure p7(out   number  int(2))      (定义out类型参数为number)
begin
       set  number = 9;
       select  number;
       select count(id) into number  from user;
       select  number;
end
//
delimiter ;
 
call  p7(8);
select @w;
call  p7(@w);
 
delimiter //
create procedure p2(shellname char(20))
begin
         select count(shell) from user  where shell=shellname;  
end
//
delimiter ;
 
call p2("/bin/bash");
call p2("sync");
 
 
++++++++++++++++++++++++++
drop procedure if exists say;                   proceduer(过程)       exists(存在)
delimiter //
create procedure say(in  bash  char(10),in nologin char(15),out  x  int(2), out  y  int(2))
begin
         declare  z  int(2) ;
         set  z  = 0;
         select  count(shell)  into   x  from user where  shell=bash;
         select  count(shell)  into   y  from user where  shell=nologin;
         set  z = x  + y;
         select  z;
end
//
delimiter ;
 
 
 
 
 
 
delimiter //
create procedure p1()
begin
           
end
//
delimiter ;
 
 
流程控制
DBA2_DAY05  数据分片   50   51  52  53   
 
游戏网站:
 
统计在线用户量
统计新注册的游戏账号
 
DBA   
MySQL>   
 
 
 
 
 
 
 
 
 
 
 
 
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值