SQL Server外键设置笔记

合集下载

sql server 的 foreign key 语法

sql server 的 foreign key 语法

sql server 的foreign key 语法
在 SQL Server 中,外键(Foreign Key)用于确保在一个表中的数据与另一个表中的数据相匹配。

FOREIGN KEY约束用于防止破坏表之间关系的操作。

FOREIGN KEY 是一张表中的字段(或字段集合),它引用另一张表中的主键。

具有外键的表称为子表,具有主键的表称为被引用表或父表。

外键语法如下:
创建表时添加外键约束:
在已有表中添加外键约束:
删除外键约束:
如需定义多个列的FOREIGN KEY约束,使用下面的SQL语法
字段2 varchar(255) NOT NULL,
字段3 varchar(255),
CONSTRAINT 外键名 FOREIGN KEY (字段1) REFERENCES 外表(字段1)
)
举例说明:
UNIQUE约束唯一标识数据库表中的每条记录。

Persons表
以下SQL 在创建"Orders"表时在"PersonID"列上创建了一个FOREIGN KEY:CREATE TABLE Orders (
OrderID int NOT NULL PRIMARY KEY,
OrderNumber int NOT NULL,
PersonID int FOREIGN KEY REFERENCES Persons(PersonID) );。

mysqlsqlserveroracle三种数据库维护索引外键字段语法总结

mysqlsqlserveroracle三种数据库维护索引外键字段语法总结

mysqlsqlserveroracle三种数据库维护索引外键字段语法总结下面是MySQL、SQL Server和Oracle三种数据库在维护索引、外键和字段方面的语法总结:1.MySQL:-创建索引:-在已有表的列上创建索引:```ALTER TABLE table_name ADD INDEX index_name (column_name);```-在已有表的多个列上创建联合索引:```ALTER TABLE table_name ADD INDEX index_name (column1, column2);```-创建外键:-在已有表的列上创建外键:```ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY (column_name) REFERENCES referenced_table_name (referenced_column_name);```-修改字段:-修改字段的数据类型和长度:```ALTER TABLE table_name MODIFY column_namenew_data_type(length);```2. SQL Server:-创建索引:-在已有表的列上创建索引:```CREATE INDEX index_name ON table_name (column_name);```-在已有表的多个列上创建联合索引:```CREATE INDEX index_name ON table_name (column1, column2);```-创建外键:-在已有表的列上创建外键:```ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY (column_name) REFERENCES referenced_table_name (referenced_column_name);```-修改字段:-修改字段的数据类型和长度:```ALTER TABLE table_name ALTER COLUMN column_namenew_data_type(length);```3. Oracle:-创建索引:-在已有表的列上创建索引:```CREATE INDEX index_name ON table_name (column_name);```-创建外键:-在已有表的列上创建外键:```ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY (column_name) REFERENCES referenced_table_name (referenced_column_name);```-修改字段:-修改字段的数据类型和长度:```ALTER TABLE table_name MODIFY column_namenew_data_type(length);```需要注意的是述语法只是简要总结了MySQL、SQL Server和Oracle 在维护索引、外键和字段方面的常见语法。

SQLServer语句创建数据库和表——并设置主外键关系

SQLServer语句创建数据库和表——并设置主外键关系

SQLServer语句创建数据库和表——并设置主外键关系简单的创建数据库的 SQL 语句:1use master2go34if exists(select*from sysdatabases where name='Test')5begin6select'该数据库已存在'7drop database Test --如果该数据库已经存在,那么就删除它8end9else10begin11create database Test12on primary--表⽰属于 primary ⽂件组13 (14 name='stuDB_data', -- 主数据⽂件的逻辑名称15 filename='D:\stuDB_data.mdf', -- 主数据⽂件的物理名称16 size=5mb, --主数据⽂件的初始⼤⼩17 maxsize=100mb, -- 主数据⽂件增长的最⼤值18 filegrowth=15%--主数据⽂件的增长率19 )20log on21 (22 name='stuDB_log', -- ⽇志⽂件的逻辑名称23 filename='D:\stuDB_log.ldf', -- ⽇志⽂件的物理名称24 size=2mb, --⽇志⽂件的初始⼤⼩25 maxsize=20mb, --⽇志⽂件增长的最⼤值26 filegrowth=1mb --⽇志⽂件的增长率27 )28end接下来是创建数据表的 SQL 语句:1use Test --表⽰设置为在该数据库(Test)执⾏下⾯的SQL语句2go可以先执⾏⼀下以上语句。

