-
2022-02-22 00:01:45
1.不要选择业务字段作为主键
2.在不复杂的系统中可以选择自增字段作为主键
3.如果业务系统比较复杂,可以选择手动赋值字段作为主键.
更多相关内容 -
用Navicat Premium 15找主键PRIMARY KEY
2022-05-23 20:35:47表右侧点击DDL 切换,看到PRIMARY KEY即为主键 例表“info”主键PRIMARY KEY 为(`id`)表右侧点击DDL 切换,看到PRIMARY KEY即为主键
例表“info”主键PRIMARY KEY 为(`id`)
-
Oracle主键
2021-05-07 06:38:31在本教程中,您将学习如何使用Oracle PRIMARY KEY约束来管理表的主键。主键介绍主键是表中列的唯一标识表中的行的一列或多列的组合。以下是设置列成为主键的规则:主键列不能包含NULL值或空字符串。主键值在整个表中...在本教程中,您将学习如何使用Oracle PRIMARY KEY约束来管理表的主键。
主键介绍
主键是表中列的唯一标识表中的行的一列或多列的组合。
以下是设置列成为主键的规则:
主键列不能包含NULL值或空字符串。
主键值在整个表中必须是唯一的。
主键值不应随时间而改变。
根据这些规则,以下是对主键的建议:
首先,主键应该是没有意义的。 有时,您可能需要使用有意义的数据,例如:社会安全号码(SSN),车辆识别号码(VIN),电子邮件和电话号码等,这些数据被认为是唯一的。 但是,您不知道电子邮件或电话号码何时更改或被他人重复使用。 在这种情况下,会造成很多数据问题。
其次,主键应该是紧凑的。 主键通常是数字的,因为Oracle通常处理数字的速度比任何其他数据类型更快。
注意:尽管在Oracle中不是强制性的,但在每个表中都有一个主键是最佳实践。
要在表中创建主键,可以使用PRIMARY KEY约束。
Oracle PRIMARY KEY约束示例
通常,在创建表时创建表的主键。另外,通过使用ALTER TABLE语句,可以在创建表之后再添加一个主键。
1. 创建由一列组成的主键
以下CREATE TABLE语句创建purchase_orders表:
CREATE TABLE purchase_orders (
po_nr NUMBER PRIMARY KEY,
vendor_id NUMBER NOT NULL,
po_status NUMBER(1,0) NOT NULL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL
);
purchase_orders表具有创建采购订单的四列采购订单号(po_nr),供应商编号(vendor_id),采购订单状态(po_status)以及时间戳(created_at)。
在此表中,通过使用PRIMARY KEY子句将po_nr列定义为主键。
请注意,PRIMARY KEY子句隐式地将po_nrcolumn设置为NOT NULL,因此不必像以下那样定义列:
po_nr NUMBER NOT NULL PRIMARY KEY
本示例中的PRIMARY KEY约束是内联约束,因为它与po_nr列位于同一行。
考虑下面的语句 -
CREATE TABLE purchase_orders (
po_nr NUMBER,
vendor_id NUMBER NOT NULL,
po_status NUMBER(1,0) NOT NULL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
CONSTRAINT pk_purchase_orders PRIMARY KEY(po_nr)
);
这个例子使用PRIMARY KEY约束作为表约束。注意以下子句:
CONSTRAINT pk_purchase_orders PRIMARY KEY(po_nr)
另外,上面语句中明确地给PRIMARY KEY主键约束分配了一个名称:pk_purchase_orders。
2. 创建由多个列组成的主键
以下语句创建采购订单项目表:
CREATE TABLE purchase_order_items (
po_nr NUMBER NOT NULL,
item_nr NUMBER NOT NULL,
product_id NUMBER NOT NULL,
quantity NUMBER NOT NULL,
purchase_unit NUMBER NOT NULL,
buy_price NUMBER (9,2) NOT NULL,
delivery_date DATE,
PRIMARY KEY (po_nr, item_nr)
);
在此示例中,purchase_order_items表的主键由两列组成:po_nr和item_nr。 这意味着这些列的值的组合唯一地标识采购订单行项目。
此示例没有使用CONSTRAINT子句为PRIMARY KEY约束显式分配一个名称。 因此,Oracle隐式分配了主键约束,系统生成的名称(如SYS_C0010617)。
2. 将主键添加到表中
有时,您可能需要将主键约束添加到一个存在的表。要做到这一点,只需要使用ALTER TABLE语句,如下所示:
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
PRIMARY KEY (column1, column2, ...);
以下示例首先创建vendors表,然后向其添加主键约束:
CREATE TABLE vendors (
vendor_id NUMBER,
vendor_name VARCHAR2(255) NOT NULL,
address VARCHAR2(255) NOT NULL
);
ALTER TABLE vendors
ADD CONSTRAINT pk_vendors PRIMARY KEY (vendor_id);
3. 删除Oracle PRIMARY KEY约束
一般很少会从表中删除PRIMARY KEY约束。 如果必须要删除主键,则使用以下ALTER TABLE语句。
ALTER TABLE table_name
DROP CONSTRAINT primary_key_constraint_name;
例如,可以按照以下方式删除vendors表的主键约束:
ALTER TABLE vendors
DROP CONSTRAINT pk_vendors;
可以使用以下语句删除表的主键:
ALTER TABLE table_name
DROP PRIMARY KEY;
例如:
ALTER TABLE vendors
DROP PRIMARY KEY;
4. 启用/禁用Oracle PRIMARY KEY约束
要在将大量数据加载到表中或更新海量数据时需要提高性能,可以暂时禁用PRIMARY KEY约束。
要禁用表的主键约束,可以使用ALTER TABLE语句:
ALTER TABLE table_name
DISABLE CONSTRAINT primary_key_constraint_name;
或者,
ALTER TABLE table_name
DISABLE PRIMARY KEY;
例如,要禁用purchase_orders表的主键约束,请使用以下语句:
ALTER TABLE purchase_orders
DISABLE CONSTRAINT pk_purchase_orders;
或者,
ALTER TABLE purchase_orders
DISABLE PRIMARY KEY;
要启用主键约束,请使用以下ALTER TABLE语句:
ALTER TABLE table_name
ENABLE CONSTRAINT primary_key_constraint_name;
或者,
ALTER TABLE table_name
ENABLE PRIMARY KEY;
以下示例启用了purchase_orders表的PRIMARY KEY约束:
ALTER TABLE purchase_orders
ENABLE CONSTRAINT pk_purchase_orders;
或者,
ALTER TABLE purchase_orders
ENABLE PRIMARY KEY;
在本教程中,您学习了如何使用Oracle PRIMARY KEY约束,如创建,添加,禁用,启用和删除表的主键。
-
主键、外键
2021-08-28 19:54:50目录 主键(PRIMARY KEY) 外键(FOREIGN KEY) 主键(PRIMARY KEY) ...主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。 主键应该遵守下面的规则: (1)每个表只能定义一个主键...目录
主键(PRIMARY KEY)
主键(PRIMARY KEY)的完整称呼是“主键约束”。
MySQL主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行。
这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。
主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。
- 主键应该遵守下面的规则:
(1)每个表只能定义一个主键。
(2)主键值必须唯一且不能为 NULL,即表中不可能存在两行数据有相同的主键值。这是唯一性原则。
(3)每个表可以设置一个主键,并且只能有一个主键。
(4)一个列名只能在复合主键列表中出现一次。
(5)复合主键不能包含不必要的多余列。
外键(FOREIGN KEY)
外键是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。
主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值(指的是可以为 null),若不为空值,则每一个外键的值必须等于主表中主键的某个值。
- 外键应该遵守下面的规则:
(1)主表必须已经存在于数据库中,或者是当前正在创建的表。
(2)必须为主表定义主键。
(3)主键不能包含空值,但允许在外键中出现空值。
(4)外键中列的数目必须和父表的主键中列的数目相同,必须与主表的复合主键对应上。
(5)外键中列的数据类型必须和主表主键中对应列的数据类型相同。
注意:
不能直接删除主表的数据,除非先把从表的相关联的数据删除,才可以删除主表的东西。
从表的外键字段数据不能随便插入主表主键字段没有的数据。
-
为什么说InnoDB必须要有主键并且推荐使用自增整型主键呢?
2021-01-20 12:27:501.InnoDB存储引擎的数据结构必须需要一个主键才可以组织起来,如果用户使用InnoDB存储引擎建立表的时候,没有指定主键,则Mysql会自动的帮你找到一个合适的唯一索引作为主键,若找不到符合条件唯一索引条件的字段时... -
如何区分SQL数据库中的主键与外键
2020-09-10 20:00:57主要介绍了如何分清SQL数据库中的主键与外键,这里简单介绍下,方便需要的朋友 -
sql server查找表主键的多种方式
2020-10-21 22:39:271.利用存储过程查出表明和主键名 exec sp_pkeys 'test' 2.存储在临时表或变量中 方法一存储在变量 BEGIN Declare @tablevar table( TABLE_QUALIFIER varchar(10) null, TABLE_OWNER varchar(10) null, TABLE_... -
达梦8,sql取得所有表,所有字段,主键,自增
2021-07-27 12:49:471.获得某个用户下,所有表名,表注释,创建时间,修改时间 select a.... user_ind_columns表是包含主键信息,表名、列名、主键名 SYSCOLUMNCOMMENTS表是列的注释信息。 syscolumns是包括列的自增信息info2就是是否自增 -
快速区分主键与外键
2019-10-08 20:16:57主键与外键的区分 主键用来唯一标识一条记录,不允许有重复,不允许为空 作用:用来保证数据的完整性 个数:only one 外键,表的外键是另一个表的主键,外键可以有重复,也可为空 作用:用来和其他表建立联系 个数:... -
开发技巧-如何获取表记录的主键
2019-11-13 14:49:47在Z平台中每个表都有一个zid字段,该字段就是该表的主健字段,在很多开发场景中都需要使用,那么本章节就说说如何获取表记录的主键。 第一、直接查询数据库 有通过的同学可以通过MySQL数据库工具,直接查找到某... -
SQLServer增删改查,创建主键约束、唯一约束、外键约束
2020-09-24 16:29:42SQLServer增删改查,创建主键约束、唯一约束、外键约束 SQL语句顺序如下: SELECT 子句 FROM 子句 where 子句 group by 子句 having 子句 order by 子句 -
找出没有主键的表
2021-05-07 12:09:36因此我们需要找出没有主键的表,然后人工加个主键。脚本如下:#!/bin/bash# 找出没有主键的表 (排除MySQL自带的SCHEMA)source /etc/profileLOG="/tmp/nopk.log_$(date +%F)"user='root'host='localhost'pass='... -
怎么分辨数据库的主键和外键?
2018-05-10 17:35:00其二是利用这种方法可以在描述多对多关系的连接表中使用两个外部键来作为主键,我也反对这种做法,理由是:复合主键常常导致不良的外键,即当连接表成为另一个从表的主表,而依据上面的第二种方法成为这个表主键的一... -
mysql数据库笔记(九)建模和设计(E-R图、范式、主键和外键)
2019-12-16 19:28:12也可以找一个没有意义的列做主键,就是用来唯一标识一行记录的。 我们可以让多个列联合在一起做表中的主键,那么它就是联合主键,要求这几个列的值联合在一起是非空唯一。 外键: 表中的某一个列声明为外键列,... -
get和load根据主键查询的区别
2016-12-27 21:54:17在Hibernate3中,根据主键查询有两种方式,一般情况下,他们两效果是一样的,都能查询到我们想要的结果。而实际上,二者却有很多不同之处。*1.发送SQL的时机: load这个方法采用了一个技术.lazy延迟加载(懒加载).真正... -
自增 主键
2021-01-22 17:41:49我们前面提到过自增主键,由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧凑。 自增值的实现机制 1.存储 表定义里面出现了一个 AUTO_INCREMENT=2,表示下一次插入数据时,如果... -
Oracle/MySQL/PostgreSQL数据库获取表的主键及字段信息(整理)
2020-04-30 00:26:30一、获取表的主键字段 1、Oracle数据库 SELECT COLUMN_NAME AS column_name FROM user_cons_columns cu, user_constraints au WHERE cu.constraint_name = au.constraint_name AND au.OWNER = 'TANG' ... -
mysql 修改主键
2021-03-15 03:13:23mysql 修改主键2018-09-19 09:34阅读数 12ALTER TABLE `test2` DROP PRIMARY KEY ,ADD PRIMARY KEY ( `id` )重设主键字段有时数据库操作时需要将一个主键修改为联合主键或者把主键改为其他列,这时候单纯的add ... -
Oracle数据库联合主键
2021-05-04 05:55:021、定义:主键:在Oracle中,主键指能唯一标识一条记录的单个数据表列或联合的数据表列(联合主键|复合主键)。主键用到的数据 表列数据不能包含空值。而且,一张表只能包含一个主键。2、作用:数据表的联合主键组合不... -
access设置主键
2021-01-17 18:34:02在access中设置主键,指的是把某个数据表的某个字段设置为关键字段!下面我们先大体来了解主键是何概念!所谓的主键,其实并非大家想象中的那么神秘,主键其实也是一个字段而已,只不过,该字段中的任何数据,都是... -
sql主键_SQL主键
2020-07-17 05:24:52sql主键In a world driven with data all over, it is very easy to get duplicate data. The nightmare of any database table designer is to create a table with the possibility of duplicate data insertion. ... -
mysql主外键约束怎么写?
2021-03-16 19:00:37mysql主键约束主键(PRIMARY KEY)的完整称呼是“主键约束”,是 MySQL 中使用最为频繁的约束。一般情况下,为了便于 DBMS 更快的查找到表中的记录,都会在表中设置一个主键。1、在创建表时设置主键约束在 CREATE ... -
MySQL 主键性能解析
2021-11-17 16:10:29在 InnoDB 中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表。 InnoDB 使用了 B+ 树索引模型,整张表的数据是存储在主键索引对应的B+树中的 InnoDB 可操作的最小粒度是页(16k),页... -
在 MySQL 中,主键约束分为两种:一种是单字段主键,另一种是多字段主键。_学小易找答案
2021-01-19 02:46:31"回家之后,他把一把盐放进嘴里,结果又苦又咸,这则谚语给我们的启示是: 【多选题】下列选项中,包含矛盾双方相互依存、相互转化思想的有: 【判断题】在 MySQL 中,主键约束分为两种:一种是单字段主键,另一种是多字段... -
主键索引就是聚集索引?MySQL 索引类型大梳理
2022-03-24 12:01:59之前松哥在前面的文章中介绍 MySQL 的索引时,有小伙伴表示被概念搞晕了,主键索引、非主键索引、聚簇索引、非聚簇索引、二级索引、辅助索引等等,今天咱们就来捋一捋这些概念。 1. 按照功能划分 按照功能来划分,... -
主键自增理解
2022-01-29 18:23:20每次重启后,第一次打开表的时候,都会去找自增值的最大值max(id),然后将max(id)+1作为这个表当前的自增值。 在MySQL8.0版本,将自增值的变更记录在redo log日志中,重启的时候依靠redo log日志恢复重启之前的值。 自... -
java主键注释
2021-03-20 09:14:39######老哥你说的太对了,一看到300多个表我就无力了,网上找了半天还没想明白怎么搞,现在在想是不是能用hibernate的xml文件半点儿神马事儿######代码生成器,9iuspring项目中有一个代码生成器,你可以看下######... -
主键和外键
2020-10-28 12:30:47三范式: 列不可以拆分,唯一标识,引用主键 关系及存储: 1对1 , 1对多,多对多 主键:primary key 主键就是数据行的唯一标识。不会重复的列才会当主键 一个表中只能有一个主键. 当建立主键后,默认会建立索引,而... -
MySQL自增主键和随机字符串主键insert性能对比
2021-02-01 06:12:47Query OK, 0 rows affected (0.01 sec) 找了个源表,一千多万的数据 mysql> select count(*) from test01; +----------+ | count(*) | +----------+ | 11888222 | +----------+ 1 row in set ... -
java杂谈 - list集合 找出主键一样的 并且统计个数java8操作
2021-01-05 18:12:05list集合 找出主键一样的 并且统计个数 List<Map<String,Object>> list = new ArrayList<>(); Map<String,Object> map = new HashMap<>(); map.put("id","11"); map.put("name","ssl...