SQL的主键和外键的作用

合集下载

数据库中的主键与外键介绍

数据库中的主键与外键介绍

2手动增长型字段既然自动增长型字段会带来如此的麻烦,我们不妨考虑使用手动增长型的字段,也就是说主键的值需要自己维护,通常情况下需要建立一张单独的表存储当前主键键值。还用上面的例子来说,这次我们新建一张表叫IntKey,包含两个字段,KeyName以及KeyValue。就像一个HashTable,给一个KeyName,就可以知道目前的KeyValue是什么,然后手工实现键值数据递增。在SQL
Server中可以编写这样一个存储过程,让取键值的过程自动进行。代码如下:
CREATE PROCEDURE[GetKey]
@KeyNamechar(10),
@KeyValue intOUTPUT AS UPDATE IntKey SET @KeyValue =KeyValue = KeyValue + 1
定义主键和外键主要是为了维护关系数据库的完整性,总结一下:
主键是能确定一条记录的唯一标识,比如,一条记录包括身份证号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
COMB数据类型的基本设计思路是这样的:既然UniqueIdentifier数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么我们能不能通过组合的方式,保留UniqueIdentifier的前10个字节,用后6个字节表示GUID生成的时间(DateTime),这样我们将时间信息与UniqueIdentifier组合起来,在保留UniqueIdentifier的唯一性的同时增加了有序性,以此来提高索引效率。也许有人会担心UniqueIdentifier减少到10字节会造成数据出现重复,其实不用担心,后6字节的时间精度可以达到1/300秒,两个COMB类型数据完全相同的可能性是在这1/300秒内生成的两个GUID前10个字节完全相同,这几乎是不可能的!在SQL

sqlserver面试题

sqlserver面试题

sqlserver面试题SQL Server面试题一、什么是SQL Server?SQL Server是一种关系型数据库管理系统(RDBMS),由微软公司开发和发布。

它是一个全面的数据库服务器,用于管理和存储大量的数据。

SQL Server支持结构化查询语言(SQL),以及存储过程、触发器和其他数据库操作。

二、SQL Server的主要功能有哪些?1. 数据管理:SQL Server可以用于创建、修改和删除数据库、表、视图和索引等对象,以及导入、导出和修改数据。

2. 数据安全:SQL Server提供了丰富的安全功能,包括用户身份验证、权限控制和数据加密等,以确保数据的机密性和完整性。

3. 数据备份和恢复:SQL Server支持数据库的备份和恢复操作,以防止数据丢失和错误。

4. 数据复制和同步:SQL Server可以通过复制和同步机制将数据复制到不同的数据库服务器,以实现高可用性和负载均衡。

5. 数据分析和报表:SQL Server支持数据分析和报表生成,以便用户可以从数据库中提取有用的信息和洞察力。

6. 性能优化:SQL Server提供了各种性能优化工具和技术,以确保数据库的高性能和响应能力。

三、请解释SQL Server中的主键和外键的作用。

主键是用于唯一标识数据库表中每条记录的一列或一组列。

它的作用是保证表中的每个记录都具有唯一的标识符,以方便数据的检索和修改。

主键还可以用于建立表与其他表之间的关系。

外键则用于建立表与其他表之间的关联关系。

外键是指表中的一列或一组列,它引用了另一张表的主键。

外键的作用是维护数据的完整性和一致性,通过约束来确保外键引用的数据必须存在于关联表中。

这样可以防止无效的数据插入或更新操作。

四、SQL Server中的事务是什么?请解释ACID属性。

事务是SQL Server中一系列数据库操作的逻辑单元,它要么全部执行成功,要么全部回滚到初始状态。

事务可以保证数据的一致性和完整性。

SQL中的主键和外键

SQL中的主键和外键

主键与外键一、什么是主键、外键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如学生表(学号,姓名,性别,班级)其中每个学生的学号是唯一的,学号就是一个主键课程表(课程编号,课程名,学分)其中课程编号是唯一的,课程编号就是一个主键成绩表(学号,课程号,成绩)成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以学号和课程号的属性组是一个主键成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键同理成绩表中的课程号是课程表的外键定义主键和外键主要是为了维护关系数据库的完整性,总结一下:主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。

身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。

外键用于与另一张表的关联。

是能确定另一张表记录的字段,用于保持数据的一致性。

比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

二、主键、外键和索引的区别收藏聚集索引和非聚集索引的区别?聚集索引一定是唯一索引。

但唯一索引不一定是聚集索引。

聚集索引,在索引页里直接存放数据,而非聚集索引在索引页里存放的是索引,这些索引指向专门的数据页的数据。

三、数据库中主键和外键的设计原则主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。

主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。

必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。

而主键和外键的结构是这个设计过程的症结所在。

一旦将所设计的数据库用于了生产环境,就很难对这些键进行修改,所以在开发阶段就设计好主键和外键就是非常必要和值得的。

