我想知道数据库中设置主键的作用

我想知道数据库中设置主键的作用,第1张

1、保证每个实体的完整性;

2、加快数据库的 *** 作速度,更好地给用户带来体验;

3、在表中添加新记录时,DBMS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复;

4、DBMS自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。

当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。

扩展资料

主键的使用规则介绍:

1、任意两行都不具有相同的主键值;

2、每行都必须具有一个主键值(主键列不允许NULL值);

3、可以使用多个列作为主键,但是所有列值得组合必须是唯一的(但单个列的值可以不唯一);

4、不更新主键列中的值;

5、不重用主键列的值;

6、不在主键列中使用可能会更改的值(例如,供应商的名字,如果供应商更改了名字,你就得改这个主键)。

参考资料来源:百度百科-数据库主键

主键:

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

1

惟一地标识一行。

2

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

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

1

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

2

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

注:使用复合键的人通常有两个理由为自己开脱,而这两个理由都是错误的。其一是主键应当具有实际意义,然而,让主键具有意义只不过是给人为地破坏数据库提供了方便。其二是利用这种方法可以在描述多对多关系的连接表中使用两个外部键来作为主键,我也反对这种做法,理由是:复合主键常常导致不良的外键,即当连接表成为另一个从表的主表,而依据上面的第二种方法成为这个表主键的一部分,然,这个表又有可能再成为其它从表的主表,其主键又有可能成了其它从表主键的一部分,如此传递下去,越靠后的从表,其主键将会包含越多的列了。

3

永远也不要更新主键。实际上,因为主键除了惟一地标识一行之外,再没有其他的用途了,所以也就没有理由去对它更新。如果主键需要更新,则说明主键应对用户无意义的原则被违反了。

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

4

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

5

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

外键是数据库一级的一个完整性约束,就是数据库基础理论书中所说的“参照完整性”的数据库实现方式。

外键属性当然是可以去掉的,如果你不想再用这种约束,对编程当然不会有什么影响,但相应的录入数据的时候就不对录入的数据进行“参照完整性”检查了。

例如有两个表

A(a,b)

:a为主键,b为外键(来自于Bb)

B(b,c,d)

:b为主键

如果我把字段b的外键属性去掉,对编程没什么影响。

如上面,A中的b要么为空,要么是在B的b中存在的值,有外键的时候,数据库会自动帮你检查A的b是否在B的b中存在。

查询数据库利用上边的要领数据库如何设置主键可以由记载生成对象,但是你仍然得用SQL语句来查询数据库,这需要对数据库布局有深切的相识这还是没有解决问题,虽则我们能够不佣人的劳力地般配数据库表和类的名儿,但是还是必需手工编写SQL语句这就是说每一次修改数据库布局后,将不得不手工编辑这些查询语句不外,我们仍然可以利用前文所述的要领来越过这个障碍通常而言,查询关系数据库时,你将会用到属于主键或索引的字段名和值一言弊之,如果或人向你供给了适当的字段名和字段值

,你就可以从响应的数据库中抽取符合要求的记载(或字段)而DatabaseMetaData对象不单可以被用于检索一系列的表名(见上所述数据库主键是啥子),并且可以获得一系列的主键及索引字段上边的问题由此可以迎刃而解

通过填入一系列适当的(字段名,字段值)对,可以利用相对于而言少得多的代码使成为事实对关系数据库的查询你可以将对子中的所有字段名和数据库中的主健及索引字段相般配每一当你找到了名儿列表中响应的主健或索引字段,可以根据响应的数值来生成一个SQL语句,执行它来获取RecordSet,并通过ClassforName()构造机

制将结果转化为对象使成为事实这一设法要求可以以(名,值)对的方式对与数据库表相干的每个类的数据元素进行存取但是这类要领只有通过上节所述的通用父类才能趋于完美清单3和4利用伪码表示数据库主键是啥子了这一要领

Openthedatabaseconnection

