-
2021-01-28 00:47:30
关系数据库中,主键是(1___),主键的建立有(2___)种方法,当运用Transact-SQL语句创建主键时,可以是(3___)。
⑴
A、为标识表中唯一的实体
B、创建唯一的索引,允许空值
C、只允许以表中第一字段建立
D、允许有多个主键的
⑵
A、一
B、二
C、三
D、四
⑶
A、create table table1(column1 char(13) not null primary,column2 int not) on primary;
B、alter table table1 with notcheck add constraint [PK_table1] primary key nonclustered ( column1) on primary;
C、alter table table1 column1 primary key ;
D、alter table table1 column1 char(13) primary key ;
更多相关内容 -
如何区分SQL数据库中的主键与外键
2021-01-19 22:14:13一、什么是主键、外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如 : 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一... -
数据库中的主键与外键的关系
2021-09-25 10:56:58文章目录一、主键、外键:1.概念2.区别3.作用4.举例:5....一、主键、外键: 1.概念 SQL的主键表示唯一标识一条记录,...外键与主键相对,作用就是通过主外键的之间关系使对张表中的数据更好的关联。 2.区别 主键——一个一、主键、外键:
1.概念
SQL的主键表示唯一标识一条记录,不能有重复的,不允许为空。例如:一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
SQL的外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。外键与主键相对,作用就是通过主外键的之间关系使对张表中的数据更好的关联。
2.区别
主键——一个表主键只能有一个。
外键——一个表可以有多个外键。
3.作用
主键——用来保证数据完整性。
外键——用来和其他表建立联系用的。4.举例:
关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键。
比如:
学生表(学号,姓名,性别,班级),其中每个学生的学号是唯一的,学号就是一个主键;
课程表(课程编号,课程名,学分),其中课程编号是唯一的,课程编号就是一个主键;
成绩表(学号,课程号,成绩),成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以,学号和课程号的属性组是一个主键。(必须是属性组,一个表只能有一个主键)
成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键;同理,成绩表中的课程号是课程表的外键。
5.总结
定义主键和外键主要是为了维护关系数据库的完整性,总结一下:
1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
2.外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。 -
关系型数据库:主键知识
2020-09-29 10:33:27在关系数据库中,一张表中的每一行数据被称为一条记录。一条记录就是由多个字段组成的。例如,students表的两行记录: id class_id name gender score 1 1 小明 M 90 2 1 小红 ...在关系数据库中,一张表中的每一行数据被称为一条记录。一条记录就是由多个字段组成的。例如,
students
表的两行记录:id class_id name gender score 1 1 小明 M 90 2 1 小红 F 95 每一条记录都包含若干定义好的字段。同一个表的所有记录都有相同的字段定义。
对于关系表,有个很重要的约束,就是任意两条记录不能重复。不能重复不是指两条记录不完全相同,而是指能够通过某个字段唯一区分出不同的记录,这个字段被称为主键。
例如,假设我们把
name
字段作为主键,那么通过名字小明
或小红
就能唯一确定一条记录。但是,这么设定,就没法存储同名的同学了,因为插入相同主键的两条记录是不被允许的。对主键的要求,最关键的一点是:记录一旦插入到表中,主键最好不要再修改,因为主键是用来唯一定位记录的,修改了主键,会造成一系列的影响。
由于主键的作用十分重要,如何选取主键会对业务开发产生重要影响。如果我们以学生的身份证号作为主键,似乎能唯一定位记录。然而,身份证号也是一种业务场景,如果身份证号升位了,或者需要变更,作为主键,不得不修改的时候,就会对业务产生严重影响。
所以,选取主键的一个基本原则是:不使用任何业务相关的字段作为主键。
因此,身份证号、手机号、邮箱地址这些看上去可以唯一的字段,均不可用作主键。
作为主键最好是完全业务无关的字段,我们一般把这个字段命名为
id
。常见的可作为id
字段的类型有:-
自增整数类型:数据库会在插入数据时自动为每一条记录分配一个自增整数,这样我们就完全不用担心主键重复,也不用自己预先生成主键;
-
全局唯一GUID类型:使用一种全局唯一的字符串作为主键,类似
8f55d96b-8acc-4636-8cb8-76bf8abc2f57
。GUID算法通过网卡MAC地址、时间戳和随机数保证任意计算机在任意时间生成的字符串都是不同的,大部分编程语言都内置了GUID算法,可以自己预算出主键。
对于大部分应用来说,通常自增类型的主键就能满足需求。我们在
students
表中定义的主键也是BIGINT NOT NULL AUTO_INCREMENT
类型。如果使用INT自增类型,那么当一张表的记录数超过2147483647(约21亿)时,会达到上限而出错。使用BIGINT自增类型则可以最多约922亿亿条记录。
联合主键
关系数据库实际上还允许通过多个字段唯一标识记录,即两个或更多的字段都设置为主键,这种主键被称为联合主键。
对于联合主键,允许一列有重复,只要不是所有主键列都重复即可:
id_num id_type other columns... 1 A ... 2 A ... 2 B ... 如果我们把上述表的
id_num
和id_type
这两列作为联合主键,那么上面的3条记录都是允许的,因为没有两列主键组合起来是相同的。没有必要的情况下,我们尽量不使用联合主键,因为它给关系表带来了复杂度的上升。
小结
主键是关系表中记录的唯一标识。主键的选取非常重要:主键不要带有业务含义,而应该使用BIGINT自增或者GUID类型。主键也不应该允许
NULL
。可以使用多个列作为联合主键,但联合主键并不常用。
-
-
关于关系型数据库基本知识(主键、外键、一对一、一对多、多对一等).docx
2021-04-13 15:48:44关于关系型数据库基本知识(主键、外键、一对一、一对多、多对一等),适合了解数据库最基本知识的初学者阅读 -
数据库:“主键”
2021-05-12 11:39:26数据库☞主键 本文主要是根据对数据库的相应学习,并对数据库中的一个重要的知识点——主键 进行总结!...主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。数据库模式从理论上的逻辑设计转换为实际数据库☞主键
本文主要是根据对数据库的相应学习,并对数据库中的一个重要的知识点——主键 进行总结!
中间也会穿插其他的一些知识点,例如外键、关系型数据库吖等。
前言
主键的应用是很重要的,这对于数据库的设计十分重要!泛型【在整理中~后贴哦】
一、概念
主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。数据库模式从理论上的逻辑设计转换为实际的物理设计。而主键和外键的结构是这个设计过程的症结所在。
二、设计原则
关系数据库依赖于主键【它是数据库物理模式的基石】。
主键在物理层面上只有两个用途:
(1)惟一地标识一行。
(2)作为一个可以被外键有效引用的对象。- 原则1:主键应当是对用户没有意义的
其实从设计角度来说主键对用户无意义最好,为什么呢?
主键最主要的作用就是保证实体的完整性,加快数据库的操作速度。但往往在范式的规范下,有时候主键的组成不止由单属性组成,此时在操纵数据库中的数据时会比较麻烦 。
另外,有初学者会想,主键不是唯一么?主键也不能为空等等。很多时候简单的表格会以用户名这种作为主键,但是不要忘记当用户数量过于庞大时,会带来很多的麻烦,亦或者说,如果你想用唯一属性可以使用UNIQUE,而主键有时候有自增的功能可以省去很多的麻烦等等。- 原则2: 主键应该是单列的
就像我上一个原则里说的一样,主键有时候会由多属性组成,此时操作起来会出现很多问题(DuplicateKeyException…),主键应该是单列的以便提高连接和筛选操作的效率。
- 原则3:永远也不要更新主键
主键在实际中是可以被更新的,但是设计的时候最好考虑的是不要更新主键。
- 原则4:主键不应包含动态变化的数据
如时间戳、创建时间列、修改时间列等这些动态变化的数据不应该被定义为主键;主键是不可被直接修改的。
三、SQL定义主键约束(实体完整性)
在实例说明之前,先说一下主键的作用:
(1)保证实体的完整性;
(2)加快数据库的操作速度;
(3)在表中添加新记录时,DBMS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复;
(4)DBMS自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。栗子:(具体的e-r图等,在这篇文章☞关系型数据库总结—易理解!都有介绍,可以观看哦~)
读者表 Reader/* * 单属性:主键只有一个属性组成 */ /*一、主键约束:列级完整性约束*/ CREATE TABLE m_reader ( rno varchar(10) PRIMARY KEY, --- 设置为主键 /*列级完整性约束条件*/ rname varchar(10) UNIQUE not NULL, --- 不许取空值 rgender varchar(4) DEFAULT '男' CONSTRAINT consgender CHECK (sgender IN('男', '女')), --- (下)设置默认值男,约束选项为男女 rtel char(11), rmajor varchar(10), rregist date, rtype varchar(10), FOREIGN KEY (rtype) REFERENCES m_readerType(rtype) ----(参照完整性)声明是什么表中的外键(m_readerType:读者类型表) ) /*一、主键约束:表级完整性约束*/ CREATE TABLE m_reader ( r_no varchar(10) NOT NULL, --- 设置为主键 /*列级完整性约束条件*/ r_name varchar(10) UNIQUE not NULL, --- 不许取空值 r_gender varchar(4) DEFAULT '男' CONSTRAINT consgender CHECK (sgender IN('男', '女')), --- (下)设置默认值男,约束选项为男女 r_tel char(11), r_major varchar(10), r_regist date, r_type varchar(10), PRIMARY KEY (r_no), --- 设置为主键 /*表级完整性约束条件*/ FOREIGN KEY (r_type) REFERENCES m_readerType(r_type) ----(参照完整性)声明是什么表中的外键(m_readerType:读者类型表) ) /*多属性:只能用表级完整性约束*/ ---转换一下借阅表,将借阅编号暂删除。 CREATE TABLE m_borrow ( b_time date , b_num int , b_ReturnTime date, r_no varchar(10), --外键 b_no varchar(10), --外键 PRIMARY KEY (r_no,b_no), --- 设置为主键 /*表级完整性约束条件*/表示由读者编号和图书编号共同决定了一次借阅信息。 FOREIGN KEY (r_no) REFERENCES m_reader(r_no), FOREIGN KEY (b_no) REFERENCES m_book(b_no) ----(参照完整性)声明是什么表中的外键(m_book:图书信息表) )
四、在不同的关系数据库中的主键选取策略
栗子:管理员表
(1)自动增长型字段
- MySQL
/* 把表的主键设为auto_increment类型,数据库就会自动为主键赋值。 */ CREATE TABLE m_user ( m_id int auto_increment PRIMARY KEY NOT NULL, m_name varchar(10) NOT NULL, --- /*设置为主键,自增*/ m_password varchar(10) not NULL ) insert into m_user values('name1','1234'); select m_id from m_user;
- Oracle
/* * 为每张表的主键创建一个单独的序列,然后从这个序列中获取自动增加的标识符,把它赋值给主键。 * 这个序列的起始值为1,增量为2 */ create sequence m_name_seq increment by 2 start with 1; CREATE TABLE m_user ( m_id int PRIMARY KEY NOT NULL, m_name varchar(10) NOT NULL, --- /*设置为主键,自增*/ m_password varchar(10) not NULL ) /* curval:返回序列的当前值 nextval:先增加序列的值,然后返回序列值 */ insert into m_user values(m_name_seq.nextval, 'name1','1234'); select m_id from m_user;
- Sql Server
/* 如果把表的主键设为identity类型,数据库就会自动为主键赋值。 */ CREATE TABLE m_user ( m_id int identity(1,1) PRIMARY KEY NOT NULL, m_name varchar(10) PRIMARY KEY NOT NULL, --- /*设置为主键,自增*/ m_password varchar(10) not NULL ) insert into m_user values('name1','1234'); select m_id from m_user;
(2)手动增长型字段
在插入语句时,自定义主键字段插入相应类型的数据即可。
事实上,还有许多的主键选取策略,在这边不再深入总结。
上述的这些已经能够对主键有一个比较清晰的认识啦! -
关系型数据库中主键(primary key)和外键(foreign key)的概念。
2020-08-20 11:18:25刚接触关系型数据库的同学,会听过主键和外键的概念。这是关系型数据库的基本概念,需要清楚理解。今天我就以简洁的语言总结一下这个概念。 主键。一句话概括:一张表中,可以用于唯一标识一条记录的字段组(或者说... -
关系型数据库表结构的两个设计技巧
2020-12-14 23:22:48主键字段,是表中每一行都不会有重复数据的字段。 主键,可以分为两种:物理主键和逻辑主键。 每一张数据库的表,都使用自增长的id字段作为物理主键。 多表之间的外键关联,都关联其他表的物理主键,也是... -
数据库——创建数据库+创建表与主键
2022-03-29 20:39:30文章目录一、创建数据库1、创建默认数据库2、创建指定参数位置数据库3、添加NDF数据文件二、创建表 一、创建数据库 1、创建默认数据库 # 创建一个默认的数据库test create database test 创建完之后点击执行,则... -
数据库的主键
2021-08-16 10:40:571、数据库的每张表只能有一个主键,不可能有多个主键。 2、所谓的一张表多个主键,我们称之为联合主键。 注:联合主键:就是用多个字段一起作为一张表的主键。 3、主键的主键的作用是保证数据的唯一性和完整性,同时... -
数据库中的主键与外键的关系,通俗易懂
2017-12-16 16:13:08关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如学生表(学号,姓名,性别,班级)其中每个学生的学号是唯一的,学号就是一个主键课程表... -
数据库中的主键和外键的关系
2019-09-23 11:28:15(百度百科):数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新... -
关系型数据库和主键外键
2021-01-11 21:55:07多对多:必须通过单独的一张表来实现(一个老师多个学生,一个学生多个老师)班级一张表,老师一张表,班级和老师的关系一张表 主键: 定义:能够唯一标示一个事物的一个字段或者多个字段的组合 含有主键的叫做主键表... -
关系型数据库中联合主键和唯一索引的应用
2018-12-13 13:53:53在这种关系表中,我们可以确定的是,学生和课程关系虽然是多对多,但一个确定的学生id和一个确定的课程id在关系表中只能存在一个。如下图所示:,业务逻辑就是一个学生只能有当前课程的一个分数。 t_stu... -
数据库表中主键的意义
2018-12-17 15:39:54借鉴:http://blog.sina.com.cn/s/blog_804c1dce0100zj9j.html -
数据库表的主键、唯一约束和索引
2021-11-23 17:31:46MySQL 主键约束是一个列或者列的组合(其中由多列组合的主键称为复合主键),其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。。 (1)一个表可以没有主键,而且最多... -
数据库中复合主键与联合主键
2020-10-16 10:27:05复合主键:数据库表的主键由两个及以上的字段组成。 例如: CREATE TABLE `asm_device_config_info` ( `asmModel` varchar(32) NOT NULL COMMENT '自助机型号', `deviceType` varchar(32) NOT ... -
数据库表中的主键和外键
2020-04-01 20:36:53那么设计数据库的时候就应该在学生表内存放班级的ID作为外键,为什么不在班级表内放学生呢? 因为,你想一想班级表内如果放学生那么记录可能就是这样: 1班ID 1班 xx同学id 1班ID 1班 xx同学id .. 这是不允许的,... -
数据库主键的设计
2022-02-11 13:58:04主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。主键和外键的结构是将数据库模式从理论上的逻辑设计转换为实际的物理设计。一旦将所设计... -
关于数据库一张表有几个主键
2021-09-15 22:20:55关系型数据库中,用户在建表时,只能有一个主键,不可能有多个主键的,但有时候我们碰到关系S和我们的关系C存在多对多的联系,在关系数据库中,多对多联系必须建立一个关系模式,而该模式的码是联系两端实体的码加上... -
MySQL数据库主键重复原因分析及处理.pdf
2021-10-10 09:28:10MySQL数据库主键重复原因分析及处理.pdf -
浅谈关系型数据库主键设置策略
2021-03-14 21:21:12几乎大多数的应用都会使用关系型数据库进行数据存储,而主键一定是标配。那么,在您的应用中,通常使用什么方案来满足业务扩张呢?下面简单介绍普遍做法以及改进之道。 第一层:业务布局之初。众所周知,企业业务刚... -
数据库中的主键、超键、候选键、外键
2021-07-14 11:17:491、超键:在关系中能唯一标识元组的属性集称为关系模式的超键...4、外键:如果关系模式R中属性K是其它模式的主键,那么k在模式R中称为外键。 主键为候选键的子集,候选键为超键的子集,而外键的确定是相对于主键的 ... -
MySQL数据库中主键和唯一键有什么区别
2021-01-26 00:23:39MySQL数据库中主键和唯一键有什么区别发布时间:2020-12-03 13:14:23来源:亿速云阅读:90作者:小新小编给大家分享一下MySQL数据库中主键和唯一键有什么区别,希望大家阅读完这篇文章后大所收获,下面让我们一起去... -
【数据库】数据库中主键和外键的设计原则
2017-10-21 16:10:15主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。 必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。而主键和外键的结构是这个... -
数据库中表的依赖关系
2019-06-09 12:20:25数据库中表的依赖关系 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 开发工具与关键技术:Visual Studio 作者:李继金 撰写时间:2019年6月8日 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 提起... -
mysql数据库外键、主键详解
2021-01-18 18:41:25一、什么是主键、外键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如学生表(学号,姓名,性别,班级)其中每个学生的学号是唯一的,... -
数据库之主键与索引
2020-06-02 18:52:52关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如: 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 ...