主键约束

聚集索引和非聚集索引的区别

ぐ巨炮叔叔 提交于 2020-02-02 05:06:04
SQL SERVER提供了两种索引:聚集索引和非聚集索引。其中聚集索引表示表中存储的数据按照索引的顺序存储,检索效率比非聚集索引高,但对数据更新影响较大。非聚集索引表示数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置,非聚集索引检索效率比聚集索引低,但对数据更新影响较小。 方法/步骤 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物理顺序。 聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。 聚集索引使用注意事项 定义聚集索引键时使用的列越少越好。 • 包含大量非重复值的列。 .• 使用下列运算符返回一个范围值的查询:BETWEEN、>、>=、< 和 <=。 • 被连续访问的列。 • 回大型结果集的查询。 • 经常被使用联接或 GROUP BY 子句的查询访问的列;一般来说,这些是外键列。对 ORDER BY 或 GROUP BY 子句中指定的列进行索引,可以使 SQL Server 不必对数据进行排序,因为这些行已经排序。这样可以提高查询性能。 • OLTP 类型的应用程序,这些程序要求进行非常快速的单行查找(一般通过主键)。应在主键上创建聚集索引。 聚集索引不适用于: •

聚集索引和非聚集索引

江枫思渺然 提交于 2020-02-02 02:22:06
SQL SERVER 提供了两种索引 聚集索引:聚集索引表示表中存储的数据按照索引的顺序存储,检索效率比非聚集索引高,但对数据更新影响较大; 非聚集索引:非聚集索引表示数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置,非聚集索引检索效率比聚集索引低,但对数据更新影响较小。 聚集索引   该索引中键值的逻辑顺序决定了表中相应行的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。 1)聚集索引使用注意事项 定义聚集索引键时使用的列越少越好。 包含大量非重复值的列; 使用下列运算符返回一个范围值的查询:BETWEEN、>、>=、< 和 <=; 被连续访问的列; 回大型结果集的查询; 经常被使用联接或 GROUP BY 子句的查询访问的列;一般来说,这些是外键列。对 ORDER BY 或 GROUP BY 子句中指定的列进行索引,可以使 SQL Server 不必对数据进行排序,因为这些行已经排序。这样可以提高查询性能; OLTP 类型的应用程序,这些程序要求进行非常快速的单行查找(一般通过主键)。应在主键上创建聚集索引。 2)聚集索引不适用于 频繁更改的列 。这将导致整行移动(因为 SQL Server

[Mysql] 索引详解

此生再无相见时 提交于 2020-02-01 10:05:09
前言: 今天在这里总结一下Mysql索引,也给自己加个印象。 我的座右铭:即使记性再差,仍要坚持多读多看。 概念 Mysql索引的建立对于Mysql的高效运行是很重要的,索引可以大大提高Mysql的检索速度。 Mysql目前主要有以下5中索引类型: 普通索引 唯一索引 主键索引 组合索引 全文索引 缺点: 索引也有它的缺点,过多的滥用索引,也会降低更新表的速度。如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。 5种索引类型 普通索引 这是最基本的索引,他没有任何限制。可以用如下方式创建: 直接创建索引 create index index_name on table ( column ( length ) ) 修改表结构的方式添加索引: alter table table_name add index index_name on ( column ( length ) ) 创建表的时候同时创建索引 CREATE TABLE ` table ` ( ` id ` int ( 11 ) NOT NULL AUTO_INCREMENT , ` title ` char ( 255 ) CHARACTER NOT NULL , ` content ` text CHARACTER NULL

你在家快疯了?20 道数据库面试解析学起来

人走茶凉 提交于 2020-01-30 15:49:37
面试的时候,发现数据库方面,忘得一塌糊涂,抽时间整理了一些数据库方面的题。 事务四大特性(ACID)原子性、一致性、隔离性、持久性? 事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL 默认是哪个级别? MySQL 常见的三种存储引擎(InnoDB、MyISAM、MEMORY)的区别? MySQL 的 MyISAM 与 InnoDB 两种存储引擎在,事务、锁级别,各自的适用场景? 查询语句不同元素(where、jion、limit、group by、having 等等)执行先后顺序? 什么是临时表,临时表什么时候删除? MySQL B+Tree 索引和 Hash 索引的区别? 聚集索引和非聚集索引区别? 有哪些锁(乐观锁悲观锁),select 时怎么加排它锁? 非关系型数据库和关系型数据库区别,优势比较? 数据库三范式,根据某个场景设计数据表? 数据库的读写分离、主从复制,主从复制分析的 7 个问题? 使用 explain 优化 sql 和索引? MySQL 慢查询怎么解决? 什么是 内连接、外连接、交叉连接、笛卡尔积等? mysql 都有什么锁,死锁判定原理和具体场景,死锁怎么解决? varchar 和 char 的使用场景? mysql 高并发环境解决方案? 数据库崩溃时事务的恢复机制(REDO 日志和 UNDO 日志)? 事务四大特性(ACID)原子性、一致性

SQL索引见解

纵然是瞬间 提交于 2020-01-30 06:27:32
其实对于非专业的数据库操作人员来讲,例如软件开发人员,在很大程度上都搞不清楚数据库索引的一些基本知识,有些是知其一不知其二,或者是知其然不知其所以然。造成这种情况的主要原因我觉的是行业原因,有很多公司都有自己的DBA团队,他们会帮助你优化SQL,开发人员即使不懂优化问题也不大,所以开发人员对这方面也就不会下太多功夫去了解SQL优化,但如果公司没有这样的DBA呢,就只能靠程序员自己了。 最近突然想起前一阵和一朋友的聊天,当时他问我的问题是一个非常普通的问题:说说SQL聚集索引和非聚集索引的区别。 大家可能认为这个问题难度不大,认为太熟悉了,也许不会感兴趣,但你真能说清楚吗?其实要想说明白这两者的差别也不是三两句就说的清的,那天我也是觉的这问题太泛了,就随便说了其中的两个区别: 聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个,这个跟没问题没差别,一般人都知道。 聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续,这个大家也都知道。 上面的两点从大的方面讲都是讲的通的,后面我们继续探讨,举一个实际点的例子,一个学生表student,里面是学生号id,学生姓名,学生所在城市ID,学生成绩(总分)。 问:如果想按姓名查询,如何做优化? 答:在姓名字段上建立索引。 问:建立什么类型的索引? 答:建立非聚集索引。 问:为什么? 答:一般有范围查询的需求

数据库的创建和操作

不羁岁月 提交于 2020-01-28 21:41:11
创建和操作数据库 1.创建数据库的基本要求 【1】主数据文件:一个数据库有,且只能有一个。扩展名是.mdf。 【2】次要数据文件:可以根据需要添加多个,并且可以分布在不同的磁盘上。扩展名.ndf。 【3】日志文件:有且至少有一个日志文件,也可以多个。扩展名是.ldf。 2.数据库创建要思考的问题 【1】数据容量:根据需要预估。 【2】文件分布:根据容量大小,创建不同次要数据文件。分布存储。 3.基于T-SQL脚本创建数据库实例 1 use master--表示当前我们要在master数据库中操作 2 go --表示批处理结束,这个go非常重要,在必要的地方必须写,在不需要的地方,绝对不能写。 3 4 5 --我们在开发阶段,通会使用这种判断,查看数据库是否存在。因为我们会经常改动.如果数据库创建完毕,千万注意! 6 if exists(select * from sysdatabases where name='CourseManageDB') 7 drop database CourseManageDB 8 go 9 10 --创建数据库 11 create database CourseManageDB 12 on primary 13 ( 14 --数据库的逻辑文件名(系统使用的必须唯一,但是我们看不见) 15 name='CourseManageDB_data', 16 -

关系型数据库三个范式

风流意气都作罢 提交于 2020-01-28 12:17:51
关系型数据库三个范式 相关概念 候选关键字 : ​ 二维表中,能够惟一确定记录的一个字段或几个字段的组合被称为“超关键字”。“超关键字”虽然能唯一确定记录,但是它所包含的字段可能是有多余的。 如果一个超关键字去掉其中任何一个字段后不再能唯一地确定记录,则称它为 候选关键字。候选关键字既能唯一地确定记录,它包含的字段又是最精炼的。也就是说候选关键字是最简单的超关键字。 主关键字(primary key) : ​ 是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。 比如在一张成绩表中,有字段:学号,科目,成绩,任课老师。 学号+科目+任何其他字段就是超关键字,但是如果去掉学号或者科目中的一个就无法确定成绩,所以学号和科目是两个候选关键字。 只有知道了学号和科目你才能确定一条记录,所以学号和科目两个字段组成了主关键字 部分函数依赖 ​ 设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。 ​ 举个例子:学生基本信息表R中(学号,身份证号,姓名)当然学号属性取值是唯一的,在R关系中,(学号,身份证号)->(姓名),(学号)->(姓名),(身份证号)->(姓名);所以姓名部分函数依赖与(学号,身份证号); 完全函数依赖 ​ 设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y

使用Oracle的问题--主键自增

牧云@^-^@ 提交于 2020-01-26 18:59:23
主键自增的方法 Oracle中数据表的主键在jsp中的使用一般是在sql语句中的主键位置使用序列让其自增或者使用触发器的特殊存储过程。 触发器 触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。 使用触发器 首先正对主键创建一个序列,然后创建触发器,然后在触发器中输入以下代码 CREATE OR REPLACE TRIGGER 创建的触发器名 BEFORE INSERT ON 表名 FOR EACH ROW WHEN ( new . 主键id is null ) begin select 创建的序列名 . nextval into :new . 主键id from dual ; end ; 在sql语句中只需正常输入各字段即可。 触发器优缺点 在一般的逻辑简单的系统中,多使用触发器可使性能提升,但是在偏大的系统,逻辑复杂的项目中不考虑用触发器的存储过程,因为复杂的逻辑会导致触发器的多层嵌套,代码聚合度降低,容易出现死锁情况,调试系统时,触发器的级联关系也会造成一定的烦乱。所以根据系统的实用性选用较好的方法可以事半功倍。 来源: CSDN 作者: 空气里血腥味道 链接: https:/

148复习前一天的内容

淺唱寂寞╮ 提交于 2020-01-26 09:51:05
一、含义 事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行,要么都不执行 二、特点(ACID) A 原子性:一个事务是不可再分割的,要么都执行,要么都不执行 C 一致性:我们的数据是准确的,完整的,可靠的。一个事务可以使数据从一个一致状态,切换到另一个一致状态 I 隔离性:一个事务不受其他事务的干扰,多个事务互相隔离(通过设置隔离级别来隔离) D 持久性:一个事务一旦提交了,则永久的持久化到本地 三、事务的使用步骤 了解: 隐式(自动)事务:没有明显的开启和结束,本身就是一条事务可以自动提交,比如insert、update、delete 显示事务:需要手动提交,具有明显的开始和结束 使用显示事务: ①开启事务 set autocommit=0; 【start transaction;】 --可以省略 ②编写一组逻辑sql语句 注意:sql语句支持的是insert、update、delete 设置回滚点: savepoint 回滚点名; ③结束事务 提交:commit; 回滚:rollback; 回滚到制定的地方:rollback to 回滚点名; 四、并发事务、 1.事务的并发问题是如何发生的? 多个事务 同时 操作 同一个数据库的相同数据时 2.并发问题都有哪些? 脏读:一个事务读取了其他事务还没有提交的数据,读到的是其他事务”更新“的数据 不可重复度

数据库建表原则大揭秘

£可爱£侵袭症+ 提交于 2020-01-23 03:05:30
数据库设计器 1. 原始单据与实体之间的关系 可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体。这里的实体可以理解为基本表。明确这种对应关系后,对我们设计录入界面大有好处。 〖例1〗:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工基本情况表、社会关系表、工作简历表。这就是“一张原始单证对应多个实体”的典型例子。 2. 主键与外键 一般而言,一个实体不能既无主键又无外键。在E—R 图中, 处于叶子部位的实体, 可以定义主键,也可以不定义主键(因为它无子孙), 但必须要有外键(因为它有父亲)。 主键与外键的设计,在全局数据库的设计中,占有重要地位。当全局数据库的设计完成以后,有个美国数据库设计专家说:“键,到处都是键,除了键之外,什么也没有”,这就是他的数据库设计经验之谈,也反映了他对信息系统核心(数据模型)的高度抽象思想。因为:主键是实体的高度抽象,主键与外键的配对,表示实体之间的连接。 3. 基本表的性质 基本表与中间表、临时表不同,因为它具有如下四个特性: (1) 原子性。基本表中的字段是不可再分解的。 (2) 原始性。基本表中的记录是原始数据(基础数据)的记录。 (3) 演绎性。由基本表与代码表中的数据