设为首页 收藏本站
查看: 987|回复: 0

[经验分享] java 从零开始,学习笔记之基础入门(二十二)

[复制链接]

尚未签到

发表于 2016-11-10 05:19:19 | 显示全部楼层 |阅读模式
  注释_运算符_函数
  注释
  --单行注释
  /*
  *多行注释
  *
  *
  */
  
  --定义局部变量
  --declare 局部变量名类型[(长度)] =默认值;
  --给局部变量赋值
  -- set @局部变量名=
  --通过select语句给局部变量赋值
  declare
  @name varchar(32);
  begin
  select @name=authorNamefrom tb_author where authorId= 1;
  print '取到的值:'+@name;
  end;
  
  运算符
  declare
  @n int,
  @m int;--定义多个变量变量与变量之间用','分开
  begin
  set @n=3;
  set @m=5;
  print @n+@m;
  end;
  
  -函数
  --定义一个整型的值,我将其装换成字符串
  declare
  @k int ,
  @kk varchar(32)
  set @k=12;
  begin
  set @kk=convert(varchar,@k);
  print '转换'+@kk;
  end;
  
  
  --采用无名快的形式,tb_author表中的某一条记录进行更新
  --更新的数据自己设定
  select * from tb_author;
  
  declare
  @aid int,
  @aname varchar(32),
  @atel varchar(32)
  begin
  set @aid=2;
  set @aname='java1201';
  set @atel='9999999';
  update tb_author set authorName=@aname,authorTel=@atelwhere authorId=@aid
  print'更新完毕!';
  
  end;
  
  
