精华内容
下载资源
问答
  • postgresql 表不设置主键问题
    千次阅读
    2018-11-22 10:51:58

    由于多系统整合,需要将当前系统的数据库表格修改为视图的形式映射其他系统的表格。在做这项工作时需要导入数据和修改数据在这个过程中我发现了一个大坑,其他系统表格居然都没有主键。

    (postgresql 使用pgadmin不能修改无主键的表数据,navicat 在批量复制数据时,也会因为表格没有主键导致多行数据覆盖,和复制失败等情况,当前使用insert语句是没有问题的 )

    实在是想不明白当时哪位大神设计的这个数据库,也想不明白表格为什么不设置主键,而且基本上所有表都不添加主键。

    注 : 若有大神知道数据库表为什么不设置主键,万请告知,万分感谢。

    这里说一下主键的作用,来阐述数据库设计中表中需不需要主键(谨代表个人观点 )

    1)主键约束 包含 唯一约束和非空约束。主键能唯一表示了二维表中的唯一一行数据。

    2)一般数据库会使用主键来组织表行数据,其他索引只是存储了这个主键的索引位置,所以查询的时候如果用到主键查询排序应该更快。

    3)只是postgresql没有主键是存在一些很坑的错误,上面已经说了一下我遇见的问题。

    4)主键能在一定程度上保证数据不重复,唯一性。

    5)主键是作为删除,更新最好的标示。

    6)在某些数据库表中要求必须需要主键,例如:mysql的innodb数据库引擎 中必须有主键,不设置主键它会默认 设置主键

    7)数据库主键可以优化。(减少数据冗余)

     

     

    更多相关内容
  • 问题 MySQL数据库规范中规定每张中都需要设置主键,那么是因为什么原因而如此规定的呢。每一条规范都会有它背后的涵义。

    问题

    MySQL数据库规范中规定每张表中都需要设置主键,那么是因为什么原因而如此规定的呢。每一条规范都会有它背后的涵义。

    InnoDB

    InnoDB是MySQL数据库的默认引擎,我们需要了解它的一个重要概念:聚簇索引。InnoDB按照每张表的主键构造一棵B+树,主键对应的索引就是聚簇索引,在每个叶子节点存放着数据表的行数据。所以主键对于InnoDB来说至关重要。

    InnoDB对聚簇索引的处理

    1、第一种情况:用户定义了主键,那么InnoDB会使用主键作为聚簇索引;
    2、第二种情况:用户没有定义主键,那么InnoDB会使用第一个非空的唯一索引作为聚簇索引;
    3、第三种情况:用户既没有定义主键,也没有定义唯一索引,那么InnoDB会自动生成一个不可见的ROW_ID的列名为GEN_CLUST_INDEX的聚簇索引,该列是一个6字节的自增数值,随着插入而自增。

    影响

    很明显,缺少主键的表,InnoDB会内置一列用于聚簇索引来组织数据。而没有建立主键的话就没法通过主键来进行索引,查询的时候都是全表扫描,小数据量没问题,大数据量就会出现性能问题。

    而且不设置主键不单单影响到查询,在进行写操作的时候,由于ROW_ID是共享的,这意味着插入的时候需要共享该序列,那么高并发插入的时候为了保持唯一性就避免不了锁的竞争,进而影响性能。

    总结

    由以上分析可以推论,在建表的时候无论如何都要设置主键,如何没有可用作主键的字段,可以设计一个业务无关的字段,比如xx_id。

    展开全文
  • 设置MySQL数据表主键

    千次阅读 2021-01-28 00:39:07
    设置MySQL数据表主键:使用“primary key”关键字创建主键数据列。被设置主键允许出现重复的值,很多情况下与“auto_increment”递增数字相结合。如下SQL语句所示:Mysql>createtablebooks(bookidint(11)...

    设置MySQL数据表主键:

    使用“primary key”关键字创建主键数据列。被设置为主键列不允许出现重复的值,很多情况下与“auto_increment”递增数字相结合。如下SQL语句所示:

    
     

    Mysql>createtablebooks(bookidint(11)NOTNULLAUTO_INCREMENTPRIMARYKEY,booknamevarchar(50));

    Mysql>insertintobooks(bookname)values(“book1”),(“book2”),(“book3”);

    Mysql>select*frombooks;

    若要修改列主键或类型,请参考 ALTER TABLE 语句。

    设置MySQL数据表外键

    外键是设置当前表中的某一列与别一数据表中的主键列关联。主要目的是控制与外键表中的数据,保持数据一致性,完整性,也就是说:当前表中这一列的数据必须是关联外键列中的某一数据,而且相关联的两个数据列的类型必须相同;当关联外键列某一数据修改或删除时,将触当前表的某一项相应操作。可解发以下事件以及参数:

    触发事件:on delete和on update

    可设参数:cascade(跟随外键改动);

    restrict(限制外表中的外键改动);

    set Null(设空值);

    set Default(设默认值);

    no action [默认]

    设置关联的语句由[指定主键关键字:foreign key(列名)]和[引用外键关键字: references (外键列名)]组成。例如创建一个关于books的购物车数据表“gbooks”,其中“gbookid”与books表中的“bookid”创建外键关联。

    
     

    Mysql>createtablegbooks(gidint(11)notnullauto_incrementprimarykey,gbookidint(11),goodsumint(4),foreignkey(gbookid)referencesbooks(bookid)ondeletecascadeonupdatecascade);

    删除外键:

    首先,使用SHOW CREATE TABLE语句查看创建表描述。其中“CONSTRAINT”关键字后面有一个引号括起来的名称,它就是这个表外键的代表,是在创建外键时自动生成的名称,当然在创建的过程中可以直接用“CONSTRAINT”关键字自定义名称。其查看的完整语句如下:

    
     

    Mysql>showcreatetablegbooks;

    这里代表外键的名称是“gbooks_ibfk_1”,目标找到了,再使用ALTER语句进行删除。

    
     

    Mysql>ALTERTABLEgbooksDROPFOREIGNKEYgbooks_ibfk_1;

    主键和外键的设置意义:

    主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。

    必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。而主键和外键的结构是这个设计过程的症结所在。一旦将所设计的数据库用于了生产环境,就很难对这些键进行修改,所以在开发阶段就设计好主键和外键就是非常必要和值得的。

    主键:

    关系数据库依赖于主键—它是数据库物理模式的基石。主键在物理层面上只有两个用途:

    1. 惟一地标识一行。

    2. 作为一个可以被外键有效引用的对象。

    基于以上这两个用途,下面给出了我在设计物理层面的主键时所遵循的一些原则:

    1. 主键应当是对用户没有意义的。如果用户看到了一个表示多对多关系的连接表中的数据,并抱怨它没有什么用处,那就证明它的主键设计地很好。

    2. 主键应该是单列的,以便提高连接和筛选操作的效率。

    3. 永远也不要更新主键。实际上,因为主键除了惟一地标识一行之外,再没有其他的用途了,所以也就没有理由去对它更新。

    注:这项原则对于那些经常需要在数据转换或多数据库合并时进行数据整理的数据并不适用。

    4. 主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。

    5. 主键应当有计算机自动生成。如果由人来对主键的创建进行干预,就会使它带有除了惟一标识一行以外的意义。一旦越过这个界限,就可能产生认为修改主键的动机,这样,这种系统用来链接记录行、管理记录行的关键手段就会落入不了解数据库设计的人的手中。

    外键是用来和其他表建立联系用的:这个表中的一列和另外一个表中的一列相同,为了让这两个表联系起来,就把其中一个表中的列设成外键,把另外一个表列设成主键,就实现了这两个表的关联。一个表可以有多个外键。但主键只能有一个。

    展开全文
  • mysql设置数据表主键及自增长的方法:首先启动MySQL,打开navicat建立一个新;然后添加字段,类型;接着执行相关语句即可插入数据;最后选中字段,在下面的Auto Increment前打上对勾即可自增长。更多相关免费...

    mysql设置数据表的主键及自增长的方法:首先启动MySQL,打开navicat建立一个新表;然后添加字段,类型;接着执行相关语句即可插入数据;最后选中字段,在下面的Auto Increment前打上对勾即可自增长。

    de74aa9d25789ac372b0e76eabcd6c1c.png更多相关免费学习推荐:(视频)

    mysql设置数据表的主键及自增长的方法:

    1、启动MySQL,打开navicat,新建数据库aaa,右键点击Tables,选择new table,建立一个新表。

    7fb8f237b75172c6cc34c3c1e4c007a6.png

    2、添加字段xsid,类型为int,添加字段xsname,类型为vachar。如图中所示,选中字段xsid,通过点击Primary Key,或者图中2位置,设置该字段为主键。保存表,名称为xstable。

    57dd51f4754378be2448d252e1d681f7.png

    3、打开表xstable,新建查询,输入图中的sql语句,执行成功后表中即插入了一条数据。

    e8443e9fd985d92ed05de2b45a9cb031.png

    4、将sql中的xsid数值设为空,第一次执行语句可以成功,xsid默认存储的是0,执行第2次时,报错,如图中所示。可以看到如果不能设置xsid的具体数值是不能执行成功的。

    10d0a797a2b4843fdbe6285080995721.png

    5、打开表xstable的设计界面,选中xsid字段,在下面的Auto Increment前打上对勾,即选择为自动增长。

    57793529114ef955a604eda6f83984ae.png

    6、在查询页面,再次执行xsid为空的sql语句,则执行成功,且可以多次执行。打开xstable表,查看数据,发现已经成功插入了多条数据,且xsid值每次自动增长1。设置了自增长后,sql也可以忽略xsid字段,直接写成图三的形式。

    57782f16b1af777e14dcf723573aea6d.png

    7、打开表xstable的设计界面,图中Auto Increment 设置的数值为自动增长的初始值。

    6eaae334f90962134a6ee9879e3c78e9.png

    展开全文
  • 今天写项目调用insert方法的时候,生成的sql主键,数据库能修改,最后查看源码发现mybatisPlus的主键策略默认是NONE 下面普及一下mybatisPlus的主键策略 AUTO,//数据库自增 依赖数据库 NONE,// 表示该类型未甚至...
  • MySQL建表时不设置主键

    千次阅读 2021-02-01 05:36:51
    翻译一下就是:如果没有主动设置主键,就会选一个包含NULL的第一个唯一索引列作为主键列,并把它用作一个聚集索引。如果没有这样的索引就会使用行号生成一个聚集索引,把它当做主键,这个行号6bytes,自增。可以...
  • MySQL的没有设置主键带来的问题

    千次阅读 2021-04-04 16:48:49
    文章目录mysql定义了主键主键达到最大值mysql没有定义主键主键达到最大值缺少...如果没有定义主键,InnoDB会自动添加一个可见的、长度为6字节的row_id列,即能被任何查询访问,也能被内部使用。该row_id由
  • mysql 创建设置主键自增

    千次阅读 2021-01-25 16:47:42
    mysql 创建设置主键自增mysql 创建:mysql> create table user(-> userid int(4) primary key not null auto_increment,-> username varchar(16) not null,-> userpassword varchar(32) not null-...
  • SQL常用语句|创建,设置主键......

    千次阅读 2021-02-05 05:11:24
    新建create table [表名]([自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,[字段1] nVarChar(50) default \'默认值\' null ,[字段2] ntext null ,[字段3] datetime,[字段4] money null ,[字段5] int default 0,...
  • SQLServer 对已有数据表添加自增主键

    千次阅读 2021-01-30 09:27:58
    最近在做老表的数据整理,发现有的没有主键标识,.NET Core 无法一键生成模型,需要带有主键才可以,所以需要针对已有数据添加主键,这是我找到的两种方式。1. 主键为int 或者bigintALTER TABLE Atest ADD ...
  • 慕的地10843补充一点,希望有些帮助。...1)InnoDB通常根据主键值(primarykey)进行聚簇2)如果没有创建主键,则会用一个唯一且为空的索引列做为主键,成为此的聚簇索引3)上面二个条件都满足,InnoDB会自己创建一...
  • 主键是数据库确保数据行在整张唯一性的保障。它是定位到一条记录并且确保不会重复存储的逻辑机制。主键也同时可以被外键引用来建立之间的关系。难点是选择那一列作为主键。大多数中的每个属性...
  • mysql建表时设置主键的方法

    千次阅读 2021-02-02 09:04:51
    mysql建表时设置主键的方法发布时间:2020-10-10 15:17:28来源:亿速云阅读:119作者:小新mysql建表时...设置方法:在“CREATE TABLE”语句中,通过“PRIMARY KEY”关键字来指定主键,语法格式“字段名 数据类型 PR...
  • MySQL 插入数据时:主键不能为空怎么才能再插入数据时使主键设置为NULL 主键设置为自增auto_increment 可以再中使用alter table students modify id int auto_increment; 这里写自定义目录标题MySQL 插入数据时:...
  • oracle怎样设置主键?_数据库

    千次阅读 2021-05-07 04:58:07
    oracle设置主键的要领:1、在建立时定义主键 ,代码为【constraint TF_B_AIR_CONFIG_PK primary key(TYPE_ID)】;2、在建立后,运用alter table语法设置主键。 oracle设置主键的要领:一、什么是主键主键...
  • mysql如何给表设置组合主键

    千次阅读 2021-01-28 12:52:21
    软件安装:装机软件必备包SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。...mysql 中有时候会遇到多个字段来表示数据的唯一性...
  • 数据库主键设置

    千次阅读 2021-01-21 14:07:04
    2.使用自增主键的场景:a:中找不出3个以内字段可以表示的业务主键b:没有集中大量的插入操作c:使用自增id作为外键(即id变化影响系统逻辑和功能)此外自增主键的规律很明显,为了让别...
  • 修改数据表之添加主键约束

    千次阅读 2020-11-09 15:21:11
    需要对这个中的一个字段设置主键: alter table table_name add primary key(id); alter table表名add primary key(字段名); 2.一个创建之后, 需要对这个中的一个字段设置为唯一约束: alter table ...
  • MySQL InnoDB数据表缺少主键会怎样

    千次阅读 2020-07-03 17:46:05
    MySQL数据表使用InnoDB作为存储引擎的时候,数据结构就是使用B+树,而数据本身存储在主键索引上,也就是通常所说的聚簇索引,也就是每个都需要有个聚簇索引树,但是,在建表的时候却发现可以不用指定主键,那么...
  • MySql数据库设置主键

    千次阅读 2020-12-28 21:48:22
    在创建时添加主键 设置主键的关键字primary key 第一种 create table tests( tid int(11) not null auto_increment, //not null是设置该字段能为null;auto_increment设置该字段自增长 tname varchar(255) ...
  • access设置主键

    千次阅读 2021-01-17 18:34:02
    在access中设置主键,指的是把某个数据表的某个字段设置为关键字段!下面我们先大体来了解主键是何概念!所谓的主键,其实并非大家想象中的那么神秘,主键其实也是一个字段而已,只不过,该字段中的任何数据,都是...
  • 项目使用了 oracle 数据库,在一张设置主键上,主键数据竟然还能插入重复的数据主键设置包含了唯一键,那么到底是怎么出现这样的情况呢? 原因分析: 数据吧的主键虽然设置了,但是没有启动,这才导致可以...
  • oracle给已有数据增加自增主键

    千次阅读 2019-07-28 10:00:25
    oracle给已有数据增加自增主键: –给已有数据增加主键,并且自增: –1、先右键编辑,增加一个id字段,可以为空。 select * from emp; –2、给id字段设置值: update emp a set a.id = rownum ; commit; ...
  • mysql如何添加主键

    千次阅读 2021-01-30 07:47:54
    主键(PRIMARY KEY)”的完整称呼是“主键约束”。...主键约束即在中定义一个主键来唯一确定中每一行数据的标识符。主键可以是中的某一列或者多列的组合,其中由多列组合的主键称为复合主键主键应该...
  • 在创建设置主键为自增长,在插入数据是由于mybatis-plus会自动插入一个id到实体对象,报类型匹配的错误,错误如下 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis....
  • 在MySQL中如何设置主键和外键

    千次阅读 2021-01-19 12:59:41
    工具/原料电脑 MySQL方法/步骤设置主键:1、通过终端进入到mysql命令行工具。2、通过use关键字进行到目标数据库里。3、如原已有主键,先把原来的主键删除掉,通过DROP PRIMARY KEY命令:ALTER TABLE `jingyan` ...
  • 首先执行以下插入数据的...报错原因是自增主键的序列值与当前主键的字段值匹配,我们现在需要设置当前最大主键值为序列值,执行下面的语句: SELECT setval('pgsql_users_id_seq', (SELECT MAX(id) FROM pgsql...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 580,825
精华内容 232,330
关键字:

数据表不设置主键