搜档网
当前位置:搜档网 › SQLServer 重命名所有外键约束

SQLServer 重命名所有外键约束

SQLServer 重命名所有外键约束
SQLServer 重命名所有外键约束

Sql Server重命名所有外键约束

公司服务器上的数据库原先是采用PowerDesigner设计的,那些外键约束的命名非常难看,并且也和后来在SSMS中额外添加的外键约束命名规则不一致,因此我想遍历数据库的所有外键约束,找到外键约束的相关对象,然后重新生成一致的命名。

我采用的命名规则是:

FK_ForeignTable_PrimaryTable_On_ForeignColumn

直白的翻译就是,ForeignTable在ForeignColumn列上引用了PrimaryTable的主键。

Sql Server提供了很多动态管理视图(Dynamic management views,DMV)和存储过程,方便我们对数据库进行维护。这里我用到了以下两个

sys.foreign_key_columns(包含外键约束完整信息)和sys.objects(数据库对象信息)这两个DMV以及sp_rename执行重命名的系统存储过程。代码如下:

declare fkcur cursor for

select

OBJECT_NAME(col.constraint_object_id) as FKConstraintName

,https://www.sodocs.net/doc/4915056891.html, as FKTable

,https://www.sodocs.net/doc/4915056891.html, as FKColumn

,https://www.sodocs.net/doc/4915056891.html, as PKTable

,https://www.sodocs.net/doc/4915056891.html, as PKColumn

from sys.foreign_key_columns col

-- 外键约束是建立在外键表上的,

-- 因此foreign_key_columns表中的parent_object_id和parent_column_id 分别表示外键表和外键列

inner join sys.objects fkTable

on fkTable.object_id = col.parent_object_id

inner join sys.columns fkCol

on fkCol.column_id = col.parent_column_id

and fkCol.object_id = fkTable.object_id

-- foreign_key_columns表中的referenced_object_id和

referenced_column_id分别指向

-- 外键约束的主键表对象以及主键列

inner join sys.objects pkTable

on pkTable.object_id = col.referenced_object_id

inner join sys.columns pkCol

on pkCol.column_id = col.referenced_column_id

and pkCol.object_id = pkTable.object_id

order by OBJECT_NAME(col.constraint_object_id)

open fkcur

declare @constraintName nvarchar(128)

declare @fkTable nvarchar(64)

declare @fkColumn nvarchar(64)

declare @pkTable nvarchar(64)

declare @pkColumn nvarchar(64)

declare @newConstraintName nvarchar(128)

fetch next from fkcur

into @constraintName,@fkTable,@fkColumn,@pkTable,@pkColumn

while @@FETCH_STATUS = 0

begin

set @newConstraintName = 'FK_'+@fkTable+'_'+@pkTable+'_On_'+@fkColumn exec sp_rename @constraintName,@newConstraintName,'Object'

fetch next from fkcur

into @constraintName,@fkTable,@fkColumn,@pkTable,@pkColumn

end

close fkcur

deallocate fkcur

经典SQL语句大全_主外键_约束

一、基础(建表、建约束、关系) 约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件(有关数据完整性的介绍请参见第9 章)。在SQL Server 中有5 种约束:主关键字约束(Primary Key Constraint)、外关键字约束(Foreign Key Constraint)、惟一性约束(Unique Constraint)、检查约束(Check Constraint)和缺省约束(Default Constraint)。 (最后几页介绍SQL基础约束) 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1. dat' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) --建表、建约束、关系 create table tableok ( col1 int, col2_notnull int not null, col3_default nchar(1) not null default('男'), --默认男 col4_default datetime not null default(getdate()), --默认得到系统时间 col5_check int not null check(col5_check>=18 and col5_check<= 55),--添加约束,数据值在18到55之间 col6_check nchar(9) not null check(col6_check like 'msd0902[0-9][^ 6-9]'), --添加约束,数据值前7位必须是‘msd0902’,倒数第两位可以是0-9中任意一个数字,最后一位不是6-9之间的数字。 cola_primary nchar(5) not null primary key, --建立主键 colb_unique int unique, --唯一约束 col7_Identity int not null identity(100,1), --自增长,从100开始,每列值增加1个

外键约束

