主键约束

MySQL索引(详细解释)

女生的网名这么多〃 提交于 2019-12-26 22:57:21
什么是索引 索引是一种 可以加快检索的数据结构 ,它 包含从表或者视图的一列或者多列生成的键 ,以及 映射到指定数据存储位置的指针 。 我们可以把数据库看成一本书,索引就是书的目录,借助目录查找信息,显然要比没有目录的书查起来要方便快捷。 索引的作用就是提高查询效率 那么索引能提高查询效率,我们就要创建很多索引么? 不是的,索引最终是存储在硬盘上的,索引越多,那么存储索引的文件就会越大,电脑在使用索引的时候,是先将索引文件加载到内存上,然后再加载到CPU上。所以,索引如果过多,会加重内存和磁盘的交互负担。 并且,数据的改动也会对索引造成影响。 总结:索引可以提高查询效率,但并不是越多越好,过多的索引会引起磁盘I/O的交互频繁,并且数据改动,索引也会受到影响。 索引分类 普通索引 :没有任何条件现制,可以给任意字段添加普通索引。 Student表中的字段有SID,Sname,Sage,Ssex, 对其中任意的一个字段都可以创建索引,没有任何现制,这就是普通索引 唯一性索引 :唯一性索引顾名思义,它可以保证索引中的所有的值都是唯一的,使得表中的每一行在某种方式上都具备唯一性。所以, 只有当唯一性是数据本身的特征的时候,指定唯一性索引才有意义。 例如:主键,在表中是不能重复的,主键索引,就是唯一性索引。 SID就是Student表的主键,SID是不会重复的字段,也就是唯一性字段

hinernate复合主键操作方法

孤街醉人 提交于 2019-12-26 21:21:43
目录: 1. 实现方式一 :将复合主键对应的属性与实体其他普通属性放在一起 2. 实现方式二 :将主键属性提取到一个主键类中,实体类只需包含主键类的一个引用   在日常开发中会遇到这样一种情况,数据库中的某张表需要多个字段列才能唯一确定一行记录,这时表需要使用复合主键。面对这样的情况Hibernate为我们提供了两种方式来解决复合主键问题。 方式一: 将复合主键对应的属性与实体其他普通属性放在一起 例如实体类People中"id"和"name"属性对应复合主键: People.java: /*实体类,使用复合主键必须实现Serializable接口*/ public class People implements Serializable { private static final long serialVersionUID = -4888836126783955019L; private String id; private String name; private int age; public People() { } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; }

PowerDesigner之PDM(物理概念模型)

ⅰ亾dé卋堺 提交于 2019-12-25 10:59:23
一、PDM概述   PDM(物理数据模型),通俗地理解,就是在PowerDesigner中以图形化的方式展示和设计数据库。   PDM中涉及到的基本概念包括: 表; 列; 视图; 主键; 候选键; 外键; 存储过程; 触发器; 索引; 完整性检查约束;   以上这些都是数据库的概念,不适合在PowerDesigner里面表述。 二、创建PDM   创建PDM有4中方法: 使用设计环境直接创建PDM; 从现有数据库或通过SQL脚本逆向工程创建PDM; 从CDM采用内部模型生成方法建立PDM; 从OOM中的类图采用模型的内部生成方法建立PDM;   利用CDM生成PDM是最符合设计思路的方法,但在很多企业开发过程中,都是在设计环境中直接建立PDM,因为大部分企业没钱发那么多工资你设计那么多图。    1、在设计环境直接建立PDM   在设计环境直接建立PDM的步骤如下:    1、在PowerDesigner主窗口选择File->New Model,在打开的创建左侧选择Physical Data Model选项       2、右侧选项的意义 Model name:模型名称; DBMS:数据库类型,也可以单击后面的文件夹按钮,选择“浏览文件夹”,选择xml文件作为目标(CDM转PDM); Share the DBMS definition:共享数据库定义; Copy the DBMS

唯一索引、聚集索引和聚集索引

