数据库表的主键怎么写

1.数据库表中的主键和外键

主外键的存在是依托两个实体之间的关系而存在的;

比如班级与学生的关系:

一个班级可以有多个学生,并且一个学生只能属于一个班级,这就是一对多的关系;

那么设计数据库的时候就应该在学生表内存放班级的ID作为外键,为什么不在班级表内放学生呢?

因为,你想一想班级表内如果放学生那么记录可能就是这样:

1班ID 1班 xx同学id

1班ID 1班 xx同学id

..

这是不允许的,班级表内班级为主键,是唯一的不允许相同记录的;

下面简单给你讲下大概建成的表结构

--建班级表

create table class(

classid int primary key,--定义班级ID为主键

classname varchar(15)

)

--建学生表

create table students(

studentid int primary key,--定义学生ID为主键

classid int ,--外键值,跟班级表classid 属性类型相同

stuname varchar(20),--学生姓名

---定义外键

foreign key(classid) references class(classid) --本表classid是基于class表classid的外键

)

---------

如上定义了主外键后,两个表间的关系就是一对多的关系了,并且学生表内的classid必须依托班级表的classid存在,也就是说外键必须要主键存在的时候才能创建,例如:

--在班级表为空的情况往学生表插入一条记录是不允许的:

insert into students(studentid,classid,stuname)values(1,1,'小明')

系统会抛出异常提示主键表班级表内班级ID不存在这样是不允许插入的;

必须要先往班级表内插入一条记录:

insert into class(classid,classname)values(1,'一班')

后才能执行插入前面一条往学生表插入信息的语句..

--------------可了解一些了?真累啊.

2.数据库表中的主键有什么作用

数据库主键

主键:表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。

作用:

1)保证实体的完整性;

2)加快数据库的操作速度

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

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

在有些数据库中,虽然主键不是必需的,但最好为每个表都设置一个主键,不管是单主键还是复合主键。它存在代表着表结构的完整性,表的记录必须得有唯一区分的字段,主键主要是用于其他表的外键关联,以及本记录的修改与删除。

主键的无意义性

在开发过程中,读者可能会看到将一些表使用有意义的字段表示主键,例如“用户登录信息表”将“登录名”(英文名)作为主键,“订单表”中将“订单编号”作为主键,如此设计主键一般都是没什么问题,因为将这些主键基本不具有“意义更改”的可能性。但是,也有一些例外的情况,例如“订单表”需要支持需求“订单可以作废,并重新生成订单,而且订单号要保持原订单号一致”,那将“订单编号”作为主键就满足不了要求了。因此读者在使用具有实际意义的字段作为主键时,需要考虑是否存在这种可能性。

主键的选择

①编号作主键

此方法就是采用实际业务中的唯一字段的“编号”作为主键设计,这在小型的项目中是推荐这样做的,因为这可以使项目比较简单化,但在使用中却可能带来一些麻烦,比如要进行“编号修改”时,可能要涉及到很多相关联的其他表,就像黎叔说的“后果很严重”;还有就是上面提到的“业务要求允许编号重复时”,我们再那么先知,都无法知道业务将会修改成什么?

②自动编号主键

这种方法也是很多朋友在使用的,就是新建一个ID字段,自动增长,非常方便也满足主键的原则,优点是:数据库自动编号,速度快,而且是增量增长,聚集型主键按顺序存放,对于检索非常有利;数字型的,占用空间小,易排序,在程序中传递也方便;如果通过非系统增加记录(比如手动录入,或是用其他工具直接在表里插入新记录,或老系统数据导入)时,非常方便,不用担心主键重复问题。

缺点:其实缺点也就是来自其优点,就是因为自动增长,在手动要插入指定ID的记录时会显得麻烦,尤其是当系统与其他系统集成时,需要数据导入时,很难保证原系统的ID不发生主键冲突(前提是老系统也是数字型的);如果其他系统主键不是数字型那就麻烦更大了,会导致修改主键数据类型了,这也会导致其他相关表的修改,后果同样很严重;就算其他系统也是数字型的,在导入时,为了区分新老数据,可能想在老数据主键前统一加一个“o”(old)来表示这是老数据,那么自动增长的数字型又面临一个挑战。