或者在这⾥选择数据库。

1use Test --表⽰设置为在该数据库(Test)执⾏下⾯的SQL语句2go34if exists(select*from sysobjects where name='Student')5begin6select'该表已经存在'7drop table Student --删除表8end9else10begin11create table Student12 (13 S_Id int not null identity(1,1) primary key, --设置为主键和⾃增长列,起始值为1,每次⾃增114 S_StuNo varchar(50) not null,15 S_Name varchar(20) not null,16 S_Sex varchar(10) not null,17 S_Height varchar(10) null,18 S_BirthDate varchar(30) null19 )20end2122--添加约束23alter table Student add constraint24 UQ_S_StuNo --约束名25unique--约束类型(唯⼀约束)26 (S_StuNo) --列名2728--删除约束29alter table Student drop constraint30 UQ_S_StuNo --约束名SQL语句创建表变量:1declare@Score table2 (3 Id int not null,4 Name varchar(50) null5 )67insert into@Score8select'1','刘邦'union9select'2','项⽻'1011select*from@ScoreSQL语句创建临时表:1-- ## 表⽰全局临时表2create table ##temp3 (4 Id int not null,5 Name varchar(10) null6 )78-- # 表⽰局部临时表9create table #temp10 (11 Id int not null,12 Name varchar(10) null13 )SQL 语句创建表并设置主外键关系:1if exists(select*from sysObjects where name='Course')2begin3select'该表已经存在'4drop table Course5end6else7begin8create table Course9 (10--列名字段类型是否为空标识外键列(外键列名)关联表的表名(关联的字段名)11 Stu_Id int null foreign key(Stu_Id) references Student(S_Id),12 C_Id int not null identity(1,1) Primary key,13 C_Name varchar(100) not null14 )15end注意:表变量和临时表都不能添加约束,具体的特征和适⽤场景请参见:/kissdodog/archive/2013/07/03/3169470.html。

在sql server2008数据库中创建主外键

在sql server2008数据库中创建主外键

设置主、外键的方法1、主键的设置(1)设置gl22class表的主键如图1所示。

在gl22class表名上单击右键,选择设计命令,如A 处所示。

打开右边的窗口,用鼠标单击要设置的关键字class_id的最左边箭头,如B处所示。

最后单击主键,如C处所示。

A图1如果设置成功,如图2中A处所示。

最后单击保存按钮。

如B处所示。

图2(2)设置gl22course 表的主键 和(1)设置class 表的主键的方法是一样的。

Course 表的关键字是course_id 。

最后单击保存按钮。

(3)设置gl22department 表的主键和(1)设置class 表的主键的方法是一样的。

department 表的关键字是dept_id 。

最后单击保存按钮。

(4)设置gl22student 表的主键和(1)设置class 表的主键的方法是一样的。

student 表的关键字是student_id 。

最后单击保存按钮。

(5)设置gl22grade 表的主键和(1)设置class 表的主键的方法是一样的。

grade 表的关键字是student_id 和course_id 。

这两个属性要同时设置,设置方法是:按下shift 键,用鼠标单击A 处和B 处。

同时选中后,单击C 处。

最后单击保存按钮。

图32、外键的设置(1)gl22class表和gl22department表设置外键如图4所示。

在gl22class表上单击右键选择设计命令。

打开右边A处所示。

打开如图5所示的窗口。

图4在图5中单击添加按钮,用鼠标单击表和列规范,出现A处的按钮,单击A处按钮,打开如图6所示的窗口。