主键:关系数据库依赖于主键---它是数据库物理模式的基石。

主键在物理层面上只有两个用途:1. 惟一地标识一行。

主键和外键的作用

主键和外键的作用

主键和外键的作用1.主键的作用:主键是一种用于唯一标识表中每一行记录的字段或字段组合。

主键具有以下几个作用:1.1唯一标识记录:主键字段的值在表中必须是唯一的,不可重复。

通过主键,可以在表中快速准确地定位和识别特定的记录。

1.2确保数据完整性:主键的存在可以确保数据的完整性。

每一行记录都必须有一个主键值,如果一些记录没有主键值,则违反了数据完整性的原则。

主键可以避免数据的冗余和重复,保证数据的一致性。

1.3帮助建立表之间的关系:主键可以用来建立表与表之间的关联关系。

在多表查询或者数据检索时,可以通过主键关联两个或多个表的记录,实现表之间的数据一致性和准确性。

1.4作为外键的参照对象:主键可以被其他表中的字段引用作为外键,用于建立表之间的关联关系。

在外键关系中,主键扮演着被引用的角色,提供数据一致性和数据完整性的保证。

2.外键的作用:外键是一种存在于一个表中,但是指向其他表中主键的字段。

外键的作用如下:2.1建立表之间的关系:外键可以用来建立表与表之间的关联关系。

通过外键,可以将多个表中的数据关联起来,为数据库的设计提供了一种有效的方式。

2.2提供数据一致性和完整性的保证:通过外键,在多表操作或者数据检索时,可以确保数据的一致性和完整性。

外键可以限制在一个表中插入、更新或删除数据的操作,保证了数据的准确性和一致性。

2.3实现数据级联操作:外键可以实现数据级联操作。

当主表中的记录被删除或者更新时,通过外键的约束关系,会自动触发对应的从表中的记录的删除或更新操作,保证数据的完整性和一致性。

2.4处理表之间的关系:外键可以处理表之间的关系,如一对多关系、多对多关系等。

通过外键,可以实现表之间的连接、关联和查询,提供了数据的灵活性和可扩展性。

综上所述,主键和外键在关系数据库中发挥着重要的作用,不仅可以确保数据的完整性和一致性,还可以建立表与表之间的关联关系。

主键用于唯一标识记录,保证数据的完整性和准确性,同时用作外键的参照对象。

sql 数据库 面试题

sql 数据库 面试题

sql 数据库面试题SQL数据库面试题1. 数据库基础知识数据库是用来存储、管理和操作大量数据的工具。

在进行SQL数据库面试时,你可能会被问到一些基础的数据库知识问题。

1.1 数据库的定义和作用数据库是一个组织数据的集合,可以存储和管理大量结构化数据。

它的作用是提供数据的持久化存储和高效的数据访问。

1.2 关系型数据库和非关系型数据库的区别关系型数据库使用表格来组织和管理数据,通过定义表格之间的关系来建立数据模型。

非关系型数据库则以其他形式来存储和组织数据,例如键值对、文档、图形等。

1.3 主键和外键的概念和作用主键是表格中的一列或多列,用来唯一标识每一行数据。

外键是表格中的一列,用来建立表格之间的联系。

1.4 视图的作用和优势视图是虚拟的表格,它是从一个或多个基本表中导出的。

它可以简化数据的查询和操作,并且提供了更高的数据安全性。

2. SQL查询语句在数据库的使用过程中,最常见的操作之一就是查询数据。

以下是一些关于SQL查询语句的面试题。

2.1 SELECT语句及其用法SELECT是用于从数据库中查询数据的关键字。

它可以用来选择特定的列、过滤数据、排序结果等。

2.2 WHERE子句的作用和用法WHERE子句用于过滤满足特定条件的数据。

它可以在SELECT语句中使用,以便筛选满足特定要求的数据。

2.3 JOIN语句的作用和用法JOIN语句可以将两个或多个表格中的数据连接起来。

它通过共享表格之间的字段,来获取相关联的数据。

2.4 GROUP BY和HAVING的概念和区别GROUP BY用于将数据分组,并对每个组应用聚合函数。

HAVING 子句用于过滤分组结果。

3. SQL数据操作语句数据库不仅仅是用来查询数据的,还可以对数据进行新增、修改和删除操作。

以下是一些关于SQL数据操作语句的面试题。

3.1 INSERT语句及其用法INSERT语句用于向数据库中插入新的数据行。

它可以插入单行或多行数据,并指定插入的列和值。

SQL中的主键,候选键,外键,主码,外码

SQL中的主键,候选键,外键,主码,外码

SQL中的主键,候选键,外键,主码,外码1、码=超键:能够唯⼀标识⼀条记录的属性或属性集。