3.数据库中的主键是什么意思

主键:表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。

这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。

一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。

作用 :1)保证实体的完整性; 2)加快数据库的操作速度 3) 在表中添加新记录时,ACCESS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。 4) ACCESS自动按主键值的顺序显示表中的记录。

如果没有定义主键,则按输入记录的顺序显示表中的记录。

4.如何定义SQL主键

在SQL数据库中,如何定义SQL主键是经常要遇到的问题,下面将为您介绍两种定义SQL主键的方法,供您参考,希望对那您有所帮助。

SQL主键是数据库表的一个重要属性,建立主键可以避免表中存在完全相同的记录,也就是说SQL主键在一张表中的记录值是唯一的。

建立SQL主键有两种方法:一种是在数据库提供的GUI环境中建立,另一种是通过SQL语句执行建立,下面分别介绍。

1.在数据库提供的GUI环境中建立(以SQL7为例)。

输入表信息后按Ctrl键同时选中多行,然后点上面的主键按钮就行了。

2.通过SQL语句执行建立。又分两种,一是在建表语句中直接写,二是建表之后更改表结构。

在建表语句中直接写:

Create Table 表名 (字段名1 Int Not Null,

字段名2 nvarchar(13) Not Null Primary Key (字段名1, 字段名2),

字段名3…………

字段名N………… )

建表之后更改表结构:

CREATE TABLE 表名 (字段名1 Int Not Null,

字段名2 nvarchar(13) Not Null

字段名3…………

字段名N…………)

GO

ALTER TABLE 表名 WITH NOCHECK ADD

CONSTRAINT [PK_表名] PRIMARY KEY NONCLUSTERED

(

[字段名1],

[字段名2]

)

GO

【】

2.使用SQL语句创建主键约束

使用SQL语句创建主键约束可以在创建表(Create Table)或修改表(Alter Table)时进行 创建。

在修改表中创建主键约束语法:

ALTER TABLE table_name

ADD

CONSTRAINT constraint_name

PRIMARY KEY [CLUSTERED | NONCLUSTERED]

{(Column[,…n])}

参数说明:

CONSTRAINT:创建约束的关键字。

constraint_name:创建约束的名称。

PRIMARY KEY:表示所创建约束的类型为主键约束。

CLUSTERED | NONCLUSTERED:是表示为PRIMARY KEY或UNIQUE约束创建聚集或非聚集索引的关键字。PRIMARY KEY约束默认为CLUSTERED,UNIQUE约束默认为 NONCLUSTERED。

下面在指定的数据库中创建一个名为mytable的数据表,并在该数据表中将“userid”列设置为主键。

操作步骤:

(1)在操作系统中选择“开始”→“所有程序”→“Microsoft SQL Server”→“查询分析器”命令,打开查询分析器。

(2)在查询分析器的工具栏中选择要连接的数据库。

(3)在代码编辑区中编写如下代码。

SQL语句如下:

USE 销售管理系统 --引入数据库

GO

CREATE TABLE mytable --创建表