图5图6如图6所示,选择相应表名和字段名。

单击确定按钮。

在图7中单击关闭按钮。

图7图7中单击保存按钮,出现如图8所示的界面。

单击是按钮。

外键设置成功。

图8(2)gl22student表和gl22class表设置外键在gl22student表上单击右键选择设计命令。

SqlServer数据库字典--表.视图.函数.存储过程.触发器.主键.外键.约束.规则

SqlServer数据库字典--表.视图.函数.存储过程.触发器.主键.外键.约束.规则

SqlServer数据库字典--表.视图.函数.存储过程.触发器.主键.外键.约束.规则SELECT DISTINCTTOP 100 PERCENT isnull(,'') AS ⽗对象, o.xtype,CASE o.xtype WHEN 'C' THEN 'CHECK 约束' WHEN 'D' THEN '默认值或DEFAULT约束'WHEN 'F' THEN 'FOREIGNKEY约束' WHEN 'L' THEN '⽇志' WHEN 'FN' THEN '标量函数'WHEN 'IF' THEN '内嵌表函数' WHEN 'P' THEN '存储过程' WHEN 'PK' THEN 'PRIMARYKEY约束'WHEN 'RF' THEN '复制筛选存储过程' WHEN 'S' THEN '系统表' WHEN 'TF' THEN '表函数'WHEN 'TR' THEN '触发器' WHEN 'U' THEN '⽤户表' WHEN 'UQ' THEN 'UNIQUE 约束'WHEN 'V' THEN '视图' WHEN 'X' THEN '扩展存储过程' WHEN 'R' THEN '规则' ELSE NULLEND AS 类型, AS 对象名, o.crdate AS 创建时间, o.refdate AS 更改时间,c.text AS 声明语句,OBJECTPROPERTY(o.id, N'IsMSShipped')FROM dbo.sysobjects o Left JOINdbo.sysobjects p ON o.parent_obj = p.id LEFT OUTER JOINdbo.syscomments c ON o.id = c.idWHERE --(o.xtype IN ('C','D','F','PK','UQ','L','FN','IF','TF','TR','P','R','RF','X','S','U','V')) AND(OBJECTPROPERTY(o.id, N'IsMSShipped') = 0) AND (isnull(,'') <> N'dtproperties')ORDER BY o.xtype DESC。

SQL关于外键和主键的理解

SQL关于外键和主键的理解

use mastergoif exists (select * from sysobjects where name='player')drop table Weapon--武器表(主表)create table Weapon(WeaponID int identity(1,1) primary key,Wnane varchar(20) not null)--绝技表(主表)if exists (select * from sysobjects where name='Skill')drop table Skillcreate table Skill( SkillID int identity(1,1) primary key,Sname varchar(20)not null unique)if exists (select * from sysobjects where name='player')drop table player--选手表(子表)create table player( pid int identity(1,1) primary key,pname varchar(20) not null,weaponid int foreign key references Weapon(WeaponID),--字表中(player)有两个外键存在,skillid int foreign key references Skill(SkillID)--它们所对应的主表是)--也可以这样理解只有在子表中存在外键--给几张表赋值--武器表,先用一次只添加一条数据的方法来添加insert into Skill values('我用流拳法')--一次添加多条数据insert into Skillselect '射击' unionselect '我流星格斗技' unionselect '杰夫流喧哗杀法'unionselect '骨法'select * from Skill -- 此表中存在SkillID为2或者WeaponID为2,所以在可以把skillid和weaponid全部修改为2--如果修改为除了1,2,3,5,6的值将不会修改成功--向Weapon表中添加数据insert into Weaponselect '枪' unionselect '铁锤' unionselect '棍' unionselect '扇子' unionselect '花拳秀腿'select * from Weapon-- 道理同上--向player(子表)添加数据insert into playerselect '李小龙', 1,2(主表中一定存在一个2这样的值,子表中才能添加) union select '后裔', 2,3 unionselect '金轮法王',3,4 unionselect '郭芙荣', 4,5 unionselect '洪七公', 6,1select * from player--修改IDupdate player set WeaponID=5update player set SkillID=5select * from player--可以修改player(子表)中weaponid(外键列)和skillid(外键列)--因为它们两个是子表2中的列weaponid和列skillid不能修改主表(Skill)中的SkillID,但可以修改字表中的SkillID,因为主表中的是有表示列存在的不允许被修改的还有外键要添加的数据,一定要在主键中能找到与之对应的才行。

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。

