请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册
  • 便民服务
  • 关注我们
  • 社区新手

索引 视图,外键约束,存储过程

[复制链接]
索引:(为了快速的去查找某个数据)
1.普通索引
查看索引SHOW INDEX FROM emp; 查看emp表的索引
创建索引CREATE INDEX xiaocheng ON emp(sid); 为emp表的字段sid创建索引叫xiaocheng
同时创建多个索引:CREATE INDEX xiaocheng1 ON emp(sid,name); 为emp表的字段sid,name创建索引叫xiaocheng1
删除索引alter TABLE emp DROP INDEX xiaocheng;删除 emp表里面叫做xiaocheng的索引
注:一个字段可以同时创建多个索引
2.唯一索引:(对应的字段值必须是唯一,但允许有空值)
CREATE UNIQUE INDEX xiaocheng  ON emp(sid);为表emp的字段sid创建一个唯一索引叫做xiaocheng
3.主键索引:(和主键约束相辅相成)
注:添加了主键约束也就是添加了主键索引,添加了主键索引也就是添加了主键约束
ALTER TABLE emp DROP PRIMARY KEY; 移除表emp里面的主键约束,然后查看主键索引也没有了

视图:(是一个虚拟的表,它不在数据库中以存储数据的形式保存,是在使用视图的时候动态生成
特点:
2.1视图是由基本表产生的虚表
2.2视图的更新和删除会影响基础表
2.3基础表的更新和删除也会影响到视图
作用:对视图的操作和对基本表的操作一模一样(包括增删改查等命令),且二者任意一方的字段值被修改,都会实时影响到对方(如修改view的字段值,会同步修改table相同的字段值);但是视图的创建是基于基本表的,它的作用可以对基本表的敏感信息进行保护;在实际工作中,出于安全考虑,将用户常用的信息创建成视图给用户调用,避免了直接操作基本表!
操作命令:
SHOW TABLES; 查看视图(一般会在表的最下面)
CREATE VIEW shitu as(SELECT sid,name,age from emp);  创建emp的视图,名字叫shitu(只显示emp的sid,name,age三个字段)
UPDATE shitu SET name="zhangsan"WHERE sid =1789 修改视图shitu的字段name为zhangsan,当视图修改之后,基本表也会被修改,当基本表被修改后视图也会被修改
drop view shitu;删除视图

数据库的语言
DDL:数据库定义语言(对表结构和表字段进行操作的 create,alter table drop)
DML:数据库操作语言(表数据进行操作的,insert into,delete,update,select)

数据库约束
主键约束:primary key
非空约束:not null
自增长约束: auto -increment
默认值约束:default
注:前面4种约束是对表数据的约束
外键约束: foreign key  用于表和表之间的约束

要建表的时候需要用到外键约束时需要把建表语句后面的engine(储存引擎)由默认为mysql修改为innodb类型
show create table test:查看建表语句
create table dcs1(id int(4)PRIMARY key,name varchar(10)) ENGINE=INNODB ;创建主表
create table dcs2(sid int(4)primary key,sname varchar(10),CONSTRAINT fk_sid FOREIGN key(sid)REFERENCES dcs1(id))ENGINE=INNODB; 创建子表同时创建外键约束(FOREIGN key是外键名,对应的dcs2中fk_sid)
dcs1和dcs2存在外键约束(dcs1是主表,dcs2是子表),如果在主表不存在的数据,在子表中是无法插入跟该数据相关的任何数据,主表一般存放基础数据
delete from dcs1 where id=1;无法删除,如果要删除主表的数据,需要先删除与主表有外键约束的子表数据,然后再删除主表
alter table dcs2 drop FOREIGN key fk_sid ,删除子表当中的外键约束

存储过程:存储过程是完成特定功能的sql语句集合。通过编译后存储在数据库中,通过指定的存储过程名称调用执行它。
存储过程=sql语句集合+控制语句
固定格式
[create procedure+存储过程名称(参数名,数据类型) :创建一个存储过程
begin   :存储过程开始
存储过程体
end   :存储过程结束]
例:drop procedure if exists xiaoliu;#如果存在xiaoliu这个存储过程,就删掉
create procedure xiaoliu()  #创建一个xiaoliu的存储过程
begin  #存储过程开始
#写sql集合(存储过程体)
drop table if exists mm;#如果mm表存在则删除,为了增强代码的健壮性
create  table mm(id int(5)primary key auto_increment,score int(10));#建表mm
insert into mm values(1,89),(2,88);#插入数据
insert into mm values(3,98),(4,91);
insert into mm values(5,87),(6,93);
end #存储过程结束
select * from mm;

call +存储过程名称();单独的调用存储过程

分享至 : QQ空间
收藏

0 个回复

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