2020-04-11

一、数据库视图

(一)什么是视图?

视图是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。是由行和列组成的数据,他不在数据库中存储,而是在使用视图的时候引用基础表动态生成的。

(二)视图的特点

1、视图是由基本表产生的虚表

2、视图的列可以有多个基本表中的某些列组成

3、视图的创建和删除,不影响基本表

4、视图对内容的更新或者删除,直接影响基本表

5、当视图内容来自多个虚拟表时,则不允许删除

(三)视图的缺点:

1、性能差

把视图查询的结果转化成对基本表的查询,

2、修改限制

用户修改视图的数据,必须把它转化为对基本表的修改,简单的视图来说很简单,但是对于比较复杂的视图来说,可能是不允许修改

(四)视图的优点

1、提高查询效率 ;数据库中数据,查询非常复杂,创建视图可以避免多次编写sql语句出现的错误,

2、安全

公司中有些字段为保密字段,也可以通过创建视图来限制用户对某些字段进行操作

3、简单

不需要关心后面对应表的结构,

通常情况下,数据库是敏感,(脱敏测试)  不是每一个用户都能进行访问,但是某些用户需要读取某些表的部分数据,这时就可以定义指定条件的视图来限制用户只能访问其指定的列的数据,并提供一个视图接口进行访问,基于这种原理,大大简化查询语句编写以及复杂条件下的数据刷选,同时也延伸出视图中套用视图,因为视图是一个表,所有视图中引用视图从简化用户更复杂的数据筛选,用户只需要调用视图就可以得到经过复杂运算后的数据,提高开发效率同时也提高数据的安全性。

4、4.1创建视图

create    view  视图名称  as (sql语句)

如:create  view  a as ( select name , incoming ,dept2  from emp) ;

4.2 查看视图

show    create  view  视图名

如:

show    create  VIEW  b  ;

4.3修改视图

alter  view  视图名称  as (mysql语句)

4.4 删除视图

drop  view  视图名称

4.5查询单表视图 内容

select  *  from    视图名

注意点:对视图的操作与对基本表的操作都:是一样的,两者任意一方的字段值被修改都会实时影响到对方(如:修改视图的字段值,会同步到基本表的字段值;修改表也会同步到视图)

(1)=视图改字段无法修改

#alter  table  b change  name  name16 char(20) ;

(2)修改视图值,原表也修改值

例题:update  emp  set  age=100; 

update  b  set  name=kaifen;

二、索引

1、索引:是加速对表中数据的检索创建的一种分散的存储结构

2、定义:在关系型数据库中,索引是一种单独的,物理的对数据库表中一列或多列的值进行排序的存储结构,它是某个表中一列或多列的结合和相应的表中标识这些数据叶的逻辑指针清单。

3、索引的作用:

(1)快速取数

(2)保证数据记录的唯一性

(3)实现表与表之间的参照完整性

(4)在使用order  by ,group 子句进行数据检索时,利用索引可以减少排序和分组的时间

4、优缺点:

(1)优点 :4.1.1加快检索速度 

  4.1.2 减少分组和排序的时间

4.1.3  加速表和表之间的连接

4.1.4创建唯一索引,保证数据库表中每一行数据的唯一性

(2)缺点:

4.2.1 索引要占物理空间

4.2.2 对表进行增、删、改、查 ,索引也要动态维护,降低数据的维护速度

5、索引的类型

普通索引  index  (mul)

最基本的索引,没有任何的限制

主键索引  primary key  (pri)

是一种唯一索引,不允许为空

唯一索引  unique  (uni)

与主键索引类似:不同的就是,索引列的必训唯一,但允许有空值。

全文索引  fulltext

仅用于mylsam表,用于在一篇文章汇总,检索文本中信息,针对较大的数据,生成全文索引很耗空间,

组合索引

为了更多的提高mysql的效率可以建立组合索引,遵循"最左前缀"的原则

单列索引

聚焦索引

非聚焦索引

6、索引语句

(1)查询索引方法

1、1  show  index  from  emp ;

1、2  show  keys  from    emp ;

(2)创建索引 alter  table

2.1普通索引:

方法一:alter  table  表名  add  index  索引名(列名);

#alter  table  emp  add  INDEX  gz(name);

方法二:alter  table  表名  add  index  (列名)

2.2唯一索引

方法一:alter  table  表名  add  unique  索引名(列名);