sqlserver2012学习笔记

sqlserver2012学习笔记

sqlserver2012学习笔记select ProductID, Name as ProductName, --using an alias'The list price for ' + ProductNumber + ' is′+convert(varchar,ListPrice)+′.′,−−usingtheconcatenationtojoincharacterend−to−end.′Thelistpricefor′+ProductNumber+′is ' + convert(varchar,ListPrice) +'.' as [Description] --using brackets to let SQL server conside the strin as a column namefrom Production.Product在where语句中⽤>,=,<等字符eg:select * from [Sales].[SalesOrderHeader]where SalesPersonID=275select * from [Sales].[SalesOrderHeader]where SalesOrderNumber='so43670' //string类型加单引号where语句中使⽤or或andeg:select SalesOrderID,OrderDate,SalesPersonID,TotalDue as TotalSalesfrom [Sales].[SalesOrderHeader]where SalesPersonID=275 and TotalDue>5000 and Orderdate between '2005-08-01' and '1/1/2006'like中使⽤%号 //%表⽰可以有,可以没有select * from [Production].[Product]where name like'Mountain'select * from [Production].[Product]where name like'%Mountain%' --Wildcard % matches any zero or more characters_下划线表⽰前⾯有⼀个不知道的字符select * from [Production].[Product]where name like'_ountain%'Where语句中使⽤in或not inselect * from [Production].[Product]where color in ('red','white','black')select * from [Production].[Product]where class not in ('H') -- same as using: <> 'H'//没有H的is null 与is not null--Topic 10select * from [Production].[Product]where size is nullselect * from [Production].[Product]where size is not nullor与and的理解Processing math: 100%。

SQLSever基本命令使用复习

SQLSever基本命令使用复习

SQLSever基本命令使⽤复习⽬录前⾔因为数据库原理的专业⽼师要在五⼀假期后进⾏考试,所以尝试写⼀个笔记,便于复习和分享。

操作环境:Hyper-v 虚拟机运⾏ Windows Sever 2012 R2 + SQL Sever Express 2012 SP2使⽤教材:数据库原理及应⽤教程第4版微课版主编陈志泊虚拟机的安装如果你是纯理论派的话,不装也不是不⾏,可以跳到。

Express 是 SQL Sever 的精简版,可以免费使⽤。

SQL Server Express 2005(以下简称 SQLExpress)是由微软公司开发的 SQL Server 2005(以下简称 SQL2005)的缩减版,这个版本是免费的,它继承了SQL Server 2005 的多数功能与特性,如:安全性设置、⾃定义函数和过程、Transact-SQL、SQL、CLR 等,还免费提供了和它配套的管理软件 SQL Server Management Studio Express。

SQLExpress 有⼏个主要的限制:仅允许本地连接。

数据库⽂件的最⼤尺⼨为4GB,此限制只对数据⽂件(后缀名为 mdf),⽇志⽂件(后缀名为 ldf)不受此限。

只使⽤⼀个CPU来运算,不能充分利⽤多CPU服务器的性能。

可使⽤的记忆体量最⾼只有1GB。

没有 SQL Agent,若要做排程服务必须⾃⼰编写。

因此它是 SQL Server 产品系列中⾯对低端的产品,是⾯对桌⾯型应⽤,或者⼩型的内部⽹络应⽤的。

笔者在此选择安装 64位 with Tools (安装包名:SQLEXPRWT_x64_CHS.exe)的版本。