Retrievealistofuserdefinedtables

foreachtable

{

Checkwherethereisacorrespondingclassfile

if(itisavailabe)

{

loadtheclassfile

Retrievelistsofkeyfieldsandindecesfort你好stable

StoretheselistsinhashtablesforeasyAccess

}

elsethrowanexception

}

· 清单3:初始化数据库毗连的伪码

TakeanobjectAcontainingaseriesof(name,value)pairs

foreachtableT

{

foreach(name,value)pair

{

if(namematchesprimary_key_fieldorindex_field)

storearefrencetobothnameandvalue

}

ifallkey_fieldswerefound

createaquerystringusingkeynamesandvalues

elseifallindex_fieldswerefound

createaquerystringusingindexnamesandvalues

executethequerytoobtainaResultSet

ForeachrecordintheResultSet

{

CreateanobjectoftheclassassociatedwithtableT

initializetheobjectusingtherecord''''scontents

Addtheobjecttotheresults,eg,attac你好ttoA

}

}

· 清单4:描写数据库查询的伪码

Java镜像和JavabeansJava11研发套件(JDK)的引入,为我们带来了很多壮大的新性能,例如全新的用户界面接口类有两个新的JDKAPI尤其值当注重:镜像机制(javalangreflect包)和JavaBeans组件的应用程序接口(javabeans包)这两个API将会帮助我们创立高明的数据库类,使我们可以利用有关类的meta-信息,以此来解决研发通用数据库类中的问题

领有forName()和newInstance()要领的Class类,仅只是镜象(reflection)功效的一个简略例子真正重要的是,forName()字符串参数不必需是源程序中出现的字符串只要给出一个名儿(这个名儿可从任何地方取来),你就可以载入并实例化任何一个类对于我们的数据库类数据库如何设置主键,我们可以直接从数据库自身的表名中得到类名这就是说,与数据库表相干的Java类名其实不需要出现在源程序中响应地,当表名改变或某个表被加入到数据库中时,不需要修改源码,只要确信带有新名儿的类已存在你的体系中

镜像类象征着可以在及时运行中获取、储存和处置惩罚Java程序中的类信息它们的实例能够象任何Java对象同样被运用,你可以象修改字符串和整儿同样,去修改类、数据类型、返回类型、要领参照和参数在源程序级,这个镜像的观点看起来并无啥子价值——因为可以应用你自己的编码直接存取你所需要的有关类、要领及参数的所有信息但是,镜像(reflection)将数据库修改主键会在java的编译文件中发挥作用JavaBeanSAPI的作用是:通过应用程序的构造机制利用来自于全然不同的研发者或产商所编写的类

JavaBeans规范为类成员的名儿制定一系列的条例以确保要领函数的名儿能体系地描写它们的功效任何一个符正当则的Java类均可以被一个Bean的内化实例(通过镜像)查抄,以展现其举动的重要特征——诸如对于啥子样的事件类将有所响应,和该类将会孕育发生啥子样的事件等等任何符合这些规范的类都是高效的Bean,因而是一个组件有理论上,这象征着你可以从各类来历网络一系列beans,当需要它们时可以将其其及时地绑在一路一个Bean的例子

在底下一个名为Translation的Bean中数据库主键生成计谋,有一个构造函数和两个要领来 *** 作一个名为“language”的属性这里我想夸大的是,既然你可以通过查抄一个类的代码来相识它的构造函数、要领及属性,那么Bean的内化器(Introspector)也能做到

publicclassTranslationextendsObject

{

intlanguage;

publictranslation()

{

}

publicintgetlanguage()

{

return(language);

}

publicvoidsetLanguage(intlanguage)

{

t你好slanguage=language;

}

}

以上就是关于我想知道数据库中设置主键的作用全部的内容,包括:我想知道数据库中设置主键的作用、数据库主键具体指哪项,有什么作用、如何获取数据库当前的主键字段等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9494720.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存