SQLServer 重命名所有外键约束

合集下载

SQLServer - 约束

SQLServer - 约束

SQLServer - 约束在SQLServer中,有3种不同类型的约束。

1、实体约束实体约束是关于行的,比如某一行出现的值就不允许出现在其他行,例如主键。

2、域约束域约束是关于列的,对于所有行,某一列有那些约束,例如CHECK约束。

3、参照完整性约束如果某列的值必须与其他列的值匹配,那就意味着需要一个参照完整性约束,例如外键。

在学习约束之前,首先来了解下为约束命名需要注意哪些地方。

SQLServer在我们不提供名称时,会自动创建名称,但是由系统自动创建的名称并不是特别有用。

例如,系统生成的主键名称可能是这样的:PK_Employees_145C0A3F。

PK代表主键(primary key),Employees代表在Employees表中,而剩下的“145C0A3F”部分是为了保证唯一性而随机生成的值。

只有通过脚本创建才会得到这种值,如果是通过Managerment Studio创建表,那么就直接是PK_Employees。

对于系统自动生成的Check约束名称如:CK_Customers_22AA2996。

CK代表这是一个Check约束,Customers代表是在Customers表中,后面的22AA2996还是一个随机数。

如果一个表中有多个Check约束,则命名可能如下:CK_Customers_22AA2996CK_Customers_25869641CK_Customers_267ABA7A如果你需要修改这些约束其中的一个,那么你很难分辨这些约束到底是哪一个。

因此,为了能够一眼看上去就知道这个约束是用来干什么的,我们应该使用一种简单明了的短语来进行命名。

例如要确保某一列电话号码格式正确的约束,我们可以使用命名CK_Customers_PhoneNo这样的短语来命名。

总之命名要做到以下几点:1、一致性2、通俗易懂3、满足以上两个条件的情况下简化名称。

1、主键约束主键是每行的唯一标识符,仅仅通过它就能准确定位到一行,其中主键列在整个表中不能有重复,必须包含唯一的值(不能为NULL)。

简述 sql server 中的七大约束。

简述 sql server 中的七大约束。

简述 sql server 中的七大约束。

SQL Server是一种流行的关系型数据库管理系统(RDBMS),它可以帮助开发人员快速、高效地管理和检索数据。

在SQL Server中,约束是一种用于保证数据完整性和一致性的机制。

本文将简要介绍SQL Server中的七大约束。

1. 主键约束主键约束是指在关系表中唯一标识每个记录的一个或多个字段。

主键必须是唯一的、非空的,并且不允许重复值。

主键约束可以确保每个记录都可以轻松地识别和访问。

2. 外键约束外键约束是指在一个表(称为“子表”)中引用另一个表(称为“父表”)中主键的字段。

外键约束可以确保引用其他表中的数据时不会破坏数据完整性和一致性。

3. 唯一约束唯一约束是指在一个或多个字段上强制唯一性的约束。

唯一约束与主键的区别在于它们不必成为每行的唯一标识符。

唯一约束可以确保特定字段或字段组合中的数据是唯一的。

4. 非空约束非空约束是指在一个或多个字段上强制不允许为空的约束。

这个约束可以确保插入、更新或删除记录时不会造成无效的数据状态。

5. 检查约束检查约束是指在一个或多个字段上定义了一个表达式,该表达式必须返回TRUE,否则不允许插入、更新或删除记录。

检查约束可以用于对数据类型、域、值范围和格式的限制。

6. 数据默认值约束数据默认值约束是指在一个或多个字段上定义了默认值,如果插入记录时没有指定该字段的值,则使用默认值。

数据默认值约束可以确保某些字段始终具有特定的默认值。

7. 限制约束限制约束是一种指定插入、更新或删除操作条件的高级约束。

限制约束可以使用特定的条件表达式来限制某一类操作,例如要求用户输入密码验证或工作时间窗口。