Express即使全部安装也不会⼤到哪⾥去,不像原版的 SQL Sever 有4GB的安装包⼤⼩……作为练习,⾜够⽤了。

点击上⾯的⽂字就可以跳转到下载链接。

笔者遇到的困难只有,Windows Sever 2012 R2 不⾃带 .NET 3.5 环境,所以需要在“添加⾓⾊和功能”界⾯⾃⾏添加,之后才能顺利安装 SQL Sever Express。

(转)SQLSERVER外键约束以及它的级联删除

(转)SQLSERVER外键约束以及它的级联删除

(转)SQLSERVER外键约束以及它的级联删除sql server中建⽴外键约束有3中⽅式:1.enterprise manager中,tables,design table,设置table的properties,可以建⽴constraint, reference key;2.enterprise manager中,diagrams, new diagrams,建⽴两个表的关系。

3.直接⽤transact sql语句。

三个⽅法都需要先建⽴数据表。

-- 创建表author :create table [dbo].[author] ([id] [bigint] not null ,[authorname] [char] (10) null ,[address] [char] (480) null ,[introduction] [ntext] null)-- 创建表mybbs:reate table [dbo].[mybbs] ([id] [bigint] identity (1, 1) not null ,[authorid] [bigint] not null ,[title] [char] (40) null ,[date_of_created] [datetime] null ,[abstract] [char] (480) null ,[content] [ntext] null)设置表mybbs中的authorid为外键,参照author表的id字段,直接使⽤transact sql语句,过程如下:--增加表mybbs(authorid)的外键约束fk_mybbs_author,表mybbs中的authorid受表author中的主键id约束:begin transactionalter table dbo.mybbs add constraint fk_mybbs_authorforeign key (authorid)references dbo.author([id]) on update cascade on delete cascade--删除外键约束fk_mybbs_author:--alter table dbo.mybbs drop constraint fk_mybbs_author--rollbackcommit transaction上⾯on update cascade,on delete cascade两个选项,指明以后author表的id字段有delete,update操作时,mybbs表中的id也会被级联删除或更新。

SQL Server 常用操作手册

SQL Server 常用操作手册

SQL Server 常用操作手册目录一、建库操作 (1)二、建表操作 (1)三、设主键操作 (2)四、设外键操作 (3)五、备份数据库操作 (4)六、还原数据库操作 (5)七、导入/导出数据操作 (6)一、建库操作1、打开企业管理器2、选中数据库节点,进行新建二、建表操作1、打开企业管理器2、选中数据库节点,新建数据库3、选中新建数据库文件,单击右键出现新建下拉框,在出现的菜单中打开所有任务,找到表选项三、设主键操作1、打开企业管理器2、选中新建数据库文件,单击右键出现新建下拉框,在出现的菜单中打开所有任务,找到表选项,进行新建表3、将新建好的表打开后,单击图表空白处单击右键出现下拉框,单击要设置主键名称4、置成功的主键钱会有一个钥匙的形状四、设外键操作1、打开企业管理器2、选择表,在表表上右键菜单中选择设计表3、然后我们就可以在属性前鼠标右键,选择索引/键4、在属性对话框中选择关系,在类型中我们选择新建按钮,然后设置我们需要的外键1、打开企业管理器2、找到我们需要备份的数据库,点击备份数据库3、在备份中我们可以选择完全备份或差异备份,备份到的地址我们通过添加完成4、写入要备份的文件名及地址,确定后就可以完成备份操作了1、打开企业管理器2、找到我们需要还原的数据库,点击还原数据库3、在还原数据库中,我们在还原中选择从设备,然后点击选择设备4、点击添加按钮来选择要还原的数据库,添加完成后点击确定后就可以完成还原操作了七、导入/导出数据操作1、打开企业管理器2、找到我们要导入/导出的数据库3、出现转换服务导入/导出向导的对话框,我们点击下一步4、我们选择数据源下边的QL Server身份验证,在数据库后边的下拉框中我们选择要导入/导出的数据库,然后点击下一步5、我们看到又弹出了一个跟上面一样的对话框,我们继续选择数据源下边的QL Server身份验证,在数据库后边的下拉框中我们选择要导入/导出的数据库,然后点击下一步6、我们选择要导入/导出的数据库文件,点击下一步7、点击下一步8、我们看到完成了数据库之间的导入/导出,点击完成按钮9、数据库之间的导入/导出操作完成。

