找回密码
 立即注册

推荐阅读

  • 便民服务
  • 关注我们
  • 社区新手

数据库的索引.多视图.储存过程

[复制链接]
索引
作用:可以利用索引快速访问数据中的特定信息。
重点:索引是一种数据结构

普通索引:最基本的索引,没有任何限制
create index aa on emp(name);  ==>为emp表name字段创建索引aa
create index aa on emp(name,age);  ==>为emp表多个字段name,age字段创建索引aa
show index from emp;                 ==>查看当前表的索引
alter table emp drop index bb;    ==>删除emp表的索引bb

唯一索引:对应的字段值必须唯一,允许有空值
create unique index a1 on emp(sid);  ==>创建索引
alter table emp drop index a1;    ==>删除emp表的索引a1

主键索引:主键约束相辅相成(不允许有空值)
注:添加主键约束就是添加了主键索引,添加了主键索引也就添加了主键约束。
alter table 表 drop primary key;   ==>删除主键约束
show index from emp;   ==>查看emp表的索引
alter table emp add primary key(sid);     ==>emp表sid给添加主键约束

视图:(基础表与视图相互影响)
视图的特点:
-视图是由基本表产生的虚表
-视图的更新和删除会影响基础表
-基础表的更新和删除也会影响到视图

视图命令
create view 视图名 as (select 字段,字段,from 表名); 创建视图
show tables;  查看视图
update 表名 set name="zhangsan" where sid=1789; ==>修改源表数据
update 视图名 set name="张三" where  name="zhangsan"; ==>修改视图数据
drop view 视图名;    ==>删除视图

数据库语言DL .DML 重点
DDL:数据库定义语言(表和表结构操作)
create
alter table
drop

DML:数据库操作语言(表数据的操作)
insert into  增
delete        删
update       改
select        查

数据库的约束
主键约束-primary key
自增长约束-auto_increment
非空约束-noy null
默认值约束-default     ==>前四种都是对表结构的约束
外键约束-foreign key   ==>表与表之间的约束


表1:姓名  年龄 身份证号  语文  英文 数学
表2:姓名  年龄 身份证号  语文  兴趣爱好

外键的主要作用是:保持数据的一致性、完整性
create table dcs1(id int(4)PRIMARY key,name varchar(10)) ENGINE=INNODB ;
show CREATE table dcs1; ==》查看dcs1表创建语句
create table dcs2(sid int(4)primary key,sname varchar(10),CONSTRAINT fk_sid FOREIGN key(sid)REFERENCES dcs1(id))ENGINE=INNODB;

insert into dcs1 VALUES(1,"xiaoliu"),(2,"xiaoli");
INSERT into dcs2 VALUES(1,"xiaowang")(3,"xiaowang");

ALTER TABLE dcs2 drop FOREIGN key fk_sid; ==》删除外键

主表一般存放基础数据
如果主表不存在数据,在任何子表是无法插入和该数据相关的任何数据
如果要删除主表的数据,需要先删除与主表相关的任何子表的数据



存储过程

存储过程是完成特定功能的sql语句集合。通过编译后存储在数据 库中,通过指定的存储过程名称调用执行它。

1、单分支 判断语句
if 条件 THEN
  执行sql
else
执行sql
end if

多分支 (有多少的if 就需要写多少个end if)
if 条件 THEN
执行sql
else if 条件 THEN
执行sql
else if 条件 THEN
执行sql
.............
else执行sql
end if
end if
end if


while 语句的格式:
while 条件 do
  执行循环体(sql)
end while;

注意: 什么时候进入循环:当条件成立时,进入循环
什么时候退出循环:当条件不成立时,退出循环


drop PROCEDURE if EXISTS dcs9;#如果存在dcs9这个存储过程则删除
create PROCEDURE dcs9(n int)#创建名叫dcs9的存储过程,n是一个变量 int是数据类型
BEGIN#存储过程开始
DECLARE i int(5)default(select count(*) from mm);#声明变量i的默认值就是表行数
/*drop table if EXISTS mm;#如果mm表存在则删除,为了增强代码的健壮性
create table mm(id int(5)PRIMARY key auto_increment,score int(20));
insert into mm values(1,89),(2,78);
insert into mm values(3,82),(4,58);
insert into mm values(5,64),(6,75);
insert into mm values(7,99),(8,88);*/
/*select * from mm;
select * from mm WHERE id=n;#带参数查询
*/
/*#单分分if语句
if n=0 THEN
   select count(*) from mm;
ELSE
  select * from mm order by score desc;
end if;*/
/*#多分支if判断语句
if n=0 then
  select  count(*) from mm;
else if n>0 and n<=i then
  select * from mm order by score desc;
else if n>i then
  select max(score)from mm;
else
  select * from mm;
end if;
end if;
end if;
*/
#while循环
if n=0 then
  select count(*) from mm;
else if n>0 and n<=i then
  select * from mm order by score desc;
else
  while n>i do
  insert into mm(score)values(concat(5,i));
  set i=i+1;
  end while;
end if;
end if;
END#存储过程结束

call dcs9(10);#调用存储过程



分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册