主键约束

数据库设计三大范式和五大约束

自闭症网瘾萝莉.ら 提交于 2020-02-28 06:50:01
来源: https://www.cnblogs.com/zhouguowei/p/9268788.html 一、三大范式: 什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法,以下就是对这三个范式的基本介绍: 第一范式(1NF): 1、数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。 如果需求知道那个省那个市并按其分类,那么显然第一个表格是不容易满足需求的,也不符合第一范式。 2、两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。 显然第一个表结构不但不能满足足够多物品的要求,还会在物品少时产生冗余。也是不符合第一范式的。 第二范式(2NF): 满足1NF后要求表中的所有列,每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。 一个人同时订几个房间,就会出来一个订单号多条数据,这样子联系人都是重复的,就会造成数据冗余。我们应该把他拆开来。

SQL Server 索引基础知识 主键与聚集索引(ZT)

。_饼干妹妹 提交于 2020-02-27 07:09:36
有些人可能对主键和聚集索引有所混淆,其实这两个是不同的概念,下面是一个简单的描述。不想看绕口文字者,直接看两者的对比表。尤其是最后一项的比较。 主键(PRIMARY KEY ) 来自MSDN的描述: 表通常具有包含唯一标识表中每一行的值的一列或一组列。这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性。在创建或修改表时,您可以通过定义 PRIMARY KEY 约束来创建主键。 一个表只能有一个 PRIMARY KEY 约束,并且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束可保证数据的唯一性,因此经常对标识列定义这种约束。 如果为表指定了 PRIMARY KEY 约束,则 SQL Server 2005 数据库引擎 将通过为主键列创建唯一索引来强制数据的唯一性。当在查询中使用主键时,此索引还可用来对数据进行快速访问。因此,所选的主键必须遵守创建唯一索引的规则。 创建主键时,数据库引擎 会自动创建唯一的索引来强制实施 PRIMARY KEY 约束的唯一性要求。如果表中不存在聚集索引或未显式指定非聚集索引,则将创建唯一的聚集索引以强制实施 PRIMARY KEY 约束。 聚集索引 聚集索引基于数据行的键值在表内排序和存储这些数据行。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。 每个表几乎都对列定义聚集索引来实现下列功能:

SQL基础操作汇总