alter  table  dept  add  unique a(dept1) ;(索引名不同:

方法二:alter  table  表名  add  unique (列名)

alter  table  dept  add  unique(dept3)  ;

2.3  主键索引

alter table  表名  add primary  key (列名)

如:alter  table  dept  add  primary  key ( dept1);

2.4全文索引

如: alter  table  emp  add  fulltext(dept2);

2.5多列索引(组合索引):

如:alter  table  emp  add  index (name ,age,dept2);

alter  table  emp  add  index  a (name ,age,dept2);

7.删除索引:

7.1删除主键索引

alter  table  表名  drop  primary  key;

如:

alter  table  dept  drop  primary  key ;

7.2 删除普通索引

7.2.1  ALTER  table  dept  drop  index  索引名

ALTER  table  dept  drop  index  dept3

7.2.2

8、create  建索引

单列创建:create  index  索引名 on  表名(列名);

多列创建:create  index  索引名  on  表名(列名1,列名2)

备注:只显示两个索引,不显示字段的索引

9、建表时用索引

如:create    table  xlh( id  int  primary  key  ,name  char(20)

备注:

三、外键:

1、外键用来干什么?

让一张表的数据不要太过于冗余,在数据库中是对表的关系进行解耦,尽量让表记录的数据单一化。

2、外键的主要作用?

保持数据的完整性和一致性

3、外键约束:foreign  key  表与表之间的约束

mysql数据库有两大数据库存储引擎:innodb和myisam (默认)

innodb  的类型查看:

查存储引擎:

show  table  status  from  “库名” where  name="表名" ;

创表语句:

#create  table  mm (id  int  primary  key  , name VARCHAR(20))engine=innodb ;(父表)

#create  table  nn (sid  int(10)  PRIMARY key , sanme varchar(20),constraint  fk_sid  FOREIGN  key(sid)  references  mm(id)) engine=innodb;(子表)

建表时外键的方法一:

格式:

constraint  外键名(自定义)  FOREIGN  key(子表的外键字段)  references  父表(字段)

constraint  fk_sid  FOREIGN  key(sid)  references  mm(id)

建表增加创建外键方法二:

格式:alter  table  表名  add  constraint  外键名  FOREIGN  key(子表字段名)  references  de父表(父表的列名) ;

alter  table  sc  add  constraint  zy  FOREIGN  key(sc_no)  references  dept(dept1) ;

alter  table  表名  add    增加外键

constraint  外键名  指定外键名

FOREIGN  key(子表字段名)  指定字段

references  dept(dept1)  引用外部表的主键

删除主键

alter  table  +表名 +drop  foreign  key  +外键名

alter  table  sc  drop  foreign key  zy ;

注意点:

(1)外键不能修改,只能删除

(2)primary key == 主键 等价于 唯一 (UNIQUE) 且 非空 (NOT NULL)

因为 Mysql 里面的自增列, 必须要依赖一个 主键 或者 唯一的键。

所以你的 SQL 里面要有一个

PRIMARY KEY ( `id` )

如果不加 PRIMARY KEY ( `id` ) 的话, 结果将像下面这个样子:

mysql> CREATE TABLE tab (

-> id INT AUTO_INCREMENT,

-> val VARCHAR(10)

-> );

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

ENGINE = InnoDB DEFAULT CHARSET = gbk AUTO_INCREMENT =1;

这行语句, 设置了3个表的属性

ENGINE = InnoDB 是设置表的引擎。 innoDB 引擎是比较新的, 支持外键 与 事务处理等特性。

CHARSET = gbk 是字符集

AUTO_INCREMENT =1 是那个 自增的 ID , 起始数值是 1

我把这样的表单写入数据库以后 留言板上的内容(中文)添加上去显示是“??”。

我查看结构的时候确实是gbk_chinese_ci 了

这个要调查一下,你的数据,是怎么插入的。

虽然你的数据库表的 字符编码, 是 gbk 了。

但是如果你的 数据,是通过 网页插入的, 而网页的编码是 utf8 之类的话。

那么最后保存的数据, 就可能是 ?? 了。

(2)父表和子表的关系:如果父表不存在的数据,在任何一张子表无法插入该数据相关的任何数据;

(3)两表关联,子表数据删除后,才能删除父表的对应数据

(4)当删除之前有自增长,先删除自增长

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 手动不易,转发请注明出处 --Trance 数据库系统命令: (1).查看存储过程状态:show pro...
    Trance_b54c阅读 1,758评论 0 8
  • ORA-13000: 维数超出范围 ORA-13001: 维数不匹配错误 ORA-13002: 指定的级别超出范围...
    thinkact阅读 19,553评论 1 5
  • mysql和oracle语法都差不多,但还是有差别,查阅资料后我总结了一套完整的sql语句大全,供初学者学习 1....
    谭鱼鱼阅读 1,892评论 0 4
  • 系统用户: 1.sys system(sys权限最高) 2.sysman(操作企业管理器) 密码是安装的时候输入的...
    3hours阅读 1,622评论 0 0
  • 以前我相对会议中比较被动,今年决定重点反思与突破,从七个习惯开始看会议中自我定位。昨天线下小组会中提及:你为什么来...
    rainbow_72dd阅读 663评论 0 0