总的来说,在SQL Server中使用约束可以提高数据完整性和一致性,减少错误和数据损坏的可能性。

理解并使用这七种约束将有助于优化数据库设计,并确保数据库系统得到最佳的性能和可靠性。

SQL Server中约束的介绍

SQL Server中约束的介绍

SQL Server中约束的介绍摘要对于SQL Server中的约束,想必大家并不是很陌生。

但是约束中真正的内涵是什么,并不是很多人都很清楚的。

本文以详细的文字来介绍了什么是约束,以及如何在数据库编程中应用和使用这些约束,来达到更好的编程效果。

(本文部分内容参考了SQL Server联机手册)内容数据完整性分类实体完整性域完整性引用完整性用户定义完整性PRIMARY KEY约束DEFAULT约束CHECK约束UNIQUE约束FOREIGN KEY约束正文在数据库管理系统中,保证数据库中的数据完整性是非常重要的。

所谓数据完整性,就是指存储在数据库中数据的一致性和正确性。

约束定义关于列中允许值的规则,是强制完整性的标准机制。

使用约束优先于使用触发器、规则和默认值。

查询优化器也使用约束定义生成高性能的查询执行计划。

SQL Server联机丛书中,将数据完整性解释如下:“存储在数据库中的所有数据值均正确的状态。

如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。

”强制数据完整性可确保数据库中的数据质量。

例如,如果输入了employee_id 值为123 的职员,那么该数据库不应允许其他职员使用同一ID 值。

如果计划将employee_rating 列的值范围设定为从 1 到5,则数据库不应接受6。

如果表有一dept_id 列,该列存储职员的部门编号,则数据库应只允许接受公司中的有效部门编号。

数据完整性分类在SQL Server中,根据数据完整新措施所作用的数据库对象和范围不同,可以将数据完整性分为以下几种。

实体完整性域完整性引用完整性用户定义完整性SQL Server联机丛书中指明:“对表进行计划有两个重要步骤:标识列的有效值和确定如何强制列中的数据完整性。

”实体完整性实体完整性简单的说,就是将表中的每一行看作一个实体。

实体完整性要求表的标示符列或主键的完整性。

可以通过建立唯一索引、PRIMARY KEY约束、UNIQUE约束,以及列的IDENTITY属性来实施实体完整性。

MicrosoftSQLServer2005中定义约束及删除约束(精)

MicrosoftSQLServer2005中定义约束及删除约束(精)

Microsoft SQL Server2005中定义约束及删除约束为了保证输入数据的正确性,必须要在创建表的时候设置约束, 在这里首先简单的介绍一下如何设置约束:(需要注意的是,在用Management Studio创建约束的时候,在修改完后,都需要保存表以保存修改。

)1. Microsoft SQL Server 2005中有五种约束,分别是 CHECK约束, DEFAULE 约束,PRIMARY KEY约束,FROEIGN KE约束, UNIQUE约束.(1) CHECK约束:用来限制输入一列或者多列的值的范围,通过逻辑表达式来判断数据的有效性,也就是一个列的输入内容必须满足CHECK约束条件,否则,数据无法正常输入,从而强制数据的域的完整性.(2) DEFAULT约束若在表中定义了DEFAULT约束,用户在插入新的数据时,如果该列没有指定数据,那么系统将默认值赋给该列,默认值也可以为空.(3) PRIMARY KEY约束在表中经常有一列或多列的组合,其值能在唯一标识表中每一行. 这样的一列或多列成为表的主健(Primary Key),通过它可以强制表的实体完整性。

一个表只能有一个主键,而且主键不能为空值。

(4) FOREIGN KEY约束外键(foreign key)是用于建立和加强两个表(主表与从表)的列或多列数据之间的连接的,当添加,修改或者删除数据时,通过参照完整性来保证它们之间的数据的一致性。

先定义主键,再对从表定义外键约束。