主-外键约束(FOREIGN KEY) 之前所讲的约束都是针对一张表的约束,那么主-外键约束是针对于两张表的约束。为什么需要主-外键约束? 前面已经创建了一个person表,book表中的pid对应person表中的pid。表示该本图书是属于哪个人的。 向book表中插入一行pid为00000000000000000的记录。 很明显,编号为00000000000000000的记录根本不存在,那1002图片怎么可以属于一

个不存在的人呢?如果要想解决这样的问题,就需要使用主-外键约束。主-外键约束的好处是book.pid的取值必须在person.pid之内。 创建主-外键约束的语法: 再次向book表中插入记录。 测试:删除父表中已经与子表关联的记录。 首先向book表中插入合法数据。 删除person表中pid为’111111111111111111’的记录。

主-外键约束,可以保证两张表的数据完整性,不会出现找不到对应数据的情况。 主-外键约束的注意事项: ●子表的外键必须是主表的主键。例如:book.pid是相对与person.pid的外键。 那么person.pid必须是主键。 ●删除父表记录时,需要先删除子表中相关联的所有记录,然后才能删除父表中 的记录。例如:要删除person表中pid为111111111111111111的记录,需要 在删除book表中pid为111111111111111111的所有记录后,才能删除。 ●删除父表时,需要选删除子表,才能删除父表。例如:要删除person表,需要 在删除book表之后,才能删除。 可以使用CASCODE CONTRAINT强行删除父表。但强烈建议大家不要这么使用。 重新创建person表。

SQL的主键和外键的作用

SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值。 (1)插入非空值时,如果主键表中没有这个值,则不能插入。 (2)更新时,不能改为主键表中没有的值。 (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。 (4)更新主键记录时,同样有级联更新和拒绝执行的选择。 简而言之,SQL的主键和外键就是起约束作用。 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识 一条记录,该属性组就可以成为一个主键。 比如: 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键; 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是一个主键; 成绩表(学号,课程号,成绩) 成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以,学号和课程号的属性组是一个主键。 成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学 生表的主键,则称成绩表中的学号是学生表的外键;同理,成绩表中的课程号是课程表的外键。 定义主键和外键主要是为了维护关系数据库的完整性,总结一下: 一、主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证 号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。 外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如, A表中的一个字段,是B表的主键,那他就可以是A表的外键。 二、主键、外键和索引的区别 定义: 主键--唯一标识一条记录,不能有重复的,不允许为空 外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值 索引--该字段没有重复值,但可以有一个空值 作用:

外键约束(20171015)

外键约束 先要理清几个概念: 1)候选键(Candidate Key):关系中的一个属性组,其值能唯一标识一个元组,若从该属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作候选键(候选码)。2)主键(Primary Key):当有多个候选键时,可以选定一个作为主键,选定的候选键称为主键(主码)。 主键唯一标识表中的每行记录。主键约束有如下特点:每个表中只能有一个主键,主键可以是一列,也可以是多列的组合;主键值必须唯一并且不能为空,对于多列组合的主键,某列值可以重复,但列的组合值必须唯一。 3)外键(Foreign Key):关系R中的一个属性组,它不是R的候选键,但它与另一个关系S 的候选键相对应,则称这个属性组为R的外键(外码)。关系R称为参照关系(参照表、从表),关系S称为被参照关系(被参照表、主表)。 外键是指一个表(从表)中的一列或列组合,它虽不是该表的主键,但却是另一个表(主表)的主键。通过外键约束可以为相关联的两个表建立联系,实现数据的引用完整性,维护两表之间数据的一致性关系。特殊情况下,参照关系和被参照关系可以是同一个关系。即,特殊情况下,从表和主表可以是同一个表。参照[引用]关系(Referencing Relation)、子表、从表、外键表、参照[引用]表,这些作为同一术语的同义词使用。 被参照[被引用]关系(Referenced Relation)、父表、主表、主键表、被参照[被引用]表、查找表,这些作为同一术语的同义词使用。 请注意,在英语国家讲数据库的英语文献中,relation有时指“表”,有时指两表之间的联系(relationship)。指两表之间的relationship时也常用link[链接]。 relationship和relation通常都翻译为关系,但在数据库中两者含义不同。relationship [关系;联系;关联],在数据库中指不同表之间的数据彼此联系的方法。数据库表之间的表之间的relationship有:一对一、一对多、多对多。relation[关系],在数据库指表,从本质上说,关系是一个包含行和列的二维表或数组。应根据语境区别理解。 例、有两个关系: student (s#, sname, d#),即学生这个关系有三个属性:学号,姓名,所在系别 department(d#, dname),即院系有两个属性:系号、系名 则s#、d#是各自所在关系的主键,d#还是关系student的外键。student是参照关系(从表),department是被参照关系(主表)。 建立外键约束(FOREIGN KEY)后,从表中的外键的取值,要么在主表有对应的值,要么为NULL,但不能是主表中没有对应的值。特殊情况下,从表和主表可以是同一个表。 通过外键能实现数据的参照完整性(Referential Integrity引用完整性),参照完整性约束意味着,从表中某列(外键列)和主表中的某列(主键或UNIQUE约束)匹配。这些列称为对应列(有时也称为公共字段)。 外键既能确保数据完整性,也能表现表之间的关系(relationship)。也就是说,如果你为引用表(从表)定义了外键,就在你定义外键的表(从表、引用表)和外键引用的表(主表、被引用表)之间既确保了数据完整性也确定了两表之间的关系。 ◇建立外键约束后,从表中的外键的取值,要么在主表有对应的值,要么为NULL,通过定义引用列(从表中的外键)为NOT NULL,可以确保外键的取值必须在主表有对应的值。 ☆建立参照完整性约束后的级联动作受{ON DELETE | ON UPDATE} { NO ACTION | CASCADE |

外键约束 举例

(1)基本介绍 外键作用:使两张表形成关联,外键只能引用外表中的指定列的值! 建立外键的前提:本表的列必须与外键类型相同(外键必须是外表的主键)。 指定外键关键字:foreign key(列名) 引用外键关键字:references <外键表名>(外键列名) 事件触发限制: on delete和on update , 可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action 例如: outTable表主键id 类型int 创建含有外键的表: create table temp( id int, name char(20), foreign key(id) references outTable(id) on delete cascade on update cascade); 说明:把id列设为外键参照外表outTable的id列当外键的值删除本表中对应的列筛除当外键的值改变本表中对应的列值改变。 (2)定义数据表 假如某个电脑生产商,它的数据库中保存着整机和配件的产品信息。用来保存整机产品信息的表叫做pc;用来保存配件供货信息的表叫做parts。 Pc表 在pc 表中有一个字段,用来描述这款电脑所使用的CPU型号; 在parts 表中相应有一个字段,描述的正是CPU的型号,我们可以把它想成是全部CPU的型号列表。 很显然,这个厂家生产的电脑,其使用的cpu 一定是供货信息表(parts)中存在的型号。这时,两个表中就存在一种约束关系(constraint)—— pc 表中的cpu 型号受到parts 表中型号的约束。 首先我们来创建parts 表: Create TABLE parts ( ... 字段定义..., model V ARCHAR(20) NOT NULL,

SQL Server外键设置笔记

SQL的主键和外键约束 SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值。 (1)插入非空值时,如果主键表中没有这个值,则不能插入。 (2)更新时,不能改为主键表中没有的值。 (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。 (4)更新主键记录时,同样有级联更新和拒绝执行的选择。 简而言之,SQL的主键和外键就是起约束作用。 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键。 比如: 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键; 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是一个主键; 成绩表(学号,课程号,成绩) 成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以,学号和课程号的属性组是一个主键。 成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键;同理,成绩表中的课程号是课程表的外键。 定义主键和外键主要是为了维护关系数据库的完整性,总结一下: 一、主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。 外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。 二、主键、外键和索引的区别 定义: 主键--唯一标识一条记录,不能有重复的,不允许为空 外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值 索引--该字段没有重复值,但可以有一个空值 作用: 主键--用来保证数据完整性 外键--用来和其他表建立联系用的 索引--是提高查询排序的速度 个数: 主键--主键只能有一个 外键--一个表可以有多个外键 索引--一个表可以有多个唯一索引 创建SQL的主键和外键约束的方法: create table Student --建表格式:create table 自定义的表名 ( --字段名一般为有一定意义的英文 StudentName nvarchar(15), -- 格式:字段名类型()括号里面的是允许输入的长度StudentAge int, --int型的后面不需要接长度

Oracle 外键约束

Oracle 外键约束 外键FOREIGN KEY约束是几种约束是最复杂的,外键约束可以使两个表进行关联。外键是指引用另一个表中的某个列或某几个列,或者本表中另一个列或另几个列的列。被引用的列应该具有主键约束,或者惟一性约束。 在外键的定义中,涉及到外键表、外键列、被引用表和被引用列等几个概念。如果成功地创建了外键约束,那么系统将要求外键列中的数据必须来自被引用列中的数据。被引用列中不存在的数据不能存储于外键列中。在一般情况下,当删除被引用表中的数据时,该数据也不能出现在外键列中。如果外键列存储了将要在被引用表中删除的数据,那么对被引用表删除数据的操作将失败。 最典型的外键约束是HR模式中的EMPLOYEES和DEPARTMENT表,在该外键约束中,外键表EMPLOYEES中的外键列DEMPARTMENT_ID将引用被引用表DEPARTMENTS 中的DEMPARTMENT_ID列。 例如,在以下的示例中,将以HR身份连接到数据库,并创建一个新表ADMINISTRATION_EMP,并为其添加到DEPATRMENT表的外键约束:SQL> connect hr/hr 已连接。 SQL> create table administration_emp 2 as select * from hr.employees 3 where department_id=10; 表已创建。 SQL> alter table administration_emp 2 add constraint admin_dep_fk 3 foreign key(department_id) 4 references departments(department_id); 表已更改。 为验证创建的外键约束的有效性,可以向ADMINISTRATION_EMP表添加一条记录,并且它的DEPARTMENT_ID列值不存在DEPARTMENTS表中,那么插入操作将会因为违反外键约束而失败: SQL> insert into administration_emp( 2 employee_id,last_name,email,hire_date,job_id,department_id) 3 values(120,'刘丽','li@https://www.sodocs.net/doc/4915056891.html,',sysdate,'HR_REP',360); insert into administration_emp( * 第 1 行出现错误: ORA-02291: 违反完整约束条件(HR.ADMIN_DEP_FK) - 未找到父项关键字 注意在一个表上创建外键约束时,被引用表必须已经存在,并且必须为该表的引用列定义惟一性约束或主键约束。

创建表(包括创建主键,外键,非空列,唯一)

创建主键(三种方法) **************** 创建学生表: 第一种: create table student (sno char(5) primary key,/*学号*/ /*可以直接指定主键*/ sname char(20) not null,/*姓名*/ ssex char(3) not null,/*性别*/ sage integer not null,/*年龄*/ sdept char(15);/*系别*/ 第二种: create table student (sno char(5) not null, constraint pk_student /*可以指定主键名称*/ primary key (sno), sname char(20) not null ,/*非空,不可重复*/ ssex char(3) not null, sage integer , sdept char(15)); 第三种: 创建课程表:

create table course (cno char(5),/*课程号*/ cname char(20) not null unique,/*课程名,非空,不可重复*/ cpno char(5),/*前置课程号(学此课之前必修课)*/ ccredit number);/*学分*/ 通过修改表,设置主键. alter table course add constraint pk_course primary key (cno); ************* 创建外键(3种方法) ************* 创建"学生-课程-成绩"表 create table sc (sno char(5) constraint fk_student /*第一种,写在属性定义里面的*/ /*可以指定外键名称,*/ references student(sno), cno char(5), foreign key(cno) /*可省略外键名称*/ references course(cno), grade number); **********

SQLServer 重命名所有外键约束

Sql Server重命名所有外键约束 公司服务器上的数据库原先是采用PowerDesigner设计的,那些外键约束的命名非常难看,并且也和后来在SSMS中额外添加的外键约束命名规则不一致,因此我想遍历数据库的所有外键约束,找到外键约束的相关对象,然后重新生成一致的命名。 我采用的命名规则是: FK_ForeignTable_PrimaryTable_On_ForeignColumn 直白的翻译就是,ForeignTable在ForeignColumn列上引用了PrimaryTable的主键。 Sql Server提供了很多动态管理视图(Dynamic management views,DMV)和存储过程,方便我们对数据库进行维护。这里我用到了以下两个 sys.foreign_key_columns(包含外键约束完整信息)和sys.objects(数据库对象信息)这两个DMV以及sp_rename执行重命名的系统存储过程。代码如下: declare fkcur cursor for select OBJECT_NAME(col.constraint_object_id) as FKConstraintName ,https://www.sodocs.net/doc/4915056891.html, as FKTable ,https://www.sodocs.net/doc/4915056891.html, as FKColumn ,https://www.sodocs.net/doc/4915056891.html, as PKTable ,https://www.sodocs.net/doc/4915056891.html, as PKColumn from sys.foreign_key_columns col -- 外键约束是建立在外键表上的, -- 因此foreign_key_columns表中的parent_object_id和parent_column_id 分别表示外键表和外键列 inner join sys.objects fkTable on fkTable.object_id = col.parent_object_id inner join sys.columns fkCol on fkCol.column_id = col.parent_column_id and fkCol.object_id = fkTable.object_id -- foreign_key_columns表中的referenced_object_id和 referenced_column_id分别指向

主键,外键等约束详解实例

1、--创建表 create table tb_Dept ( Deptid char(2)Primary key, DeptName char(16)Not Null ) 2、--外键约束 create table tb_Student ( Studid char(10)Primary key, Studname char(8)Not null, Deptid char(2)Not null, Constraint FK_DeptID Foreign Key(Deptid) References Tb_Dept(DeptID) ) 3、--外键约束简化形式,必须要求tb_Dept表中DeptID为主键,且数值类型相同create table Tb_Student ( StudId char(10)Primary key, StudName char(8)Not null, DeptID char(2)not null References Tb_Dept ) 4、--创建表,无主键 create table Tb_Class ( ClassID char(8)not null, ClassName varchar(30)not null, DeptId char(2)not null, ClassStuNumber int ) 5、--创建表,同时定义主键 create table Tb_Class ( classid char(8)not null, ClassName varchar(30)not null, DeptID char(2)not null, ClassStuNumber int constraint PK_ClassID Primary key (ClassID,ClassName) ) 6、--新增主键 Alter table Tb_class ADD Constraint PK_ClassID primary key(Classid) 7、--删除主键 Alter table tb_Class Delete Constraint PK_ClassID Primary key(ClassID) 8、--外键级联更新,删除,简化形式 Create table tb_student (

FOREIGN KEY 约束

FOREIGN KEY 约束 外键(FK) 是用于建立和加强两个表数据之间的链接的一列或多列。当创建或修改表时可通过定义FOREIGN KEY 约束来创建外键。 在外键引用中,当一个表的列被引用作为另一个表的主键值的列时,就在两表之间创建了链接。这个列就成为第二个表的外键。 例如,因为销售订单和销售人员之间存在一种逻辑关系,所以AdventureWorks数据库中的Sales.SalesOrderHeader表含有一个指向Sales.SalesPerson表的链接。SalesOrderHeader表中的SalesPersonID列与SalesPerson表中的主键列相对应。SalesOrderHeader表中的SalesPersonID列是指向SalesPerson表的外键。

FOREIGN KEY 约束并不仅仅可以与另一表的PRIMARY KEY 约束相链接,它还可以定义为引用另一表的UNIQUE 约束。FOREIGN KEY 约束可以包含空值,但是,如果任何组合FOREIGN KEY 约束的列包含空值,则将跳过组成FOREIGN KEY 约束的所有值的验证。若要确保验证了组合FOREIGN KEY 约束的所有值,请将所有参与列指定为NOT NULL。

注意: 引用完整性 尽管FOREIGN KEY 约束的主要目的是控制可以存储在外键表中的数据,但它还可以控制对主键表中数据的更改。例如,如果在Sales.SalesPerson表中删除一个销售人员行,而这个销售人员的ID 由Sales.SalesOrderHeader表中的销售订单使用,则这两个表之间关联的完整性将被破坏;SalesOrderHeader表中删除的销售人员的销售订单因为与SalesPerson表中的数据没有链接而变得孤立了。 FOREIGN KEY 约束防止这种情况的发生。如果主键表中数据的更改使之与外键表中数据的链接失效,则这种更改将无法实现,从而确保了引用完整性。如果试图删除主键表中的行或更改主键值,而该主键值与另一个表的FOREIGN KEY 约束中的值相对应,则该操作将失败。若要成功更改或删除FOREIGN KEY 约束的行,必须先在外键表中删除或更改外键数据,这将把外键链接到不同的主键数据上去。

主键、外键的应用

主键、外键的应用 三列的含义依次是部门编号、部门名称、地点。 部门编号为主键,部门名称非空、唯一。 create table dept ( deptno number, dname verchar2(20) not null, loc verchar2(20) UNIQUE, constraint no primary key(deptno) ); --------------------------------------- create table emp ( empno number, ename verchar2(20) not null, job verchar2(20), mgr number, hiredate date, sal number, comm number, deptno number, rowid verchar2(20), constraint no primary key(empno) constraint jing foreign key(mgr) references emp(empno), constraint deptno foreign key(emp) references mgr (emp), ); ---------------------------------------------------------------- 1)工资在1000至3000之间员工的姓名、工作、工资、部门编号。Select ename,job,sal,deptno from emp where sal>1000 and sal<3000; 2)员工的姓名、收入(工资+提成) Select ename,sal+comm from emp; 3)所有有提成的员工的姓名、工资、提成 Select ename,sal,comm from emp; 4)所有没有提成的员工的姓名、工资、提成 Select ename,sal,comm is null from emp; --------------------------------------------------------------- select * from 表where 列【not】in(1001,1004); select * from 表where 列between ... and ...; select * from 表where 列like 'name';

数据库建表,建约束,建外键

use stu Create Table Course( CID Varchar(12)Not Null Primary Key, CName Varchar(20)Not Null Unique, CCridet Varchar(20)Not Null ); Select*from Course --利用命令为表Course创建主键 Alter Table Course Add Constraint PK_CNo Primary Key(CID,CName) --删除约束 Alter Table Course Drop Constraint UQ__Course__0425A276 --利用语句增加Unique约束 Alter Table Course Add Constraint Ue_Cname Unique(CName) --增加Default约束 Alter Table Course Add Constraint

UD_Credit Default'内蒙古呼和浩特'For CCridet --插入新的记录 Insert Into Course Values('001','OOP',Default) Select*from Course Insert Into Course(CID,CName) Values('002','OOO') select*from Course --如果利用Insert 语句指定特定的列时,必须包含 --不能为空的所有列(不能为空但定义了Default约束 --除外) Create Table Stu( SID Varchar(12)Not Null, SName Varchar(12)Not Null, SSex Char(2)Not Null ) Select*From Stu Alter Table Stu Add COnstraint

SQL的主键和外键的作用

SQL得主键与外键得作用: 外键取值规则:空值或参照得主键值。 (1)插入非空值时,如果主键表中没有这个值,则不能插入。 (2)更新时,不能改为主键表中没有得值。 (3)删除主键表记录时,您可以在建外键时选定外键记录一起级联删除还就是拒绝删除。(4)更新主键记录时,同样有级联更新与拒绝执行得选择。 简而言之,SQL得主键与外键就就是起约束作用. 关系型数据库中得一条记录中有若干个属性,若其中某一个属性组(注意就是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学生表(学号,姓名,性别,班级) 其中每个学生得学号就是唯一得,学号就就是一个主键; 课程表(课程编号,课程名,学分) 其中课程编号就是唯一得,课程编号就就是一个主键; 成绩表(学号,课程号,成绩) 成绩表中单一一个属性无法唯一标识一条记录,学号与课程号得组合才可以唯一标识一条记录,所以,学号与课程号得属性组就是一个主键. 成绩表中得学号不就是成绩表得主键,但它与学生表中得学号相对应,并且学生表中得学号就是学生表得主键,则称成绩表中得学号就是学生表得外键;同理,成绩表中得课程号就是课程表得外键。 定义主键与外键主要就是为了维护关系数据库得完整性,总结一下: 一、主键就是能确定一条记录得唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号就是唯一能确定您这个人得,其她都可能有重复,所以,身份证号就是主键。 外键用于与另一张表得关联。就是能确定另一张表记录得字段,用于保持数据得一致性。比如,A表中得一个字段,就是B表得主键,那她就可以就是A表得外键. 二、主键、外键与索引得区别 定义: 主键—-唯一标识一条记录,不能有重复得,不允许为空 外键--表得外键就是另一表得主键,外键可以有重复得,可以就是空值 索引-—该字段没有重复值,但可以有一个空值

MYSQL外键(Foreign Key)的使用

在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束。 外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持); 2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立; 3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以; 外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作; 外键的定义语法: [CONSTRAINT sym bol] FOREIGN KEY [id] (index_col_name, ...) REFERENCES tbl_name (index_col_name, ...) [ON DELETE {REST RICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] [ON UPDATE {REST RICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] 该语法可以在CREATE TABLE 和ALTER TABLE 时使用,如果不指定CONSTRAINT sym bol,MYSQL会自动生成一个名字。 ON DELETE、ON UPDATE表示事件触发限制,可设参数: RESTRICT(限制外表中的外键改动) CASCADE(跟随外键改动) SET NULL(设空值) SET DEFAULT(设默认值) NO ACTION(无动作,默认的) 搞个例子,简单演示一下使用,做dage和xiaodi两个表,大哥表是主键,小弟表是外键: 建表: 1CREATE TABLE`dage` ( 2`id` int(11) NOT NULL auto_increment, 3`name` varchar(32) default'', 4PRIMARY KEY(`id`) 5) ENGINE=InnoDB DEFAULT CHARSET=latin1; 6 7CREATE TABLE`xiaodi` ( 8`id` int(11) NOT NULL auto_increm ent, 9`dage_id` int(11) default NULL, 10`nam e` varchar(32) default'', 11PRIMARY KEY(`id`), 12KEY`dage_id` (`dage_id`), 13CONSTRAINT`xiaodi_ibfk_1` FOREIGN KEY(`dage_id`) REFERENCES`da ge` (`id`) 14) ENGINE=InnoDB DEFAULT CHARSET=latin1; 插入个大哥:

SQL Server 外键约束的例子

外键约束的测试表与测试数据 -- 创建测试主表. ID 是主键. CREATE TABLE test_main ( id INT, value V ARCHAR(10), PRIMARY KEY(id) ); -- 创建测试子表. CREATE TABLE test_sub ( id INT, main_id INT, value V ARCHAR(10), PRIMARY KEY(id) ); -- 插入测试主表数据. INSERT INTO test_main(id, value) V ALUES (1, 'ONE'); INSERT INTO test_main(id, value) V ALUES (2, 'TWO'); -- 插入测试子表数据. INSERT INTO test_sub(id, main_id, value) V ALUES (1, 1, 'ONEONE'); INSERT INTO test_sub(id, main_id, value) V ALUES (2, 2, 'TWOTWO'); 默认外键约束方式

1> ALTER TABLE test_sub ADD CONSTRAINT main_id_cons FOREIGN KEY (main_id) REFERENCES test_main; 2> go 1> DELETE 2> test_main 3> WHERE 4> ID = 1; 5> go 消息547,级别16,状态1,服务器HOME-BED592453C\SQLEXPRESS,第1 行 DELETE 语句与REFERENCE 约束"main_id_cons"冲突。该冲突发生于数据库"Stock",表"db o.test_sub", column 'main_id'。 语句已终止。 测试完毕后,删除外键约束 ALTER TABLE test_sub DROP CONSTRAINT main_id_cons; DELETE CASCADE 方式 1> -- 创建外键(使用ON DELETE CASCADE 选项,删除主表的时候,同时删除子表) 2> ALTER TABLE test_sub 3> ADD CONSTRAINT main_id_cons

mysql主键外键总结

1.两实体间主外键关系就是一对多的关系。 2.学生和班级之间就是一对多关系。 3.班级是一;学生是多 4.班级表包含主键(classpk); 学生表包含对班级表的引用(classpk) 这个引用关系就是通常说的外键,外键即使其他表的主键,在这里学生表中classpk就是来自于班级表中的主键。 所以说:学生表是外键表,班级表是主键表。 5.外键表和主键表的说法主要是用于说明一对多的关系。 6.外键表和主键表其实是相对的,某个表既可以是其他表的主键表,也可以是另一个或者另一些表的外键表,即某个表既可以是外键表也可以是主键表。 如:a 和 b 是1对多关系,那么a是主键表,b是外键表。 c 和a 是1对多关系,那么c是主键表,a是外键表。 综上可以发现a既可以是主键表,又可以是外键表。 主键表体现了1的关系 外键表体现了多的关系。 ------------------------------------------- 7.在外键表中增加一行时数据,必先保证外键已经存在。 就是说插入数据时,外键必须已经存在于主键表中。 (外键就是来源于主键表的主键嘛) 例如: 先有班级后有学生,插入一个学生必须保证,班级先存在。 8.删除主键表时,必须首先删除主键表关联的所有外键表中的信息。 例如: 删除一个班级之前,必须删除首先删除该班级所有的学生。 9.删除外键表中的数据时,对主键表不会有任何影响。 例如: 删除一个学生对班级不会有影响。 10.实体之间的多对多关系,其实就是建立一个中间表,中间表包含多对多实体之间的外键。例如: a 和 b 多对多 a主键apk b主键bpk 建立中间表c c包含外键(apk,bpk)

相关主题