和自甴很熟 提交于 2020-02-27 02:54:22
SQL基础操作汇总 一、表操作 1、表的创建(CREATE TABLE): 基本语句格式: CREATE TABLE table_name ( col_name datatype, ……); 解释: table_name 为要创建的表的名称(同一登录用户下表名必须唯一),col_name 为表中属性的名称,datatype 为属性的相应数据类型,同一表中会有许多字段,也可以在字段数据类型后追加各种约束条件(具体见约束)。 例: 2、表的修改(ALTER TABLE): 解释 : 所有对表进行修改的语句,开头均以alter table+要修改的表的名称,后面的一系列操作只需要追加相应的关键字语句即可,例如添加字段 ALTER TABLE table_name ADD col_name datatype (修改表名)基本语句格式 : RENAME table_name TO new_table_name ; (TO前面为原表名,后面为新的表名) 例: (添加字段)基本语句格式 : ALTER TABLE table_name ADD col_name datatype ; (add关键字为添加字段使用) 例: (修改字段名称)基本语句格式 : ALTER TABLE table_name RENAME COLUMN col_name TO new_col_name ; (RENAME

SQL回顾

筅森魡賤 提交于 2020-02-26 07:29:44
数据库的本质是一种特殊的文件 数据库是由数据表组成的,数据表是真正存储数据的 数据库客户端-->SQL语句-->数据库服务器-->数据库文件 表与表之间存在关联的数据库称为关系型数据库 (sql-server my-sql(5.1, 5.6, 5.7) Oracle(10g, 11g) db2) 非关系型数据库(mongodb redis) 唯一的标识一行信息的特殊的列 主键(primary key)不允许重复,不允许为空 当前表中的某个字段来自与另一张表中的主键的值,那么这个字段称之为 外键(foreign key) 列 字段 同一类的信息 行 记录 对象的详细信息 记录的集合组成数据表,数据表的集合组成数据库文件 DQL 数据查询语言 select DML 数据操作语言 insert, update, delete DDL 数据定义语言 create, drop 数据库服务端的安装 sudo apt-get install mysql 数据库客户端的安装 sudo apt-get install mysql-client 将程序的一些配置 写到配置文件中 修改的时候不用修改程序只需要修改配置文件即可(可以更好地保护程序源码) decimal() 占5位小数占2位 enum("情况1","情况2",..) 把所有可能出现的情况都列举出来 体积比较大的文件不存在数据库中

Oracle主键约束、唯一键约束、唯一索引的区别

大憨熊 提交于 2020-02-26 06:36:33
一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的。索引是存储在数据库中的一个物理结构,键纯粹是一个逻辑概念。键代表创建来实施业务规则的完整性约束。索引和键的混淆通常是由于数据库使用索引来实施完整性约束。 接下来我们看看数据库中的主键约束、唯一键约束和唯一索引的区别。 SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production PL/SQL Release 11.2.0.1.0 - Production CORE 11.2.0.1.0 Production TNS for Linux: Version 11.2.0.1.0 - Production NLSRTL Version 11.2.0.1.0 - Production SQL> create table test ( 2 id int, 3 name varchar2(20), 4 constraint pk_test primary key(id)) 5 tablespace users;

sql - 主键、外键

旧巷老猫 提交于 2020-02-25 16:50:40
一、主键 1.定义 主键(primary key) 一列(或一组列) , 其值能够唯一区分表中的每个行。 唯一标识表中每行的这个列(或这组列)称为主键。没有主键,更新或删除表中特定行很困难,因为没有安全的方法保证只设计相关的行。 2.充当主键的条件 任何两行都不具有相同的主键值。 每个行都必须具有一个主键值(主键列不允许 NULL值)。 3.创建、增加、删除主键 (1)新建表时直接创建主键 CREATE TABLE table_test( id INT NOT NULL, name VARCHAR(20) NOT NULL, address VARCHAR(20), PRIMARY KEY(id) ); (2)新建表时创建复合键(主键字段不能包含NULL)。 CREATE TABLE table_test( user_id INT NOT NULL, user_name VARCHAR(20) NOT NULL, user_address VARCHAR(20), PRIMARY KEY (user_id, user_name) ); (3)为已建好的表创建主键(主键列必须不能为NULL) CREATE TABLE table_test( id INT NOT NULL, name VARCHAR(20) NOT NULL, address VARCHAR(20) ); ALTER

MySQL-③数据库中表的主键、外键及常用约束

我们两清 提交于 2020-02-24 07:39:02
1. 常见约束类型 (1)primary key 单一主键约束,primary key(字段名1,字段名2) 联合主键 (2)foreign key 外键约束 (3)unique 唯一约束 ,取值不能重复,但允许有一个为空 (4)null 为空约束(系统默认的) (5)not null 非空约束 (6)default 值 默认约束,给定字段一个默认值, 添加字符串型默认值要使用单引号,表示为'值’。 如果是整型则不需要加任何符号; 如果要添加的是中文默认值,则需要加上 DEFAULT CHARSET=utf8; 使用英文字符则 不需要。 (7)auto_increment 自增约束,默认情况下初始值和增量都为1。 2. 创建表(包含常见约束) create table 表名 ( 字段名 数据类型 [列级约束] [列级约束], //多个约束一起使用,约束之间空格隔开 字段名 数据类型 [列级约束] [列级约束], ..... foreign key 本表中的字段名 references 父表名(字段名且是父表的主键), //表级约束 [foreign key 本表中的字段名 references 父表名(字段名),] [constraint 外键约束名 foreign key(外键名)references 主表名(主键名)] ); 来源: CSDN 作者: Forever+Young

Mysql死锁原理分析

纵然是瞬间 提交于 2020-02-23 19:29:24
文章来自何凳成博客 1 背景 MySQL/InnoDB 的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事 咨询这方面的问题。同时,微博上也经常会收到MySQL 锁相关的私信,让我帮助解决一些 死锁的问题。本文,准备就MySQL/InnoDB 的加锁问题,展开较为深入的分析与讨论,主要 是介绍一种思路,运用此思路,拿到任何一条SQL 语句,就能完整的分析出这条语句会加 什么锁?会有什么样的使用风险?甚至是分析线上的一个死锁场景,了解死锁产生的原因。 注 :MySQL 是一个支持插件式存储引擎的数据库系统。本文下面的所有介绍,都是基于InnoDB 存储引擎,其他引擎的表现,会有较大的区别。 1.1 MVCC:Snapshot Read vs Current Read MySQL InnoDB 存储引擎,实现的是基于多版本的并发控制协议——MVCC (Multi-Version Concurrency Control) (注:与MVCC相对的,是基于锁的并发控制,Lock-Based ConcurrencyControl)。MVCC 最大的好处,相信也是耳熟能详:读不加锁,读写不冲突。在读多些少的OLTP 应用中,读写不冲突是非常重要的,极大的增加了系统的并发性能,这也是为什么现阶段,几乎所有的 RDBMS,都支持了 MVCC。 在 MVCC 并发控制中

JPA的多表设计

拟墨画扇 提交于 2020-02-23 13:31:44
表之间关系的划分 数据库中多表之间存在着三种关系,如图所示。 从图可以看出,系统设计的三种实体关系分别为:多对多、一对多和一对一关系 。注意:一对多关系可以看为两种: 即一对多,多对一。所以说四种更精确。 明确: 我们今天只涉及实际开发中常用的关联关系,一对多和多对多。而一对一的情况,在实际开发中几乎不用。 1 在 JPA 框架中表关系的分析步骤 在实际开发中,我们数据库的表难免会有相互的关联关系,在操作表的时候就有可能会涉及到多张表的操作。而在这种实现了 ORM 思想的框架中(如 JPA ),可以让我们通过操作实体类就实现对数据 库表的操作。所以今天我们的学习重点是:掌握配置实体之间的关联关系。 第一步:首先确定两张表之间的关系。 如果关系确定错了,后面做的所有操作就都不可能正确。 第二步:在数据库中实现两张表的关系 第三步:在实体类中描述出两个实体的关系 第四步:配置出实体类和数据库表的关系映射(重点) 2 JPA 中的一对多 2.1 示例分析 我们采用的示例为客户和联系人。 客户:指的是一家公司,我们记为 A 。 联系人:指的是 A 公司中的员工。 在不考虑兼职的情况下,公司和员工的关系即为一对多。 2.2 表关系建立 在一对多关系中,我们习惯把一的一方称之为主表,把多的一方称之为从表。在数据库中建立一对多的关系,需要使用数据库的外键约束。 什么是外键? 指的是从表中有一列

违反约束或者主外键删除数据

China☆狼群 提交于 2020-02-17 17:53:54
如果公共主键在一个关系中是主键,那么这个公共主键被称为另一个关系的外键 作用:保持数据一致性,完整性,主要目的是控制存储在外键表中的数据 主表:以另一个关系的外键作主键的表被称为主表 外表:具有此外键的表被称为主表的从表 通过外键关联的表,删除数据的先后顺序是??? 先删除外键表,再删除主键表。 记住原则 就是 如果你删一条数据会影响到其他数据则该条数据不可删 来源: https://www.cnblogs.com/shanheyongmu/p/5038413.html