烈酒焚心 提交于 2019-12-24 14:12:43
1.一个表只能有一个主索引-PRIMARY,且只有是数据库表才有主索引,后缀为.CDX,索引关键字是不可以重复的.哪怕是空记录也只可以有一条.2.候选索引可以有很多个,索引关键字同样不可以重复,同样只存在于数据库表.3.唯一索引,可以存在于自由表,但索引关键字不可以重复.4.普通索引简单的理解就是只起排序作用.索引关键字是可以重复的.可存在于自由表. 主键与唯一索引的区别 主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。 唯一性索引列允许空值,而主键列不允许为空值。 主键列在创建时,已经默认为空值 + 唯一索引了。 主键可以被其他表引用为外键,而唯一索引不能。 一个表最多只能创建一个主键,但可以创建多个唯一索引。 主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。 在 RBO 模式下,主键的执行计划优先级要高于唯一索引。 两者可以提高查询的速度。 CREATE UNIQUE INDEX test_UniqueKey ON test (UniqueKey); 聚集索引: 聚集索引基于数据行的键值,在表内排序和存储这些数据行。每个表只能有一个聚集索引,应为数据行本分只能按一个顺序存储。 在聚集索引中,表中各行的物理顺序与索引键值的逻辑(索引)顺序相同

如何删除主键的聚集索引

独自空忆成欢 提交于 2019-12-24 06:30:07
当我们对一个表建立一个主键时,默认会给该主键列添加一条聚集索引,这是数据库内部自动建立的,唯一性约束也会默认创建一个非聚集索引。 create table MyTable ( id int identity(1,1) primary key, name nvarchar(10) unique ) exec sp_helpindex MyTable 上面我们建立了一个主键id 和唯一性约束的name列,查看表可以看到这时产生了两个索引 聚集索引是一个宝贵的资源,在一些表的中有时我们永远不会用到主键来作为查询条件,或者作为其他表的外键,这时主键的聚集索引 就显得大才小用了,我们希望将聚集索引建立在其他真正需要的字段,不过当我们执行删除操作时会报以下错误 消息 3723,级别 16,状态 4,第 1 行 不允许对索引 'MyTable.PK__MyTable__3213E83F145C0A3F' 显式地使用 DROP INDEX。该索引正用于 PRIMARY KEY 约束的强制执行 不过我们可以先删除主键约束,这样聚集所以就自动删除了 alter table MyTable drop constraint PK__MyTable__3213E83F145C0A3F 我们再看下聚集索引已经不存在了 当然唯一约束所引起的索引也可以同样的方式操作,先删除唯一约束 来源: https://www

数据库的几个概念:主键,外键,索引,唯一索引