SQL Server 外键约束的例子

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> go1> DELETE2> test_main3> WHERE4> ID = 1;5> go消息547,级别16,状态1,服务器HOME-BED592453C\SQLEXPRESS,第1 行DELETE 语句与REFERENCE 约束"main_id_cons"冲突。

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

SQLServer外键关系是强制约束,外键值也可以是空(NULL)

SQLServer外键关系是强制约束,外键值也可以是空(NULL)

SQLServer外键关系是强制约束,外键值也可以是空(NULL)在SQL Server中,实际上外键值可不可以为空(NULL),和外键关系是不是强制约束⽆关。

我们先在SQL Server数据库中建⽴两张表People和Car,⼀个People可以有多个Car,所以这两张表是⼀对多关系。

建⽴表People建表语句:CREATE TABLE[dbo].[People]([ID][int]NOT NULL,[Name][nvarchar](50) NULL,[Age][int]NULL,[Sex][nvarchar](50) NULL,CONSTRAINT[PK_People]PRIMARY KEY CLUSTERED([ID]ASC)WITH (PAD_INDEX =OFF, STATISTICS_NORECOMPUTE =OFF, IGNORE_DUP_KEY =OFF, ALLOW_ROW_LOCKS =ON, ALLOW_PAGE_LOCKS =ON) ON[PRIMARY] ) ON[PRIMARY]GO其中列ID是People表的主键Car建表语句:CREATE TABLE[dbo].[Car]([ID][int]NOT NULL,[Brand][nvarchar](50) NULL,[PeopleID][int]NULL,CONSTRAINT[PK_Car]PRIMARY KEY CLUSTERED([ID]ASC)WITH (PAD_INDEX =OFF, STATISTICS_NORECOMPUTE =OFF, IGNORE_DUP_KEY =OFF, ALLOW_ROW_LOCKS =ON, ALLOW_PAGE_LOCKS =ON) ON[PRIMARY] ) ON[PRIMARY]GOALTER TABLE[dbo].[Car]WITH CHECK ADD CONSTRAINT[FK_Car_People]FOREIGN KEY([PeopleID])REFERENCES[dbo].[People] ([ID])GOALTER TABLE[dbo].[Car]CHECK CONSTRAINT[FK_Car_People]GO其中列ID是Car表的主键,此外列PeopleID是Car表的外键,其关联People表的主键ID。

SQL的主键和外键

SQL的主键和外键

SQL的主键和外键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 表A add constraint FK_B foreign key (ticket_no) references 表B(ticket_no)alter table 表A add constraint FK_C foreign key (person_no) references 表C(person_no)alter table 成绩表 add constraint FK_StudentNo foreign key (StudentNo) references Student (StudentNo) ON UPDATE CASCADE ON DELETE CASCADE级联更新,级联删除,这样在删除主表Student时,成绩表中该学⽣的所有成绩都会删除。

SQLServer数据库,使用Alter修改表的主外键结构

SQLServer数据库,使用Alter修改表的主外键结构

