找回密码
 立即注册

推荐阅读

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

12-3外键,索引,视图

[复制链接]
外键:
外键是用来干什么的:为了一张表记录的数据不要太过冗余。这和软件project的模块化思想差点儿相同类似,仅仅只是在数据库中是对表关系进行解耦,尽量让表 记录的数据单一化。
外键的主要作用是:保持数据的一致性、完整性

mysql常见约束
主键约束:primar key
非空约束:not  null
默认约束:default
外键约束:foreign key     表于表之间的约束

mysql数据库有两大数据库引擎:
INNODB
myisam

CREATE table dcs50(id int(4) PRIMARY KEY,name VARCHAR(20)) ENGINE=INNODB;  --主表
CREATE table dcs51(sid int(4) PRIMARY KEY,sname VARCHAR(20),CONSTRAINT wj_dcs FOREIGN KEY(sid) REFERENCES dcs50(id)) ENGINE=INNODB;  --子表
wj_dcs:外键名
ENGINE=INNODB:引擎类型,INNODB
CONSTRAINT:创建外键名
FOREIGN KEY(子表的外键字段):外键约束
REFERENCES(父表的主键的字段名):关联
show create table dcs51; --查询是否设置外键
CREATE TABLE `dcs50` (
  `id` int(4) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

show create table dcs51;
CREATE TABLE `dcs51` (
  `sid` int(4) NOT NULL,
  `sname` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`sid`),
  CONSTRAINT `wj_dcs` FOREIGN KEY (`sid`) REFERENCES `dcs50` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

主表:主表在公司一般都是存放基础数据的
201934om8l6i6zmlrt6riv.png

外键之增加数据:
主表和子表之间如果存在外键的约束,在主表不存在的数据,在字表无法插入与之相关的任何数据。
主表在公司一般都是存放基础数据的
外键名不能重复
外键之删除数据:
dcs50是父表,dcs51是字表,两个表形成关联,必须子表的数据删除后,才能删除父表中的对应数据

删除外键:
alter table 子表名drop foreign key 外键名
删除主键:删除之前先删除自增长   alter table dcs1 change id id int(10);
alter table  表名  drop primary key;
注意:
只有在定义外键时,用constraint 外键名 foreign key .... 方便进行外键的删除
alter table dcs51 drop FOREIGN key wj_name --删除外键
alter table dcs51 add CONSTRAINT wkk_name FOREIGN key(sid) REFERENCES dcs50(id) --新增外键

面试题目:你对外键是怎么理解的,你们公司为什么使用外键?
公司的数据过多,会造成数据库中的数据有较多重复,而且新旧数据的更新和维护需要巨大的维护成本,使用外键可以让公司的数据进行模块化的分类和管理,尽量让主表存放基础数据,让字表单一化,这样可以避免数据的冗(rong)余,而且主表和子表之间还可以双向进行约束,想要删除主表的数据需要把主表相关的任何子表的数据删除,才能删除主表。想在字表插入数据,需要主要与之相关的基础的数据。

数据库视图 VIEW
create view yy  as (select id,name  from dcs);  //将查询结果集创建为视图yy
Show tables 视图名;  //也能查看到视图
Select * from miao; 查看视图里面的内容  只显示id,name
Show create view miao;  查看视图
ALGORITHM=UNDEFINED :加密算法
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW `miao` AS (select `student`.`id` AS `id`,`student`.`class` AS `class`,`student`.`name` AS `name` from `student`)
update miao set name='xiaoer' where id=1;  --视图‘miao’中数据,原始数据也删除

注意:对视图的操作与对基本表的操作都是一样的(包括alter,create,insert into ,update ,delete ,select),且二者任意一方的字段值被修改,都会实时影响到对方(如修改view的字段值,会同步修改table相应的字段值);但是视图的创建是基于基本表的,它的作用可以对基本表的敏感信息进行保护;在实际工作中,出于安全考虑,将用户常用的信息创建成视图给用户调用,避免了直接操作基本表!

索引:可以利用索引快速访问数据库表中的特定信息,索引有助于更快地获取信息。
      索引提供指针以指向存储在表中指定列的数据值,然后根据指定的排序次序排列这些
针。数据库使用索引的方式与使用书的目录很相似:通过搜索索引找到特定的值,然后
随指针到达包含该值的行。

遍历:把所有的数据都查询一遍。

建索引的方法:
三种索引:普通索引     唯一索引   主键索引
普通索引:这是最基本的索引,它没有任何限制
     创建索引:create index abc on student(class);给class创建索引;
     查索引:show index from student
     删除索引:alter table student drop index abc

唯一索引:它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值
      创建索引:create unique index abd on student(id,class)
       查索引:show index from student
      删除索引:alter table student drop index abd


主键索引:它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引
      创建索引:alter table student add PRIMARY key(id)
      查索引:show index from student
      删除索引:alter table student drop PRIMARY KEY
主键索引和主键约束其实是绑在一起的,如果有了主键索引,那么必会产生主键约束,或者说主键约束是主键索引的一个特征

删除索引。
删除索引可以使用ALTER TABLE语句来实现。
其格式如下:
alter table table_name drop index index_name ;
alter table table_name drop primary key  ;
如:alter table student drop index S_sid_index;

如果删除表中的主键约束,需取消该字段的自增长
alter table dcs25 change id sid int(4)  #取消自增长



分享至 : QQ空间
收藏

0 个回复

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