蓝咒 提交于 2019-12-24 05:57:59
主键: 主键是数据表的唯一索引,比如学生表里有学号和姓名,姓名可能有重名的,但学号确是唯一的,你要从学生表中搜索一条纪录如查找一个人,就只能根据学号去查找,这才能找出唯一的一个,这就是主键;如:id int(10) not null primary key auto_increment ;自增长的类型 ; 外键: 定义数据表   假如某个电脑生产商,它的数据库中保存着整机和配件的产品信息。用来保存整机产品信息的表叫做 Pc;用来保存配件供货信息的表叫做Parts。   在Pc表中有一个字段,用来描述这款电脑所使用的CPU型号;   在Parts 表中相应有一个字段,描述的正是CPU的型号,我们可以把它想成是全部CPU的型号列表。   很显然,这个厂家生产的电脑,其使用的CPU一定是供货信息表(parts)中存在的型号。这时,两个表中就存在一种约束关系(constraint)——Pc表中的CPU型号受到Parts 表中型号的约束。   首先我们来创建 parts 表: CREATE TABLE parts ( ... 字段定义 ..., model VARCHAR(20) NOT NULL, ... 字段定义 ... );   接下来是Pc表: CREATE TABLE pc ( ... 字段定义 ..., cpumodel VARCHAR(20) NOT NULL, ...

数据库的几个概念:主键,外键,索引,唯一索引

烈酒焚心 提交于 2019-12-24 05:57:33
主键: 主键是数据表的唯一索引,比如学生表里有学号和姓名,姓名可能有重名的,但学号确是唯一的,你要从学生表中搜索一条纪录如查找一个人,就只能根据学号去查找,这才能找出唯一的一个,这就是主键;如:id int(10) not null primary key auto_increment ;自增长的类型 ; 外键: 定义数据表   假如某个电脑生产商,它的数据库中保存着整机和配件的产品信息。用来保存整机产品信息的表叫做 Pc;用来保存配件供货信息的表叫做Parts。   在Pc表中有一个字段,用来描述这款电脑所使用的CPU型号;   在Parts 表中相应有一个字段,描述的正是CPU的型号,我们可以把它想成是全部CPU的型号列表。   很显然,这个厂家生产的电脑,其使用的CPU一定是供货信息表(parts)中存在的型号。这时,两个表中就存在一种约束关系(constraint)——Pc表中的CPU型号受到Parts 表中型号的约束。   首先我们来创建 parts 表: CREATE TABLE parts ( ... 字段定义 ..., model VARCHAR(20) NOT NULL, ... 字段定义 ... );   接下来是Pc表: CREATE TABLE pc ( ... 字段定义 ..., cpumodel VARCHAR(20) NOT NULL, ...

SQLSERVER聚集索引和主键的误区

自作多情 提交于 2019-12-23 15:57:22
SQLSERVER聚集索引和主键的误区 很多人会把Primary Key和聚集索引搞混起来,或者认为这是同一个东西。这个概念是非常错误的。 主键是一个约束(constraint),他依附在一个索引上,这个索引可以是聚集索引,也可以是非聚集索引。 所以在一个(或一组)字段上有主键,只能说明他上面有个索引,但不一定就是聚集索引。 例如下面: 1 USE [pratice] 2 GO 3 CREATE TABLE #tempPKCL 4 ( 5 ID INT PRIMARY KEY CLUSTERED --聚集索引 6 ) 7 8 9 --------------------------------- 10 USE [pratice] 11 GO 12 CREATE TABLE #tempPKNCL 13 ( 14 ID INT PRIMARY KEY NONCLUSTERED --非聚集索引 15 ) 16 17 18 DROP TABLE [#tempPKCL] 19 DROP TABLE [#tempPKNCL] 如果不加 NONCLUSTERED 和 CLUSTERED 关键字,默认建的是聚集索引 而一个聚集索引里,是可以有重复值的。只要他没有被同时设为主键,但是主键不能有重复值(不管依附在聚集索引上还是非聚集索引上) 强调这一点,是因为有些人觉得自己的表格上设置了主键

MySQL完整性约束

僤鯓⒐⒋嵵緔 提交于 2019-12-23 00:10:53
一. 约束介绍   约束条件与数据类型的宽度一样,都是可选参数.   用于保证数据的完整性和一致性. 二. 约束分类   1. primary key (pk)  表示该字段为该表的主键,可以唯一的标识记录   2. foreign key (fk)  标识该字段为该表的外键   3. not null  标识该字段不能为空     默认为空, 设置不为空就必须要为字段赋值   4. unique key (uk)  标识该字段的值是唯一的   5. anto_increment  标识该字段的值自动增长(整数类型, 而且为主键)   6. default  为该字段设置默认值     默认为null, 如果设置了默认值,并且插入数据时不给该字段赋值时,使用默认值. 三 . 详细分类验证    1. not null 和 default           2. unique      ①. 单列唯一     在mysql中称为单列唯一,即同一列内唯一             将 name 字段设置为唯一, 不可以给 name 字段插入相同的值.      ②. 联合唯一    将id设置为单列唯一,将ip+端口设置为联合唯一,也就是ip+端口不可以相同,ip或端口相同可以.    3. primary key     在一个表中 : 单列可以做主键, 多列也可以做主键(复合主键)

Cannot add or update a child row: a foreign key constraint fails

霸气de小男生 提交于 2019-12-21 23:40:14
Cannot add or update a child row: a foreign key constraint fails 当我们在对表进行外键约束的时候 alter table 表名 add constraint 外键名 foreign key(列)references 表名(主键)on delete 级联操作 MYSQL会报这个错误的原因是 被设置的为外键的列中有和另一个表主键不同的值,导致失败 来源: CSDN 作者: 八戒; 链接: https://blog.csdn.net/weixin_44799092/article/details/103647980