标识性:⼀个数据表的所有记录都具有不同的超键⾮空性:不能为空有些时候也把码称作“键”2、候选键=候选码:能够唯⼀标识⼀条记录的最⼩属性集标识性:⼀个数据表的所有记录都具有不同的候选键最⼩性:任⼀候选键的任何真⼦集都不能唯⼀标识⼀个记录(⽐如在成绩表中(学号,课程号)是⼀个候选键,单独的学号,课程号都不能决定⼀条记录)⾮空性:不能为空候选键是没有多余属性的超键举例:学⽣ID是候选码,那么含有候选码的都是码。

少部分地⽅也有叫超级码的,但是见得不多3、主键=主码:某个能够唯⼀标识⼀条记录的最⼩属性集(是从候选码⾥⼈为挑选的⼀条)唯⼀性:⼀个数据表只能有⼀个主键标识性:⼀个数据表的所有记录都具有不同的主键取值⾮空性:不能为空⼈为的选取某个候选码为主码4、主属性包含在任⼀候选码中的属性称主属性。

简单来说,主属性是候选码所有属性的并集⾮主属性不包含在候选码中的属性称为⾮主属性。

⾮主属性是相对于主属性来定义的。

5、外键(foreign key):⼦数据表中出现的⽗数据表的主键,称为⼦数据表的外键。

6、全码:当所有的属性共同构成⼀个候选码时,这时该候选码为全码。

(教师,课程,学⽣)假如⼀个教师可以讲授多门课程,某门课程可以有多个教师讲授,学⽣可以听不同教师讲授的不同课程,那么,要区分关系中的每⼀个元组,这个关系模式R的候选码应为全部属性构成(教师、课程、学⽣),即主码。

7、代理键:当不适合⽤任何⼀个候选键作为主键时(如数据太长等),添加⼀个没有实际意义的键作为主键,这个键就是代理键。

(如常⽤的序号1、2、3)8、⾃然键:⾃然⽣活中唯⼀能够标识⼀条记录的键(如⾝份证)。

SQL语句的种类_外键_表连接(内连接和左外连接)

SQL语句的种类_外键_表连接(内连接和左外连接)

SQL语句的种类_外键_表连接(内连接和左外连接)数据定义语句(DDL:Data Definition Language)包括create和drop等操作在数据库中创建新表或删除表(create table或 drop table)数据操作语句(DML:Data Manipulation Language)包括insert、update、delete等操作上⾯的3种操作分别⽤于添加、修改、删除表中的数据数据查询语句(DQL:Data Query Language)可以⽤于查询获得表中的数据关键字select是DQL(也是所有SQL)⽤得最多的操作其他DQL常⽤的关键字有where,order by,group by和having外键:利⽤外键约束可以⽤来建⽴表与表之间的联系外键的⼀般情况是:⼀张表的某个字段,引⽤着另⼀张表的主键字段新建⼀个外键create table t_student (id integer primary key autoincrement, name text, age integer, class_id integer, constraint fk_t_student_class_id_t_class_id foreign key (class_id) (id)) ; references t_class t_student表中有⼀个叫做fk_t_student_class_id_t_class_id的外键这个外键的作⽤是⽤t_student表中的class_id字段引⽤t_class表的id字段表连接(内连接和左外连接):什么是表连接查询需要联合多张表才能查到想要的数据表连接的类型内连接:inner join 或者 join (显⽰的是左右表都有完整字段值的记录)左外连接:left outer join (保证左表数据的完整性)⽰例查询0316iOS班的所有学⽣select ,s.age from t_student s, t_class c where s.class_id = c.id and = ‘0316iOS’;左外连接:select * from t_student s left outer join t_class c where s.class_id=c.idselect * from t_class c left outer join t_student s where s.class_id=c.id内连接://内连接内连接⼀定是显⽰两张表共同符合条件的数据select sname , cname from t_student s inner join t_class c on s.class_id=c.id and ='ios_1';。

使用SQL语句修改表的主键和外键

使用SQL语句修改表的主键和外键

使用sql语句修改表的主键和外键
主键约束:一定是非空的,唯一的,即一张表只能设计一个主键约束,但主键约束可以由多个字段构成,称之为联合主键或复合主键。

创建主键约束名称:
SQL> alter table 表名(最好在设置之前,表当中没有数据) add constraint pk_id primary key(id);
修改主键约束名称:
SQL> alter table表名
rename constraint pk_id to new_pk_id;
外键约束:主表当中字段必须是主表中的主键字段,主从表中相应的字段必须同一数据类型,从表中的外键字段的值必须来自主表相应字段,或NULL;
删除外键约束:
SQL> alter table 表名
disable constraint fk_typeid_alter;
修改表时添加外键约束:
SQL> alter table表名
add constraint fk_typeid_alter foreign key(typeid_new)references typeinfo 删除、添加后即将外键约束修改完成。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SQL的主键和外键的作用:
外键取值规则:空值或参照的主键值。