(5)UNIQUE 约束UNIQUE约束用于确保表中的两个数据行在非主键中没有相同的列值,与PRIMARY KEY 约束类似,UNIQUE约束也强制唯一性,为表中的一列或多列提供实体完整性.但 UNIQUE用于非主键的一列或多列组合,且一个表可以定义多个UNIQUE约束.2.约束的创建,查看,删除(即可以通过SQL SERVER Management Studio的“对象资源管理器”面板进行,也可通过T-SQL进行.)(1) CHECK 约束:通过Management Studio设置,设置性别只能输入‘男’,或者‘女’首先打开表的列,右键点击‘性别’,选择 CHECK 约束如下图在表达式里输入:性别='男' or 性别='女',点关闭即可。

SQL Server 外键约束的例子

SQL Server 外键约束的例子

SQL Server 外键约束的例子外键约束的测试表与测试数据-- 创建测试主表. ID 是主键.CREATE TABLE test_main (id INT,value VARCHAR(10),PRIMARY KEY(id));-- 创建测试子表.CREATE TABLE test_sub (id INT,main_id INT,value VARCHAR(10),PRIMARY KEY(id));-- 插入测试主表数据.INSERT INTO test_main(id, value) VALUES (1, 'ONE');INSERT INTO test_main(id, value) VALUES (2, 'TWO');-- 插入测试子表数据.INSERT INTO test_sub(id, main_id, value) VALUES (1, 1, 'ONEONE');INSERT INTO test_sub(id, main_id, value) VALUES (2, 2, 'TWOTWO');默认外键约束方式1> ALTER TABLE test_sub ADD CONSTRAINT main_id_cons FOREIGN KEY (ma in_id) REFERENCES test_main;2> go1> DELETE2> test_main3> WHERE4> ID = 1;5> go消息 547,级别 16,状态 1,服务器 HOME-BED592453C\SQLEXPRESS,第 1 行DELETE 语句与 REFERENCE 约束"main_id_cons"冲突。

该冲突发生于数据库"Stock",表"db o.test_sub", column 'main_id'。

SQLServer主键、外键、唯一等约束

SQLServer主键、外键、唯一等约束

SQLServer主键、外键、唯⼀等约束主键(primary key)约束、外键(foreign key)约束、唯⼀(unique)约束、检查(check)约束、默认值(default)约束实例Oracle 有如下类型的约束:NOT NULL(⾮空)、UNIQUE Key(唯⼀约束)、PRIMARY KEY(主键约束)、FOREIGN KEY(外键约束)、CHECK约束Oracle使⽤SYS_Cn格式命名约束.创建约束:在建表的同时创建、建表后创建约束的类型有如下⼏种:C (check constraint on a table)P (primary key)U (unique key)R (Referential AKA Foreign Key)V (with check option, on a view)O (with read only, on a view)1、创建约束CREATE TABLE students(student_id VARCHAR2(10) NOT NULL,student_name VARCHAR2(30) NOT NULL,college_major VARCHAR2(15) NOT NULL,status VARCHAR2(20) NOT NULL,state VARCHAR2(2),license_no VARCHAR2(30)) TABLESPACE student_data;2、创建主键:ALTER TABLE students ADD CONSTRAINT pk_students PRIMARY KEY (student_id)USING INDEX TABLESPACE student_index;Alter table table_name add constrants BID primary key (bookno);ALERT TABLE table_name MODIFY( column1 PRIMARY KEY);3、创建Unique约束:ALTER TABLE students ADD CONSTRAINT uk_students_license UNIQUE (state, license_no)USING INDEX TABLESPACE student_index;4、创建Check约束:定义每⼀记录都要满⾜的条件,条件表达式不允许有:CURRVAL, NEXTVAL, LEVEL, ROWNUM,SYSDATE, UID, USER, USERENV 函数:ALTER TABLE students ADD CONSTRAINT ck_students_st_lic CHECK ((state IS NULL AND license_no IS NULL) OR (state IS NOT NULL AND license_no is NOT NULL));添加check约束(check_1为约束名,dept_salary为字段名 ) alter table emp add constraint check_1 check(dept_salary>0); 5、创建外键约束:ALTER TABLE students ADD CONSTRAINT fk_students_state FOREIGN KEY (state) REFERENCES state_lookup (state);6. 创建不能为空约束 not nullalter table table_name modify(name not null);alter table table_name modify name1 varchar2(20) not null;实例1:⾸先创建学⽣信息表studentinfo和学⽣成绩表testinfo。