(

USERID int CONSTRAINT pk_id PRIMARY KEY, --创建主键约束

USERNAME char (20), --数据列

USERPASS char (20), --数据列

USERPHONE char (20), --数据列

USERADDRESS varchar (50), --数据列

USERLEVEL char(2) --

5.如何用sql 添加主键

Oracle:

SQL> CREATE TABLE test_tab (

2 id INT,

3 name VARCHAR(10),

4 age INT,

5 val VARCHAR(10)

6 );

Table created.

SQL> ALTER TABLE test_tab

2 ADD CONSTRAINT pk_test_tab PRIMARY KEY(id);

Table altered.

SQL Server 麻烦一点

1> CREATE TABLE test_tab (

2> id INT,

3> name VARCHAR(10),

4> age INT,

5> val VARCHAR(10)

6> );

7> go

1> ALTER TABLE test_tab

2> ADD CONSTRAINT pk_test_tab PRIMARY KEY(id);

3> go

消息 8111,级别 16,状态 1,服务器 HOME-BED592453C\SQLEXPRESS,第 1 行

无法在表 'test_tab' 中可为空的列上定义 PRIMARY KEY 约束。

消息 1750,级别 16,状态 1,服务器 HOME-BED592453C\SQLEXPRESS,第 1 行

无法创建约束。请参阅前面的错误消息。

首先对 id 这个列,增加一个 NOT NULL 约束,然后再设置为主键。

1> ALTER TABLE test_tab

2> ALTER COLUMN id INT NOT NULL;

3> go

1> ALTER TABLE test_tab

2> ADD CONSTRAINT pk_test_tab PRIMARY KEY(id);

3> go

MySQL

mysql> CREATE TABLE test_tab (

-> id INT,

-> name VARCHAR(10),

-> age INT,

-> val VARCHAR(10)

-> );

-> //

Query OK, 0 rows affected (0.08 sec)

mysql> ALTER TABLE test_tab

-> ADD CONSTRAINT pk_test_tab PRIMARY KEY(id);

-> //

Query OK, 0 rows affected (0.14 sec)

Records: 0 Duplicates: 0 Warnings: 0

6.数据库表中的主键和外键如何关联

它们都是关系数据库表设计的约束方式而已,为了保证数据库中不会出现脏数据的限制方法。

主键是数据库表的唯一索引序列,可以由多个字段组成,但每条数据的这几个字段的组合必须唯一;主键约束仅涉及本表数据;

外键是本表中该外键字段的取值要求是已经在目标表中存在的数据;假如说,表B有字段b_1是表A中字段a_1的外键,那么插入表B数据的时候,字段b_1的取值要求在表A的字段a_1的当前所有数据的值的范围内。外键是以外表数据约束本表数据的约束条件。

此外,外键还有个要求,就是a_1必须是表A的主键。并且必须说得是,外键是一个很烦人的数据库约束。

7.如何定义SQL主键

SQL主键是数据库表的一个重要属性,建立主键可以避免表中存在完全相同的记录,也就是说SQL主键在一张表中的记录值是唯一的。

建立SQL主键有两种方法:一种是在数据库提供的GUI环境中建立,另一种是通过SQL语句执行建立,下面分别介绍。1.在数据库提供的GUI环境中建立(以SQL7为例)。

输入表信息后按Ctrl键同时选中多行,然后点上面的主键按钮就行了。2.通过SQL语句执行建立。

又分两种,一是在建表语句中直接写,二是建表之后更改表结构。在建表语句中直接写:CreateTable表名(字段名1IntNotNull,字段名2nvarchar(13)NotNullPrimaryKey(字段名1,字段名2),字段名3字段名N)建表之后更改表结构:CREATETABLE表名(字段名1IntNotNull,字段名2nvarchar(13)NotNull字段名3字段名N)GOALTERTABLE表名[PK_表名]([字段名1],。

8.mysql数据库表用什么做主键

关系型数据库的特点在于多个表之间使用关系联系起来

这样可以显著降低数据库的容量,并提高维护效率

主键并不是必须的

但是增加主键对单表查询的效率提升很高

所以从原理上来说只要该字段绝对不会重复

那么使用任何类型的字段,比如你上面所说的人名也是可以的

但是如果考虑到与其它表的相互连接

使用人名的可操作性就不是很好

所以,第一点,建议你另外增加一个自动编号的字段作为id,用来做主键

第二点,关系型数据库的特点就是多表之间有冗余,但是实际上是降低了整个数据库的维护难度,

鉴于你看起来对关系型数据库原理不清楚

更建议你先把关系型数据库原理再看看

数据库表的主键怎么写

转载请注明出处育才学习网 » 数据库表的主键怎么写

知识

美丽的什么300字作文三年级作文怎么写

阅读(234)

本文主要为您介绍美丽的什么300字作文三年级作文怎么写,内容包括美丽的校园作文300字三年级作文怎么写,小学三年级作文美丽的什么300字,美丽的校园作文300字三年级作文怎么写。最低0.27元/天开通百度文库会员,可在文库查看完整内容>原发布者

知识

论文式书评怎么写

阅读(315)

本文主要为您介绍论文式书评怎么写,内容包括书评的格式,书评的格式,书评怎么写。大学本科生毕业论文编排格式(A4型纸,默认页面设置) 标题 小二号宋体加粗,居中,如有副标题另排一行,三号楷体。(空一行) 作者姓名 小

知识

录音稿子怎么写

阅读(232)

本文主要为您介绍录音稿子怎么写,内容包括各位帅哥美女们,有木有人知道录音稿怎么写求答案,录音的书面材料怎么写,广播稿的开头怎么写。我是学校广播台加报社的,各种稿子写的多啦。录音稿其实不难,就是你首先要去采访别人,然后用手机等工具录

知识

两条蛇英语怎么写

阅读(608)

本文主要为您介绍两条蛇英语怎么写,内容包括两条蛇趴在树上的英文咋写,英语两条五米长的蛇怎么说,两条蛇趴在树上的英文咋写。“蛇”英语单词为: snake例句:The snake has crawled into a hole. 那条蛇爬进洞里。词汇解析:sn

知识

交换联系方式该怎么写

阅读(222)

本文主要为您介绍交换联系方式该怎么写,内容包括男女交换联系方式后,女孩心里怎么想男孩又该怎么做,求助别人介绍对象,互相交换了联系方式,必须男方先联系女方,相亲介绍认识了一个男,从交换联系方式开始到现在有一个月的样子,。原发布者:abc

知识

简历上怎么写护师

阅读(247)

本文主要为您介绍简历上怎么写护师,内容包括护士个人简历怎么写,护理专业简历怎么写,护士简历怎么写。原发布者:hx资料库.个人简历姓名民族婚姻状况政治面貌计算机能力技术职称毕业学校联系电话性别出生年月身高户籍学历专业本人对生活充满

知识

基本的英文单词怎么写

阅读(279)

本文主要为您介绍基本的英文单词怎么写,内容包括基本的英语单词怎么写,“第一”英语怎么说,英语的所有简写。英语的所有简写很多,现介绍其中关于颜色的简写和缩写。缩写方式一:缩写 英文 中文BK Black 黑色BN Brown 棕色BU Blu

知识

算最大公因数怎么写

阅读(434)

本文主要为您介绍算最大公因数怎么写,内容包括怎么算最大公因数,最大公因数怎么算,最大公因数的格式怎么写。您好求最大公因数小学学习的两种方法:分别分解各个数的质因数,然后比较出公共的质因数相乘;2、用短除法,写短除算式,道理与第一种方法

知识

偷袭君英文怎么写

阅读(208)

本文主要为您介绍偷袭君英文怎么写,内容包括偷袭的英文怎么说,偷袭的英语翻译偷袭用英语怎么说,偷袭的英文怎么说。偷袭[tōu xí][词典] sneak attack; sneak raid; surprise attack; Pearl Harb

知识

图示阅读笔记怎么写

阅读(263)

本文主要为您介绍图示阅读笔记怎么写,内容包括读书笔记怎么写,四年级阅读笔记怎么写图案但愿人长久,读书笔记怎么写。读书笔记指读书时为了把自己的读书心得记录下来或为了把文中的精彩部分整理而做的笔记。 在读书时,写读书笔记是训练阅读

知识

无形资产明细账怎么写

阅读(197)

本文主要为您介绍无形资产明细账怎么写,内容包括无形资产用什么明细账,无形资产用什么明细账,无形资产如何设明细科目。“无形资产科目核算企业持有的无形资产成本,借方登记取得无形资产的成本,贷方登记出售无形资产转出的无形资产账面余额,期

知识

品质月度考核怎么写

阅读(286)

本文主要为您介绍品质月度考核怎么写,内容包括品质主管的考核目标怎么写,怎样写质量考核,品质月工作总结怎么写。考核目的 为了进一步完善公司分配管理制度,强化公司员工的责任意识与成果意识,并运用该评价的方式,指导、帮助、约束和激励广大

知识

三个根号4相加怎么写

阅读(247)

本文主要为您介绍三个根号4相加怎么写,内容包括三个,四个向量相加怎么计算画图,4个3相加的乘法算式怎么写,3个根号3相加=3个根号3相乘,4个3次根号下4相加=4个3次根号下4。4个3相加的乘法算式表示为3x4。解:因为乘法是表示将相同的数相加。其

知识

生日帕提英文怎么写

阅读(268)

本文主要为您介绍生日帕提英文怎么写,内容包括英文的帕提应该怎么写,英文的帕提应该怎么写,生日扒提用英文怎么说。就是生日聚会,生日仿佛是成长路上的脚印,人生便由这一串脚印组成。每次生日过后,细心的你会发现孩子身上又有了新的进步与变化

知识

sqserver数据库设计代码怎么写

阅读(210)

本文主要为您介绍sqserver数据库设计代码怎么写,内容包括设计SQL数据库要写代码吗,SQLServer数据库代码怎么编写,谢谢啦,设计SQL数据库要写代码吗。1.设计阶段一般不用写代码,有的时候用一些数据库设计软件可能会自动生成建表的代码2.除了表

知识

数据库中删除数据的代码怎么写

阅读(265)

本文主要为您介绍数据库中删除数据的代码怎么写,内容包括abap中如何删除数据库表中的数据,程序删除代码怎么写,sql删除数据库中表的数据,数据库查询和删除的命令怎么写。用代码 drop database 数据库 --删除数据库 alter table student dro

知识

c获取数据库路径怎么写

阅读(297)

本文主要为您介绍c获取数据库路径怎么写,内容包括C#获取存入数据库路径,再根据路径打开文件,请问一下,这个代码,C#获取数据库图片路径,C#数据库的相对路径怎么写。你这是什么程序,是web还是winform?如果是web,那个路径就应该是类似于pictruebo

知识

数据库用户怎么写

阅读(216)

本文主要为您介绍数据库用户怎么写,内容包括数据库名称和用户是什么,数据库创建用户的sql怎么写,如何写查询数据库中所有用户的金额。数据库名称就是创建数据库时所命名的标识名字,数据库用户即使用和共享数据库资源的人。database_name 数

知识

php数组数据库怎么写

阅读(252)

本文主要为您介绍php数组数据库怎么写,内容包括PHP数组,如何写入mysql数据库,php中二维数组怎么写入到数据库,PHP添加数组到数据库。<?php $info=$_POST[info] ; $values = ""; for($i = 0; $i < count($inf

知识

万德数据库怎么用

阅读(283)

本文主要为您介绍万德数据库怎么用,内容包括求助万德数据库的使用方法,如何使用wind数据库,万德数据库板块数据浏览器怎么用。选择开始菜单中→程序→【Management SQL Server 2008】→【SQL Server Management Studi

知识

mysql两个数据库查询语句怎么写

阅读(371)

本文主要为您介绍mysql两个数据库查询语句怎么写,内容包括MYSQL中SQL双表查询语句怎么写,mysql多表查询sql语句怎么写,Mysqlsql语句查询两列怎么写。sql="select * from t1 right join t2 on t1.channel=t2.字段 where t1.cha

知识

删除数据库字段语句怎么写

阅读(214)

本文主要为您介绍删除数据库字段语句怎么写,内容包括请问一下删除修改字段的数据库语句怎么写,删除表中一个字段的SQL语句怎么写,sql语句如何删除数据库字段。首先需要打开SQL Developer,右击要操作的数据库,选择【连接】。

[/e:loop]