找回密码
 立即注册
本帖最后由 武汉18期-袁福平 于 2022-8-28 17:21 编辑


索引:一个索引是存储在表中的数据结构,索引在表的列明上创建,缩索引中包含了一个列值,这些值保存在一个数据结构中;数据库使用索引的方式与使用书的目录很相似:通过搜索索引找到特定的值,软和指针到达包含该值的行。
重点:索引是一种数据结构
索引的作用:可以利用索引快速访问数据库中的特定信息
普通索引
show index from ee;:查看索引
create index xiaoyuan on ee(sid);:为ee创建一个xiaoyuan的索引
create index xiaoyuan on ee(sid,name);:创建多个索引
alter table ee drop index xiaoyuan;:删除索引
唯一索引(对应字段的值必须是唯一的,但允许有空值)
create unique index aa on ee(sid);:创建唯一索引

主键索引:和主键约束相辅相成
注:添加一个主键约束就是添加主键索引,主键索引就是主键约束
alter table ee drop primary key;
show index from ee;
desc ee;


什么是视图:视图是一个虚拟的表,它不在数据库中以存储数据的形式保存,是在使用视图的时候动态生产
视图的特点
1.视图是由基本表的虚表
2.视图的更新和删除会影响到基本表
3.基本表的更新和删除也会影响到视图
create view dcs as(select sid,name,age from ee);创建视图
select * from dcs;
update dcs set name='zhangsan' where sid=1789;修改视图数据
update ee set name='张三' where sid=1789;修改基本表数据
drop view dcs;删除视图
视图的作用:对视图的操作与对基本表的操作是一样的(包括alter,create,insert into,update,delete ,select),且二者任意一方的字段值被修改,都会实时影响到对方(如修改view的字段值,会同时修改table相应的字段值);但视图的创建是基于基本表的,它的作用可以对基本表的敏感信息进行保护;在实际工作中,出于安全考虑,将用户常用的信息创建成视图给用户调用,避免了直接操作基本表

DDL:数据库定义语言(对表和表结构操作)
create
alter table
drop

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

数据库约束
notnull:非空约束
primary key:主键约束
auto_increment:自增长约束
default:默认值约束   前四种都是对表结构的约束
foreigin key:外键约束 对表与表之间的约束

show create table dd;:查看建表语句
create table dcs1(id int (5) primary key,name varchar(10))engine=innodb;:创建dcs1表,修改类型为innodb
create table dcs2(sid int(5)primary key,sname varchar(10))
constraint xiaoyuan foreign key dcs2(sid) references dcs1(id)engine=innodb:创建dcs2表同时创建外键约束

如果dcs1和dcs2 存在外键约束,dcs1(主表)dcs2(子表),主表中不存在的数据,不能在子表中进行插入

删除数据
delete from dcs1 where id=1;
delete from dcs2 where sid=1;
如果要删除主表数据,需要先删除与主表相关的子表数据
alter table dcs2 drop foreign key xiaoliu;:删除主键约束
   
存储过程
固定格式
create procedure +存储过程的名称(参数名,数据类型):创建存储过程
begin:存储过程的开始
存储过程体
end存储过程结束

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

drop PROCEDURE if exists dcs18;#如果dcs18这个存储过程存在就会删除
create  procedure dcs18(n int)#创建存储过程, n是变量 int是整形
begin#存储过程开始
#sql集合
drop table if exists aa;#如果aa存在,就会删除
create table aa(id int(5)primary key auto_increment,score int(5));
insert into aa values(1,88),(2,75);
insert into aa values(3,79),(4,95);
select * from aa;
select * from aa where id=n; #在参数查询
end #存储过程结束



call dcs18(2)



if 条件判定语句
单分支
if 条件 then
sql语句1
else if 条件2 then
sql语句2
end if;

单分支判断
drop PROCEDURE if exists dcs18;#如果dcs18这个存储过程存在就会删除
create  procedure dcs18(n int)#创建存储过程, n是变量 int是整形
begin#存储过程开始
#sql集合
drop table if exists aa;#如果aa存在,就会删除
create table aa(id int(5)primary key auto_increment,score int(5));
insert into aa values(1,88),(2,75);
insert into aa values(3,79),(4,95);
#select * from aa;
#select * from aa where id=n; #在参数查询
#单分支if判断语句
if n=0 THEN#条件满足
        select count(*) from aa;
ELSE#不满足条件
        select * from aa order by score desc;
end if;#结束
end #存储过程结束

if 条件判断语句
多分支
if 条件 then
sql语句1
else if 条件2 then
sql语句2
else if 条件2 then
sql语句2
else
sql语句4
end if;
end if;
end if;

多分支判断
drop PROCEDURE if exists dcs18;#如果dcs18这个存储过程存在就会删除
create  procedure dcs18(n int)#创建存储过程, n是变量 int是整形
begin#存储过程开始
#sql集合
drop table if exists aa;#如果aa存在,就会删除
create table aa(id int(5)primary key auto_increment,score int(5));
insert into aa values(1,88),(2,75);
insert into aa values(3,79),(4,95);
#select * from aa;
#select * from aa where id=n; #在参数查询
#单分支if判断语句
/*if n=0 THEN
        select count(*) from aa;
ELSE
        select * from aa order by score desc;
end if;*/
#if多分支判断
if n=0 THEN#条件1
        select count(*) from aa;
else if n>0 and n<=4 THEN#条件2
        select * from aa order by score desc;
else if n>4 THEN#条件3
        select max(score) from aa;
ELSE#其他情况
        select * from aa;
end IF;
end IF;
end IF;

end #存储过程结束

call dcs18(-1)#调用存储过程

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

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

drop PROCEDURE if exists dcs18;#如果dcs18这个存储过程存在就会删除
create  procedure dcs18(n int)#创建存储过程, n是变量 int是整形
begin#存储过程开始
#sql集合
declare i int(5)default(select count() from aa);
#declare声明变量declare max int(5)default(select max(score) from aa);
/*drop table if exists aa;#如果aa存在,就会删除
create table aa(id int(5)primary key auto_increment,score int(5));
insert into aa values(1,88),(2,75);
insert into aa values(3,79),(4,55);
insert into aa values(5,39),(6,55);
insert into aa values(7,79),(8,95);/
#select * from aa;
#select * from aa where id=n;
#在参数查询#单分支if判断语句/if n=0 THENselect count() from aa;ELSEselect * from aa order by score desc;end if;*/
#if多分支判断
/if n=0 THEN#条件1select count() from aa;
else if n>0 and n<=i THEN#条件2
select * from aa order by score desc;
else if n>i THEN#条件3
select max(score) from aa;
ELSE#其他情况
select * from aa;
end IF;
end IF;
end IF;/if n=0 THEN#条件1select count() from aa;
else if n>0 and n<=i THEN#条件2
select * from aa order by score desc;
ELSE#其他情况
while n>i DO
set max=max+1;
insert into aa(score)values(88);
set i=i+1;
end while;
end if;
end if;
end #存储过程结束
call dcs18(20)
select * from aa;

分享至 : QQ空间
收藏

0 个回复

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