视图
  --视图是一张虚拟的表,在数据库中不具体的存视图,它可以代表的是一个原表,操作视图
  --就是操作原表
  --删除视图不删除原表
  --视图的创建一般用于对表的查询或者更新可以隐藏表的具体字段
  --创建视图的语法
  --create view 视图名(列名,列名...)as sql语句;
  --tb_author表创建一个查询的视图
  create view v_authoras select * from tb_author;
  --查询视图就显示作者表中的所有信息创建的v_authotr视图代表的就是查询tb_author表的所有记录
  select * from v_author;
  
  --指定视图的列名
  create view vv_author1(authorId,authorName,authorTel)as select * from tb_author;
  select *from vv_author1;
  
  --以下三种情况必须指定视图的列名
  --子函数查询的是一个表达式不是单纯的属性
  create view v_author_count(num)as select count(*) from tb_author;
  --多表查询中查询语句有多个同名的列,那么创建视图必须要有视图
  --需要在视图中为某一列取新名称则需要加入属性名
  --删除视图
  --drop view 视图名称
  
  --通过对视图的插入数据往tb_author表中插入一条数据
  insert into v_authorvalues('cw','123456');
  --视图是不能存储插入的数据的,最终转变成对原表的插入
  select *from tb_author;
  select *from v_author;
  --视图一般在关系型数据库中主要用作查询操作,不推荐使用更新操作(CRUD);
  

  事务
  --再对数据库操作的时候,可以把一个或者多个操作看做是一个事务
  --事务在开启之后,在事务中所作的操作,要么全部成功,要么全部失败
  --如果全部成功则提交事务,如果其中有某一个操作失败,则事务回滚
  
  --开启事务: begein transaction
  --提交事务: commit transaction
  --回滚事务: rollback transation
  
  --事务的四种特性:
  --原子性
  --一致性
  --隔离性
  --永久性
  
  --tb_author表中插入一条记录
  --在往插入之前,对插入的数据进行判断,判断是否是'周易',如果是周易则事务回滚,不是则事务提交
  
  begin transaction
  --定义一个变量
  declare
  @aname varchar(32);--定义一个字符串的变量
  set @aname='周易';--给局部变量赋值
  if @aname=''
  begin
  print '保存没成功';
  rollback transaction;--回滚事务,数据没有真正的保存到数据库中
  end;
  else
  begin
  insert into tb_authorvalues (@aname,'12345678');
  commit;--提交事务,数据真正的保存到数据库中
  print '保存成功';
  end;
  
  select * from tb_author;
  
  
  

  存储过程
  --存储过程是为了完成特定的操作而汇集的多条sql程序
  --存储过程创建之后,编译之后存储在数据库中,那么存储过程只需要一次编译就可以了
  --第二次使用只需要调用编译后的存储过程即可
  --为什么要使用存储过程以及使用存储过程的好处?
  --1 可以使用更少网络的带宽,减少响应时间
  --2 可以提高数据的查询效率
  --创建一个存储过程的语法格式
  --create procedure/proc 存储过程名as
  --定义变量
  --begin
  --执行操作
  --end
  
  --存储过程的分类
  --无参的存储过程
  --创建一个无参的存储过程,用来查询tb_author这个表
  create procedure selectAuthoras
  begin
  select * from tb_author;
  end;
  --调用无参的存储过程
  exec selectAuthor;
  execute selectAuthor;
  --含输入参数的存储过程
  --根据输入参数Id返回id所在的那条记录
  create proc selectAuthorById @idint
  as
  begin
  select *from tb_authorwhere authorId=@id;
  end;
  --调用含有输入参数的存储过程
  exec selectAuthorById 5;
  
  --含输出参数的存储过程
  --返回表中记录的条数
  create proc getcount @outcountint output
  as
  begin
  select @outcount=count(*)from tb_author;
  end;
  
  --调用含有输出参数的存储过程
  --必须定义一个变量来接收输出的参数
  declare
  @n int
  begin
  exec getcount @n output;
  print @n;
  end;
  
  --含输入输出参数的存储过程
  --根据authorid返回姓名和电话
  create proc inandout @idint,@name varchar(32) output,@telvarchar(32) output
  as
  begin
  select @name=authorName,@tel=authorTelfrom tb_author where authorId=@id;
  end;
  --调用含有输入参数和输出参数的存储过程
  declare
  @name varchar(32),
  @tel varchar(32)
  begin
  exec inandout 3 ,@nameoutput ,@tel output;
  print @name +' '+@tel;
  end;
  
  
  --分页的存储过程
  --tb_author表进行分页
  --分页的sql语句authorId authorName authorTel
  select top 5 * from tb_author where authorId not in (
  select top((2-1)*5) authorIdfrom tb_author
  ) order by authorId desc
  
  --所传递的参数
  --每页显示记录的条数作为参数
  --当前页数作为输入参数
  --输出参数是查询到的多条记录如果要返回多条记录则采用数据库的游标
  
  create proc fenye @pagenumint , @pagesize int
  as
  --定义一个变量为表中总的记录条数
  
  declare
  @maxcount int,--最大的记录条数
  @maxnum int --最多能分的页数
  begin
  --取到最大的记录条数赋值给
  select @maxcount=count(*)from tb_author;
  print @maxcount;
  --求最大的页数
  if @maxcount%@pagesize=0
  set @maxnum=@maxcount/@pagesize;
  else
  set @maxnum=@maxcount/@pagesize+1;
  print @maxnum;
  
  --判断输入的页数如果小于则将页数赋值为
  --如果大于最大页数则将页数赋值成最大页数
  if @pagenum<1
  set @pagenum=1;
  
  if @pagenum>@maxnum
  set @pagenum=@maxnum;
  
  print @pagenum;
  
  select top (@pagesize) *from tb_author where authorIdnot in (
  select top((@pagenum-1)*@pagesize) authorIdfrom tb_author
  )
  end;
  
  drop proc fenye;
  
  exec fenye 1,5;
  发器
  
  --什么是触发器
  --触发器是对表进行插入删除修改时自动执行的过程
  --触发器是在对表进行操作的时候自动执行,不需要手动执行
  --触发器是定义在一个表上与表相关联
  --触发器是一个事务也可以按照条件进行事务的回滚与提交
  
  --为什么要使用触发器
  --实例:现某公司有一个系统,设计一个在职员工表,和一个离职员工表,那么当员工A申请离职
  --那么在公司的这个系统中在职员工表中就应该删除离职的这个用户,并且在离职表中添加离职
  --的这个用户,使用触发器实现这一过程,当在职表中删除一条记录,触发器自动的将删除的员工自动
  --添加到离职表中去,这样可以保证数据的一致性.
  
  --触发器的类型
  --insert触发器
  --delete触发器
  --update触发器
  
  --触发器的语法格式
  create trigger 触发器的名称on 表名
  [WITH ENCRYPTION]
  for [insert],[delete],[update]
  as
  begin
  
  end;
  --在职员工表tb_on_people(pid(int)(编号),pname(varchar)(姓名),ptel(varchar)(电话),page(int))(年龄)
  --离职员工表tb_off_people(pid(int)(编号),pname(varchar)(姓名),pworkage(int))(工作年限);1998-2
  create table tb_on_people(
  pid int identity(1,1),
  pname varchar(32)not null,
  ptel varchar(32)not null,
  page int,
  pinwork varchar(32)not null,
  primary key(pid)
  )
  create table tb_off_people(
  pid int,
  pname varchar(32)not null,
  pworkage int
  )
  --往在职表中插入条记录
  insert into tb_on_peoplevalues('sbb','123456',20,'2011-7-1');
  insert into tb_on_peoplevalues('cw','654321',22,'2010-7-1');
  insert into tb_on_peoplevalues('wm','987654',18,'2011-8-1');
  --在在职员工表上创建delete触发器,当对在职员工表进行删除操作时,会自动的出发删除触发器将
  --删除的信息插入到离职员工表中去
  create trigger peopleouton tb_on_people
  for delete
  as
  declare
  @id int,
  @name varchar(32),
  @inwork varchar(32),
  @worktime int
  begin
  --deleted表中取出对应的数据
  select @id=pid,@name=pname,@inwork=pinworkfrom deleted;
  set @worktime=datepart(yyyy,convert(varchar,getdate()))-datepart(yyyy,@inwork);
  
  insert into tb_off_peoplevalues(@id,@name,@worktime);
  end;
  --deleted
  --当执行删除的触发器的时候,会自动的在内存当中创建一个deleted表来存放删除的数据
  --我们可以从这个deleted表中取出删除的数据,当触发器执行完成,就自动的删除deleted
  --deleted表中的字段和你删除数据的表的字段一致
  --inserted
  select * from tb_off_people;
  select * from tb_on_people;
  drop table tb_on_people;
  drop table tb_off_people;
  delete from tb_on_peoplewhere pid=2;
  
  --insert 触发器
  --如果是insert触发器,对某一张表新插入的数据会保存在inserted表中
  --那么我们就可以在调用insert触发器的时候从inserted表中取出新插入的数据
  --现在对在职员工表进行操作,对插入的数据中年龄进行限制,限制年龄必须大于岁
  --否则插入不成功给个提示信息
  create trigger checkPeopleAgeon tb_on_people
  for insert
  as
  declare @age int;
  begin
  --insert表中取出插入的age,并赋值给@age
  select @age=pagefrom inserted;
  if @age<18
  begin
  --事务回滚
  rollback;
  print '你还忒嫩了';
  end;
  else
  begin
  --事务提交
  commit;
  end;
  end;
  
  insert into tb_on_peoplevalues('战神','0000000',12,'2012-2-1');
  select * from tb_on_people;
  
  --更新触发器
  --分别从insert表和deleted表中取出更新前和更新后的数据显示出来
  create trigger updatePeopleon tb_on_people
  for update
  as
  declare @id int,@namevarchar(32),@ageint ,@tel varchar(32),@workvarchar(32)
  begin
  select @id=pid,@name=pname,@tel=ptel,@age=page,@work=pinworkfrom deleted;
  select pid,pname,ptel,page,pinworkfrom inserted;
  print @id;
  print @name
  print @tel
  print @age
  print @work
  end;
  --更新将id=2的记录更新
  update tb_on_people set pname='张三',ptel='10086',page=30,pinwork='1970-1-1'where pid=2;
  
  

  多表查询练习
  
  
  --用户表
  --表名tb_user
  --用户编号uid int主键自增长
  --用户姓名uname varchar(32) not null
  --用户密码upass varchar(32) not null
  
  
  --角色表
  --表名tb_role
  --角色编号rid int主键自增长
  --角色名称rname varchar not null
  
  
  --权限表
  -- 表名tb_qx
  -- 权限编号qid int主键自增长
  -- 权限名称 qname varchar not null
  
  
  --用户角色表
  --表名tb_user_role
  --用户角色编号urid int主键自增长
  --用户编号 uid int外键关联用户表的主键
  --角色编号 rid int外键关联角色表的主键
  
  
  --角色权限表
  --表名tb_role_qx
  --角色权限编号rqid int主键自增长
  --角色编号rid int外键关联角色表的主键
  --权限编号qid int外键关联权限表的主键
  
  create table tb_user(
  uid int identity(1,1),
  uname varchar(32)not null,
  upass varchar(32)not null,
  primary key(uid)
  )
  
  create table tb_role(
  rid int identity(1,1),
  rname varchar(32)not null,
  primary key(rid)
  )
  
  create table tb_qx(
  qid int identity(1,1),
  qname varchar(32)not null,
  primary key(qid)
  )
  
  create table tb_user_role(
  urid int identity(1,1),
  uid int ,
  rid int,
  primary key(urid),
  foreign key(uid)references tb_user,
  foreign key(rid)references tb_role,
  )
  
  create table tb_role_qx(
  rqid int identity(1,1),
  rid int ,
  qid int ,
  primary key(rqid),
  foreign key(rid)references tb_role,
  foreign key(qid)references tb_qx,
  
  )
  
  --往用户表中插入数据
  insert into tb_uservalues('admin','admin');
  insert into tb_uservalues('es','es');
  insert into tb_uservalues('pom','pom');
  insert into tb_uservalues('pa','pa');
  insert into tb_uservalues('ts','ts');
  
  --往角色表中插入数据
  insert into tb_rolevalues('管理员');
  insert into tb_rolevalues('boss');
  insert into tb_rolevalues('farmer');
  
  --往权限表中插入数据
  insert into tb_qxvalues('add权限');
  insert into tb_qxvalues('delete权限');
  insert into tb_qxvalues('select权限');
  insert into tb_qxvalues('update权限');
  insert into tb_qxvalues('login权限');
  
  select * from tb_user;
  select * from tb_role;
  select * from tb_qx;
  select * from tb_user_role;
  select * from tb_role_qx
  --admin赋一个管理员权限
  
  declare
  @uid int,
  @rid int
  begin
  select @uid=uidfrom tb_user where uname='admin';
  select @rid=ridfrom tb_role where rname='管理员';
  insert into tb_user_role(uid,rid)values(@uid,@rid);
  end;
  
  --给管理员赋权限表中所有功能
  insert into tb_role_qx(rid,qid)values(1,1);
  insert into tb_role_qx(rid,qid)values(1,2);
  insert into tb_role_qx(rid,qid)values(1,3);
  insert into tb_role_qx(rid,qid)values(1,4);
  insert into tb_role_qx(rid,qid)values(1,5);
  
  --如果一个用户是管理员角色那么此用户有没有增删改查登陆权限
  --查询admin用户拥有的角色
  select rname from tb_rolewhere rid in(
  select rid from tb_user_rolewhere uid in(
  select uid from tb_userwhere uname='admin'
  )
  )
  
  
  
  --查找角色为管理员的所有用户
  select uname from tb_userwhere uid in(select uidfrom tb_user_role where ridin (select ridfrom tb_role where rname='管理员'))
  --查找用户为admin的所有权限
  select qid from tb_role_qxwhere rid =1
  select uid from tb_user_rolewhere rid=1
  select uname from tb_userwhere uid=1
  
  select qname from tb_qxwhere qid in(select qidfrom tb_role_qx where ridin (select ridfrom tb_user_role where uidin (select uidfrom tb_user where uname='admin')))
  --查找拥有增加权限的所有用户
  select uname from tb_userwhere uid in(select uidfrom tb_user_role where ridin (select ridfrom tb_role_qx where qidin (select qidfrom tb_qx where qname='add权限')))
  --查找拥有增加权限的所有角色
  select rname from tb_rolewhere rid in (select rid from tb_role_qxwhere qid in (select qid from tb_qxwhere qname='add权限'))
  
  
  --为用户admin增加一个权限
  
  --为用户admin增加一个角色
  declare
  @uid int,
  @rid int
  begin
  select @uid=uidfrom tb_user where uname='admin';
  select @rid=ridfrom tb_role where rname='boss';
  insert into tb_user_role(uid,rid)values(@uid,@rid);
  end;
  --为管理员角色增加一个权限
  
  --增加一个用户,并赋给它所有的权限
  insert into tb_user(uname,upass)values ('mm','mm');
  declare
  @uid int,
  @rid int
  begin
  select @uid=uidfrom tb_user where uid=6;
  select @rid=ridfrom tb_role where rid=1;
  insert into tb_user_role(uid,rid)values (@uid,@rid);
  end;
  
  
  
  
  
  --移除一个用户的某一项权限
  declare
  @uid int,
  @rid int
  begin
  select @uid=uidfrom tb_user where uid=5;
  select @rid=ridfrom tb_role where rid=3;
  insert into tb_user_role(uid,rid)values (@uid,@rid);
  end;
  
  declare
  @rid int ,
  @qid int
  begin
  select @rid=ridfrom tb_role where rid=3;
  select @qid=qidfrom tb_qx where qid=1;
  insert into tb_role_qx(rid,qid)values (@rid,@qid);
  end;
  
  --移除用户的角色
  declare
  @uid int
  begin
  select @uid=uidfrom tb_user where uname='ts';
  delete from tb_user_rolewhere uid=@uid;
  end;
  
  --移除一个角色的所有权限
  declare
  @rid int
  begin
  select @rid=ridfrom tb_role where rname='farmer';
  delete from tb_role_qxwhere rid=@rid;
  end;
  --移除用户的所有权限
  declare
  @uid int
  begin
  select @uid=uidfrom tb_user where uname='admin'
  delete from tb_user_rolewhere uid=@uid;
  end
  
  
  
  select * from tb_user;
  select * from tb_role;
  select * from tb_qx;
  select * from tb_user_role;
  select * from tb_role_qx
  
  delete from tb_userwhere uid=8

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-298046-1-1.html 上篇帖子: SQL Server学习笔记8之--关于OVER子句 多属性的比较 PIVOT 聚合问题 下篇帖子: SQL Profiler工具简介
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表