sqlserver中sql修改表的字段名、字段属性等

sqlserver中sql修改表的字段名、字段属性等

sqlserver中sql修改表的字段名、字段属性等向sql server表中增加一个 varchar 列:ALTER TABLE distributors ADD COLUMN address varchar(30);从sql server表中删除一个字段:ALTER TABLE distributors DROP COLUMN address RESTRICT;在一个操作中修改两个现有字段的类型:ALTER TABLE distributorsALTER COLUMN address TYPE varchar(80),ALTER COLUMN name TYPE varchar(100);使用一个 USING 子句,把一个包含 UNIX 时间戳的 integer 字段转化成 timestamp with time zone:ALTER TABLE fooALTER COLUMN foo_timestamp TYPE timestamp with time zoneUSINGtimestamp with time zone 'epoch' + foo_timestamp * interval '1 second';对现存字段改名:ALTER TABLE distributors RENAME COLUMN address TO city;更改现存sql server表的名字:ALTER TABLE distributors RENAME TO suppliers;给一个字段增加一个非空约束:ALTER TABLE distributors ALTER COLUMN street SET NOT NULL;从一个字段里删除一个非空约束:ALTER TABLE distributors ALTER COLUMN street DROP NOT NULL;给一个表增加一个检查约束:ALTER TABLE distributors ADD CONSTRAINT zipchk CHECK(char_length(zipcode) = 5);删除一个表和它的所有子表的监查约束:ALTER TABLE distributors DROP CONSTRAINT zipchk;向表中增加一个外键约束:ALTER TABLE distributors ADD CONSTRAINT distfk FOREIGN KEY (address) REFERENCES addresses(address) MATCH FULL;给表增加一个(多字段)唯一约束:ALTER TABLE distributors ADD CONSTRAINT dist_id_zipcode_key UNIQUE (dist_id, zipcode);给一个表增加一个自动命名的主键约束,要注意的是一个表只能有一个主键:ALTER TABLE distributors ADD PRIMARY KEY (dist_id);把表移动到另外一个表空间:ALTER TABLE distributors SET TABLESPACE fasttablespace;。

sqlserver常用sql语句,更改字段,建立唯一键,多个字段去重复等

sqlserver常用sql语句,更改字段,建立唯一键,多个字段去重复等

sqlserver常⽤sql语句,更改字段,建⽴唯⼀键,多个字段去重复等--修改字段类型:--alter table 表名 alter column 待修改字段名待修改字段类型alter table users alter column userid varchar(10)--多个字段建⽴唯⼀索引create unique index [索引名] on 表名(字段名,字段名)alter table 表名 add constraint 约束名 unique (字段名)alter table 表名 add constraint 约束名 unique (字段名,字段名)--创建表的时候创建⾃增主键create table tb(id int identity(1,1) primary key )--修改字段主键⾃增进⼊ssms界⾯设置alter table tb alter column id int not nullalter table tb add constraint pkid primary key (id)--修改字段为⾮空alter table tb alter column id int not null--建⽴索引create index mycolumn_index on mytable (myclumn)--AmazonOrderId和seller_id两个字段重复SELECT count(*)FROM (SELECT rn = ROW_NUMBER()OVER(PARTITION BY AmazonOrderId, seller_id ORDER BY GETDATE()), *FROM Orders) tWHERE rn = 1。

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

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
, as FKTable
, as FKColumn
, as PKTable
, 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。

相关文档
最新文档