SQLServer数据库,使⽤Alter修改表的主外键结构1.先创⼀张测试表,直接在创建时,设置UserId为主键2.检查表有⽆主键约束也可以使⽤SQL语句查询SELECT name FROM sys.key_constraintsWHERE type = 'PK' AND OBJECT_NAME(parent_object_id) = N'Test'3.使⽤ALTER修改表的主键每张表只能有⼀个主键,所以如果想要更改其他列为主键,需要先删除已有的主键我们可以使⽤上⾯的SQL查询语句,先找到主键名进⾏删除,再重新设置主键SELECT name FROM sys.key_constraintsWHERE type = 'PK' AND OBJECT_NAME(parent_object_id) = N'Test'--PK__Test__1788CC4C30E67086ALTER TABLE Test DROP CONSTRAINT PK__Test__1788CC4C30E67086检查主键是否已被删除4.然后我们开始将UserName设置为主键ALTER TABLE TestADD CONSTRAINT PK_Test_UserName PRIMARY KEY (UserName)主键就从UserId更改成UserName.5.再创建⼀张Test2表,这张表的Name列是外键是Test的UserName6.查找外键exec sp_pkeys 'Test'exec sp_fkeys'Test'select as 约束名,object_name(b.parent_object_id) as 外键表, as 外键列,object_name(b.referenced_object_id) as 主健表, as 主键列from sys.foreign_keys A inner join sys.foreign_key_columns B on A.object_id=b.constraint_object_idinner join sys.columns C on B.parent_object_id=C.object_id and B.parent_column_id=C.column_idinner join sys.columns D on B.referenced_object_id=d.object_id and B.referenced_column_id=D.column_idwhere object_name(B.referenced_object_id)='Test'7.删除外键约束 SELECT * FROM sys.foreign_keysWHERE referenced_object_id=OBJECT_ID('Test')--FK__Test2__Name__164452B1ALTER TABLE dbo.Test2DROP constraint FK__Test2__Name__164452B18.设置Student为新的外键关于删除主外键的时候,如果主外键名是变量存储,可以这样操作DECLARE @KeyName VARCHAR(255)SELECT @KeyName = name FROM sys.key_constraintsWHERE type = 'PK' AND OBJECT_NAME(parent_object_id) = N'Test' IF(@KeyName IS NOT NULL)BEGINDECLARE @sql varchar(max)SET @sql = 'ALTER TABLE Test DROP CONSTRAINT ' + @KeyName EXEC (@sql) --要加上()ENDGO。

sqlserver 笔记

sqlserver 笔记

sqlserver 笔记以下是一份关于 SQL Server 的学习笔记:1. SQL Server 简介SQL Server 是 Microsoft 开发的关系数据库管理系统,它使用 Transact-SQL (T-SQL) 作为其查询语言。

SQL Server 可以与 Microsoft Office、.NET 等技术集成,并提供了丰富的管理工具和应用程序编程接口(API)。

2. 安装与配置安装 SQL Server 需要先下载安装程序,并按照向导进行安装。

安装过程中可以选择要安装的组件,以及设置数据库引擎的实例名称和身份验证模式等。

3. 数据库操作使用 SQL Server Management Studio (SSMS) 或其他工具可以创建、删除、备份和还原数据库。

数据库可以存储在本地或远程服务器上。

4. 表格操作在 SQL Server 中,可以使用 CREATE TABLE 语句创建新表,使用 ALTER TABLE 语句修改表结构,使用 DROP TABLE 语句删除表。

5. 数据操作可以使用 INSERT INTO、UPDATE 和 DELETE 语句来插入、更新和删除表中的数据。

使用 SELECT 语句可以检索表中的数据。

6. 查询优化为了提高查询性能,可以使用索引、视图和存储过程来优化查询。

索引可以加快查询速度,视图可以简化复杂的查询,存储过程可以封装重复的 SQL 代码。

7. 安全与权限SQL Server 支持用户账户和角色管理,可以为不同的用户或角色分配不同的权限级别。

例如,可以授予用户对特定数据库的读取、写入或管理权限。

8. 事务管理事务是一系列操作,它们要么全部成功执行,要么全部回滚。

使用 BEGIN TRANSACTION、COMMIT 和 ROLLBACK 语句可以管理事务。

9. 备份与恢复为了防止数据丢失,需要定期备份数据库。

可以使用 SQL Server 的备份和恢复功能来备份和恢复数据库。

SQLServer数据库添加主键,唯一键,外键约束脚本

SQLServer数据库添加主键,唯一键,外键约束脚本

