精华内容
下载资源
问答
  • 数据库主键作用

    千次阅读 2017-11-23 09:36:18
    数据库主键作用  (2013-02-25 08:41:44) 转载▼ 标签:  数据库   主键   快速   更新   原理 分类: 数据库技术 最近接到一个项目,要求对数据库的...

    数据库主键的作用

     (2013-02-25 08:41:44)
    标签: 

    数据库

     

    主键

     

    快速

     

    更新

     

    原理

    分类: 数据库技术
    最近接到一个项目,要求对数据库的数据进行更新。
    数据库的表也很简单,结构都是一个的,就是时间+值列表的形式记录测量值的。
    数据更新都不是很难,经过计算即可完成。
    由于表中有110万多条记录,数据量比较大,
    所以数据更新效率太低,更新1440条数据所消耗的时间如下:

    【建立主键前】
    2013/2/25 8:31:46 Begin...
    2013/2/25 8:31:57 199
    2013/2/25 8:32:05 399
    2013/2/25 8:32:13 599
    2013/2/25 8:32:22 799
    2013/2/25 8:32:30 999
    2013/2/25 8:32:39 1199
    2013/2/25 8:32:47 1399
    2013/2/25 8:32:49 End.
    这里使用的是事务分组方式进行数据更新,200条一组,更新时间花了1分钟多。
    开始以为是更新方式有问题,试了多种更新方法,虽然效率有所提高,但是仍然无法接受。
    仔细分析了数据库结构发现,原来数据表中没有主键。
    主键的作用是:唯一性;提高检索速度;
    于是建立了索引,结果同样用开始的方法,结果如下。
    【建立主键后】
    2013/2/25 8:35:39 Begin...
    2013/2/25 8:35:39 199
    2013/2/25 8:35:39 399
    2013/2/25 8:35:39 599
    2013/2/25 8:35:39 799
    2013/2/25 8:35:39 999
    2013/2/25 8:35:39 1199
    2013/2/25 8:35:39 1399
    2013/2/25 8:35:39 End.
    只用了不到1秒就完成了!

    【分析】
    为什么建立主键能加快这么多呢?原因如下。
    之前更新的时候,更新语句如下:
    Updata 日常报表1 Set 电流 = 1.2 where 时间= '2012-5-21'
    在更新的时候,会从 日常报表1 表中查询 时间 列,由于花有110万条数据,所以查询指定记录的平均次数是55万次!更新1440条数据,就要查询7.92亿次,所以计算量要1分钟左右,很正常。
    在建议主键后,会对时间列进行排序,排序后,采用二分搜索法来查询,这样110万次最坏查询到的次数为Log2(1100,000)=24次,即使全按最坏情况考虑,更新1440条记录大约只需要查询3.5万次,难怪只用了不到1秒。

    原因找到了,所以更加确认了索引的重要,同时也知道了索引效率的影响幅度。
    另外再补充一句,如果主键已经建立,需要对别的列进行快速更新,那么可以对此列建立索引,同样可以达到快速检索的目的。

    展开全文
  • 数据库主键

    2018-07-27 19:52:26
    主键:用来唯一确定一 条记录的字段作用:保证数据的唯一-性特点: 1.唯一性,2.不能为空分类: 1.逻辑主键( 1.自增字段。2.GUIP ) 2.业务主键(业务逻辑中出现的字段作为主键) 3.组合主键(联合主键)选择主键的策略:...

    主键:用来唯一确定一 条记录的字段作用:保证数据的唯一-性特点: 1.唯一性,2.不能为空分类:
    1.逻辑主键( 1.自增字段。2.GUIP )
    2.业务主键(业务逻辑中出现的字段作为主键)

    3.组合主键(联合主键)选择主键的策略:1.不使用组合主键

     选择主键的策略:1.不使用组合主键
      2.选不会修改的列做主键
      3.-般情况下,都推荐使用自增字段。不要使用业务字段当主键

    展开全文
  • MySql数据库主键外键与数据库设计

    千次阅读 2019-05-20 01:38:57
    MySql数据库主键外键与数据库设计

    MySql数据库主键外键与数据库设计

    首先要指出的:
    列、字段、属性是一个概念
    行、记录、元组是一个概念

    MySQL数据库CONSTRAINT约束:非空约束,唯一约束,主键约束,外键约束
    show create table table_name\G;可以查看已建表的相关信息,包括主外键,外键名,存储引擎,编码方式等等

    主键约束

    主键:表中经常有一个列或者多列的组合,其值能唯一的标识表中的每一行,这样的一列或多列称为表的主键,通过它可以强制表的实体完整性,当创建或更改标识可以通过定义primary key约束来创建主键,一个表只能有一个primary key约束,而且primary key约束的列不能接受空值,由于primary key约束确保该列数据的唯一性,所以经常用来定义标识列。主键自带索引,并且一个表只能有一个主键约束
        实体完整性这项规则要求每个数据表都必须有主键,而作为主键的所有字段,其属性必须是独一及非空值。

    主键的作用
    用作标识列,区分其他字段
    强制表的实体完整性
    用于其他表的外键关联
    用于记录的修改与删除
    加速查询

    • 创建主键约束
    1. 建表时创建主键
      create table Student(id int primary key,name varchar(32) default null)
    2. 建表后添加主键
      create table Student(id int,name varchar(32));
      alter table Student add primary key(id);
    3. 建表后新加字段并设为主键
      create table Mother(id int,name varchar(32));
      alter tabler Mother add age int primary key;

    删除主键约束
    alter table Student drop primary key;

    联合主键:用两个或两个以上的字段组成的主键,用这个主键包含的字段作为主键约束,这个组合在数据表中是唯一,且加了主键索引。

    创建表时创建联合主键
    create table STUDENT(id int auto_increment,courser int,name varchar(10),primary key(id,courser));

    已有的表添加联合主键
    create table Person(id int,province varchar(8),city varchar(8),country varchar(8));
    alter table Person add constraint main_key primary key(id,province);
    Person是表名,main_key 是联合主键名。在建好的表中我们添加了如下数据:
    在这里插入图片描述

    由于id、province是联合主键,所以我们想要创立
    在这里插入图片描述
    时,会出现如下报错
    在这里插入图片描述
    但是我们可以让一个联合主键的一个字段名一样,另一个字段名不一样来创建,即联合主键的字段名不完全一致:
    在这里插入图片描述

    删除联合主键的主键约束,由于主键约束在表单中的唯一性,我们可以直接删除:
    alter table Person drop primary key;

    外键约束

    为了满足关系型数据库的第三范式,降低数据冗余,在表与表之间需要满足响应的关系,可以为表和表之间设置外键。
    外键约束:用于两个表的数据的数据连接,一个表可以有多个外键,MySQL中的innodb存储引擎支持外键;
    外键对应的是参照完整性,一个表的外键可以是空值,若不为空值,则每一个外键的值必须等于另一个表中的主键的某个值。定义一个外键后,不允许删除另一个表中具有关联关系的行;外键的主要作用是保持数据的一致性、完整性。一个主键表某一字段的和跟他有关联的外键表的某一字段有直接的关联。
    对于有外键关联的两个表来说:
    主表(父表):主键所在的表
    从表(字表):外键所在的表

    mysql设置外键约束字段选取
    父表必须是已经存在或者正在创建的表
    父表主键不能包含空值,但外键可以有
    外键列的数目必须和父表的主键中列的数目相同
    从表外键列和主表主键列对应的列的数据类型相同

    创建表时设置外键约束
    create table friend(id int ,name varchar(20),foreign key(id) references child(id));
    父表child,子表friend

    在已有的表中设置外键约束
    alter table subject add foreign key(id) references child(id);
    注意:子表的外键必须关联父表的主键,且关联字段的数据类型必须匹配,如果类型不一样,则创建子表时会出现错误。

    删除外键约束
    有外键约束的列必须先删除外键,然后才能删除该列:
    alter table subject drop foreign key subject_ibfk_1;
    subject_ibfk_1是外键的名字,我们可以自己设,也可以系统生成,这样的话我们要查看建表信息才能知道外键名字是什么。

    查看表中的外键
    show create table table_name
    select * from information_schema.key_column_usage;

    数据库设计

    数据库范式与设计:一对一,一对多,多对多
    关系型数据库的特点:基本组成但对为二维表,各二维表之间存在一定的关系,数据库范式级别越高,数据冗余越低
    第一范式:字段不可再分,只要是个二维表都符合第一范式
    第二范式:每个表都有一个能区分每条记录的主键(非空 唯一 索引)
    第三范式:表中所用数据元素不但能惟一的被主关键字所标识,而且它们之间还必须相互独立,不存在其他的函数关系,只有通过外键来互相联系

    表与表之间的三种关系:
    一对一:如学生分数表与学生信息表,两表有一样的主键ID
    一对多:如教学楼和教室,班级表和学生表的班级ID,多个从表通过外键连接主表主键完成一对多的关系
    多对多:如学生表和课程表,演员和电影;以演员和电影为例,分别建立演员表和课程表,演员表电影表不重复,然后建立一个关系表,将两个表连接起来,变成连个一对多的关系:
    在这里插入图片描述

    建立演员表
    create table actors(id int auto_increment primary key,name varchar(10));
    建立电影表
    create table films(id int auto_increment primary key,name varchar(20));
    建立中间表,并通过外键连接其他相关表
    create table link(id int auto_increment primary key,id_a int,id_f int);
    alter table link add foreign key(id_a) references films(id);
    alter table link add foreign key(id_f) references actors(id);

    这里我们想查询成龙演过的电影:
    select name,f_name from(select * from actors inner join(select id_a,id_f,name as f_name from link inner join films on films.id=link.id_f) as a on a.id_a=id having id=1) as b;

    展开全文
  • 数据库主键id自增

    万次阅读 2019-04-23 18:23:49
    数据库主键id递增 如果使用工具的话在设计表时为主键id勾选上自增选项 mysql mysql: create table users(id int auto_increment primary key not null,name varchar(10)); sql server sql server: create table ...

    数据库主键id递增

    如果使用工具的话在设计表时为主键id勾选上自增选项

    在这里插入图片描述
    mysql

    mysql:
    //建表设置id为主键并自增
    create table users(id int auto_increment primary key not null,name varchar(10)); 
    //修改表id字段类型为int型+自增属性
    alter table 表名 change id id int auto_increment;
    

    sql server

    sql server:
    create table users(id int identity(1,1) primary key not null,name varchar(10));
    

    oracle

    oracle:
    create sequence users_id_sql increment by 1 start with 1;//users_id_sql为序列名
    
    展开全文
  • 1、UUID mysql生成uuid: SELECT UUID(); UUID主键的好处: UUID主键的缺点: 2、主键自动增长 ...分布式情况下的主键可以采用第三方组件,如MyCat等。 ...
  • Oracle数据库主键自增

    千次阅读 2019-03-07 11:07:37
    Oracle数据库主键自增 在学习mysql时,我们很容易通过auto_increment就能实现主键自增的功能,但是在Oracle数据库中,是没有这个关键字的,所以也不能通过这样来实现主键自增。下面我就为大家介绍两种实现主键自增...
  • 浅谈数据库主键策略

    2016-12-04 20:34:02
    数据库主键作用是唯一标识一条记录,所以在同一张表中,任意一条记录的主键都是唯一的,不然,数据库系统就无法根据主键直接定位记录。 虽然数据库系统本身对主键没有特别的要求,但是,写程序的时候,要考虑...
  • 数据库主键不连续

    千次阅读 2017-12-04 11:16:19
    数据库逻辑主键不连续问题分析
  • 数据库主键和外键的作用

    万次阅读 多人点赞 2018-04-26 13:18:34
    主键保证了数据的唯一性,外键保证了数据的完整性。主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。外键用于...
  • 数据库主键生成方案

    千次阅读 2018-04-19 22:23:48
    问题产生的背景:数据量到达一定程度时,需要做数据的分库分表(这又是一个很值得讨论的问题,什么量级的数据做分库分表),此时我们需要保证数据库主键的唯一性、单调递增。并且获取唯一主键的服务要保证高可用、高...
  • 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键  比如  学生表(学号,姓名,性别,班级)  其中每个学生的学号是唯一的,学号就是一个...
  • 数据库主键自增插入显示值

    千次阅读 2014-06-20 15:08:12
    SQL Server 2008 数据库主键自增插入显示值
  • 数据库主键设计原则

    千次阅读 2014-08-12 11:19:55
    数据库主键设计原则  或许大家都设计过数据库,也为表定义过主键,今天我想阐述的是,应该如何正确的设计一个主键,在以往的一些资料中,都没有提及到主键设计的原则.  我为此总结了一下:  1.是否要采用GUID作为...
  • 关于数据库主键和外键(终于弄懂啦)

    万次阅读 多人点赞 2019-06-18 15:59:59
    转 关于数据库主键和外键(终于弄懂啦) 2018年07月16日 19:44:24 f45056231p 阅读数 19385 ...
  • 数据库主键的设计

    千次阅读 2013-08-04 15:00:49
    1、 何谓数据库主键 数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY 约束来创建...
  • 数据库主键冲突解决

    千次阅读 2017-12-01 10:28:16
    数据库主键冲突解决 参考:https://zhidao.baidu.com/question/681411103315116572.html?qbl=relate_question_3&word=%D6%F7%BC%FC%B3%E5%CD%BB%D4%F5%C3%B4%BD%E2%BE%F6 顺便介绍一种刚发现的解决360doc无法...
  • 数据库主键设计

    千次阅读 2010-03-08 10:06:00
    主键的必要性 : 有些朋友可能不提倡数据库表必须要主键,但在我的思考中,觉得每个表都应该具有主键,不管是单主键还是双主键主键的存在就代表着表结构的完整性,表的记录必须得有唯一区分的字段,主键主要是用于...
  • 数据库主键ID生成

    千次阅读 2017-06-12 11:16:28
    2.对唯一主键业务上处理还会用UUID唯一的32位字符串作为主键,但之前在数据库优化中了解到32为字符串类型性能不如整型;最近看到一个最佳的实践:public static long getSID() { return MurmurHash.hash64(UUID....
  • MySQL 数据库主键的选择

    千次阅读 2019-04-09 16:20:03
    主键自增长:设置数据库主键自动增长就行。 GUID:为UUID的标准实现,JAVA直接调用API 以上两种优缺点:https://blog.csdn.net/Santiago_M/article/details/66477327 自定义: GUID+TableCode:分表分库时,...
  • 修改informix数据库主键

    千次阅读 2009-11-23 17:20:00
    修改informix数据库主键2008-10-22 14:20修改informix数据库表的主键,需要首先删除主键,再新建。第一步:查出该主键的约束的名字,查约束名SQL语句如下(TabName为表名):SELECT constrname FROM sysconstraints ...
  • oracle 数据库 主键索引重建

    千次阅读 2019-03-27 18:03:45
    oracle数据库 主键索引重建 alter table table_name drop primary key; alter table table_name add constraint pk_index_name primary key(row_name);
  • 数据库主键作用是唯一标识一条记录,所以在同一张表中,任意一条记录的主键都是唯一的,不然,数据库系统就无法根据主键直接定位记录。虽然数据库系统本身对主键没有特别的要求,但是,写程序的时候,要考虑清楚...
  • 数据库主键使用详解

    千次阅读 2012-11-24 15:57:03
    increment:对Long、Short、或Int的数据列...indentity:对如SQLServer、MySql等支持自动增长列的数据库, sequence:对如Oracle DB2等支持Sequence uuid:对字符串列的数据采用128-位uuid算法生成唯一的字符串主键
  • 定义主键和外键主要是为了维护关系数据库的完整性,总结一下: 1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。 身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号...
  • 令mysql数据库主键自增

    千次阅读 2012-01-19 14:29:03
    数据库主键id是自增的:CREATE TABLE `message ` (`id` INT(8) NOT NULL AUTO_INCREMENT, PRIMARY KEY(`id`));
  • 数据库 主键 外键 唯一键区别

    千次阅读 2018-11-13 19:57:15
    下面我通过一个小栗子来说明我们应该如何选择主键,外键和唯一键。 现在我们想建立学生表,用来存储,一个系统的登陆信息。建表如下: create table student4 ( stu_id int primary key identity,--identity表示...
  • 数据库主键、外键和唯一键的区别

    千次阅读 2019-10-24 17:37:29
    数据库主键、外键和唯一键的区别 现在我们想建立学生表,用来存储,一个系统的登陆信息。建表如下: create table student4 ( stu_id int primary key identity,--identity表示自增 stu_name nvarchar(10) unique ...
  • 数据库主键选择策略

    千次阅读 2011-11-30 15:21:17
    我们在建立数据库的时候,需要为每张表指定一个主键,所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一...主键除了上述作用外,常常与外键构成参照完整性约束,防止出现数据不一致。所以数据库在设计
  • 关于数据库主键和外键 终于弄懂啦

    千次阅读 2017-02-26 16:50:34
    一、什么是主键、外键 二、主键、外键和索引的区别 三、数据库中主键和外键的设计原则 四、数据库主键选取策略 1.自动增长型字段 2.手动增长型字段 3.使用UniqueIdentifier 4.使用”COMB(Combine)”类型
  • 数据库主键的设计和思考

    万次阅读 2013-08-13 16:08:13
    1、 何谓数据库主键 数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 443,161
精华内容 177,264
关键字:

数据库主键的作用