(1)插入非空值时,如果主键表中没有这个值,则不能插入。

(2)更新时,不能改为主键表中没有的值。

(3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。

(4)更新主键记录时,同样有级联更新和拒绝执行的选择。

简而言之,SQL的主键和外键就是起约束作用。

关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识
一条记录,该属性组就可以成为一个主键。

比如:
学生表(学号,姓名,性别,班级)
其中每个学生的学号是唯一的,学号就是一个主键;
课程表(课程编号,课程名,学分)
其中课程编号是唯一的,课程编号就是一个主键;
成绩表(学号,课程号,成绩)
成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以,学号和课程号的属性组是一个主键。

成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学
生表的主键,则称成绩表中的学号是学生表的外键;同理,成绩表中的课程号是课程表的外键。

定义主键和外键主要是为了维护关系数据库的完整性,总结一下:
一、主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。

身份证
号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。

外键用于与另一张表的关联。

是能确定另一张表记录的字段,用于保持数据的一致性。

比如,
A表中的一个字段,是B表的主键,那他就可以是A表的外键。

二、主键、外键和索引的区别
定义:
主键--唯一标识一条记录,不能有重复的,不允许为空
外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值
索引--该字段没有重复值,但可以有一个空值
作用:
主键--用来保证数据完整性
外键--用来和其他表建立联系用的
索引--是提高查询排序的速度
个数:
主键--主键只能有一个
外键--一个表可以有多个外键
索引--一个表可以有多个唯一索引
创建SQL的主键和外键约束的方法:
create table Student --建表格式:create table 自定义的表名
(--字段名一般为有一定意义的英文
StudentName nvarchar(15),-- 格式:字段名类型()括号里面的是允许输入的长度StudentAge int,--int型的后面不需要接长度
StudentSex nvarchar(2)--最后一个字段后面不要逗号
)
--在创建表时就可以对字段加上约束:
create table Student
(
StudentNo int PRIMARY KEY IDENTITY(1,1),--加主键约束,还有标识列属性(两者构成实体完整性)
StudentName nvarchar(15)not null,--加非空约束,不加"not null" 默认为:可以为空
StudentSchool text(20)FOREIGN KEY REFERENCES SchoolTable(SchoolName) ,--加外键约束,格式:FOREIGN KEY REFERENCES 关联的表名(字段名)
StudentAge int DEFAULT((0)),--加默认值约束
StudentSex nvarchar(2)CHECK(StudentSex=N'男'or StudentSex=N'女')--加检查约束,格式:check (条件表达式)
)
--如果在表创建好了以后再加约束,则格式分别为:
-- 主键:
alter table表名
add constraint PK_字段名--"PK"为主键的缩写,字段名为要在其上创建主键的字段名,'PK_字段名'就为约束名
primary key(字段名)--字段名同上
--唯一约束:
alter table表名
add constraint UQ_字段名
unique(字段名)
--外键约束:
alter table表名
add constraint FK_字段名--"FK"为外键的缩写
foreign key(字段名)references关联的表名(关联的字段名)--注意'关联的表名'和'关联的字段名
--检查约束:
alter table表名
add constraint CK_字段名
check(条件表达式)--条件表达式中的条件用关系运算符连接
--默认值约束:
alter table表名
add constraint DF_字段名
default'默认值'for字段名--其中的'默认值'为你想要默认的值,注意'for'
--删除创建的约束:
alter table表名
drop constraint约束名--约束名为你前面创建的如:PK_字段这样的约束名
--注意:如果约束是在创建表的时候创建的,则不能用命令删除
--只能在'企业管理器'里面删除
-- 获取SqlServer中表结构
SELECT ,,syscolumns.isnullable, syscolumns.length
FROM syscolumns,systypes
WHERE syscolumns.xusertype = systypes.xusertype
AND syscolumns.id =OBJECT_ID('Student')
-- 单独查询表递增字段
SELECT [name] FROM syscolumns WHERE
id =OBJECT_ID(N'Student')AND COLUMNPROPERTY(id,name,'IsIdentity')=1 -- 获取表主外键约束
EXEC sp_helpconstraint'StuResults'
-- 查询表主键外键信息
SELECT sysobjects.id
objectId,OBJECT_NAME(sysobjects.parent_obj) tableName,
constraintName, sysobjects.xtype AS constraintType, AS columnName
FROM sysobjects INNER JOIN sysconstraints
ON sysobjects.xtype in('C','F','PK','UQ','D')
AND sysobjects.id = sysconstraints.constid
LEFT OUTER JOIN syscolumns ON sysconstraints.id = syscolumns.id WHERE OBJECT_NAME(sysobjects.parent_obj)='StuResults'。

相关文档
最新文档