SQLServer数据库添加主键,唯⼀键,外键约束脚本-- 声明使⽤数据库use 数据库;go-- 添加主键(primary key)约束-- 基本语法-- 判断主键约束是否存在,如果存在则删除,不存在则添加if exists(select * from sysobjects where name=主键名)alter table 表明 drop constraint 主键名;goalter table 表明 add constraint 主键名 primary key(列名)use SapDBT;go-- 实际例⼦if exists(select * from sysobjects where name='PK_student_id')alter table [dbo].[Student] drop constraint PK_student_id;goalter table [dbo].[Student] add constraint PK_student_id primary key([ID])-- 添加唯⼀键(UNIQUE)约束-- 基本语法-- 判断唯⼀键约束是否存在,如果存在则删除,不存在则添加if exists(select * from sysobjects where name=约束名)alter table 表明 drop constraint 约束名;goalter table 表明 add constraint 约束名 primary key(列名)-- 实际例⼦if exists(select * from sysobjects where name='UQ_student_name')alter table [dbo].[Student] drop constraint UQ_student_name;goalter table [dbo].[Student] add constraint UQ_student_name unique([Name])-- 添加外键(foreign key)约束-- 基本语法-- 判断外键约束是否存在,如果存在则删除,不存在则添加if exists(select * from sysobjects where name=约束名)alter table 表明 drop constraint 约束名;goalter table 外键表 add constraint 约束名 foreign key(外键列) references 主键表-- 实际例⼦if exists(select * from sysobjects where name='FK_Score_Student')alter table [dbo].[Score] drop constraint FK_Score_Student;go-- [dbo].[Score]中的外键[StudentId]是[dbo].[Student]的主键alter table [dbo].[Score] add constraint FK_Score_Student foreign key([StudentId]) references [dbo].[Student]。

sql中如何创建和删除外键

sql中如何创建和删除外键

SQL Server 2005中如何创建和删除外键最近了解到数据库中创建外键的方法,便记录下来,以防忘记。

在SQL Server 2005中,为了保证数据库的完整性,创建外键是我们经常用到的。

创建外键有两种直接的方法。

一种是通过写代码创建外键,一种是通过新建数据库关系图(不用写代码)创建外键。

在建表前考虑清楚了并在建表的时候就创建外键当然很好,然而,手动建表且没有创建外键,但在后面需要创建外键时怎么办呢?在创建外键之前需建立表,例如:学生——选课表//学生表Create Table Student(Sno CHAR(10) primary key,Sname CHAR(10)not null,Ssex CHAR(2),Sage INT,Sdept Varchar(10))//课程表Create Table Course(Cno CHAR(4)primary key,CName CHAR(20)not null,Cpno CHAR(4),Ccredit INT)//选课表Create TABLE SC(Sno CHAR(10)not null,Cno CHAR(4)not null,Grade INT,Primary key(Sno,Cno),Foreign key (Sno) references Student(Sno),Foreign key (Cno) references Course(Cno))注:当然也可以手动的创建表。

以上代码中已经在定义表是创建外键。

如果创建表时没有创建外键,则:、(1)运用编写代码增加外键alter table SCadd constraint SMPKey(外键名) foreign key(Sno)references student(Sno), add constraint CMPKey(外键名) foreign key(Cno)references Course(Cno) (2)新建数据库关系图增加外键展开所建数据库,找到数据库关系图,右键——>新建数据库关系图,在弹出的对话框(如图1.1)中添加与要增加外键的表以及包含外键的表(如图1.2),单击“添加”,然后关闭该对话框。

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

SQL的主键和外键约束
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 表A add constraint FK_B foreign key (ticket_no) references 表B(ticket_no)
alter table 表A add constraint FK_C foreign key (person_no) references 表C(person_no)
alter table 成绩表add constraint FK_StudentNo foreign key (StudentNo) references Student (StudentNo)
ON UPDATE CASCADE ON DELETE CASCADE
级联更新,级联删除,这样在删除主表Student时,成绩表中该学生的所有成绩都会删除。

--检查约束:
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'。

相关文档
最新文档