sql的主键和外键怎么设?
创建数据库时就是有主键的创建了主键,但是表之间的关系没有联系,要建数据库关系图只有主键没有外键时不行的。
建外键的前提是此外键必须是另外一个表的主键。建外键的步骤:
第一步、打开要建外键表的设计器,右击选择“关系”。
第二步、然后弹出“外键关系”窗体,我们选择“添加”,然后点击“表和列规范”后面的小按钮。
第三步、弹出另外一个窗体让我们选择主键表和列,记住要选择相同的,选好之后点击确定。
第四步、展开INSERT和UPDATE规范,在更新规则和删除规则有四个选项,分别是“不执行任何操作”、“级联”、“设置为NULL”、“设置默认值”。
默认的不执行任何操作。如果是“不执行任何操作”,当我们删除或更新主键表的数据时,会告诉用户不能执行删除或更新该操作。
“级联”的意思是当我们删除或更新主键表的数据时,会删除或更新外键表中所涉及的相关数据的所有行。
“设置Null”的意思是当我们删除或更新主键表的数据时,外键表中的外键列的值会设为Null,但前提是该列允许为空。
“设置默认值”的意思是如果我们将外键列定义了默认值,当我们删除或更新主键表的数据时,外键表中的外键列的值设为定义的默认值。
当然也可以用代码创建,在创建数据库表T——Card时只要加上一句代码就可以了。“Foreign key (studentNo) references T_Student(studentNo)"。如果已经创建了改表,那如何用代码实现了,这也很简单也就一句代码“ add constraint CMPKey(外键名) foreign key(studentNo) references T_Student(studentNo)”。
1、为了方便大家理解,使用一个例子来帮助大家理解。意思大概就是通过引用表二中的字段完成对表一字段的约束。方法:
2、这里一共两个表,先创建外键表,因为先有外键,主键才能引用。首先创建数据库,新建查询。
3、新建外键表【teacher】,输入命令:create table teacher。添加需要的字段teacher_xingming并设置它为【主键】。输入命令:teacher_xingming nchar(10) primary key,
4、选中需要执行的命令行,单击【执行】,下方会有是否成功的提示。现在对表进行刷新操作后,会发现已经成功创建了一个新表【teacher】。
5、接下来就要创建学生表了,create table student(student_xingming nchar(10) primary key not null,——该程序段意思为创建一个【student】表,表中新建一个主键【student_xingming字段,类型为nchar(10) ,并不允许为空。】
6、继续写,输入:student_banji nchar(10) not null,——表中新建一个【student_banji字段,类型为nchar(10) ,并不允许为空。】
7、创建外键,输入命令student_jiaoshi nchar(10) foreign key references teacher(teacher_xingming)看起来很长,实际意思很简单:表中新建一个【student_jiaoshi字段】,它是外键,nchar(10)类型,它来至 teacher_xingming中的内容。
8、选中,点击【执行】,没有错误,就说明成功了。刷新一下表,看看是不是多了一个表【student】?所有约束已经创建好了。
9、来试一下看看是否真正实现所说的功能。打开【teacher表】,填写“刘老师”。打开【student表】,前面任意填,最后填写“刘老师”,没有错误说明没问题。
10、如何想测试约束是否真的有效,填写其他内容,看看是否成功,只要不是【teacher】字段中的内容,他就会报错。
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
主键和外键约束的方法:
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.name,systypes.name,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,
sysobjects.name constraintName, sysobjects.xtype AS constraintType,
syscolumns.name 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'
把B表的主键里的纪录放在A表里,这些纪录就是外键.
Foreign
Key,只要在搜索引擎搜索这类的信息,你们就可以了解这方面的讯息了.
哪个数据库?数据库分好多种
SQL Server数据库外键一般在什么地方用?为什么大型网站的SQL Server数...
主键和外键是在说明数据表之间的关系的时候,为了能够明确指出两个表中对应栏位的关系时需要的两个名词。也就是说,供实体关系角度来讲,具有一对多的关系,那么就存在一对主键外键。你所看到的设置好的主键和外键,一般是为了约束,理论上具有一对多关系的表应该建立约束关系,但是大部分人都是不建关系的...
写出创建如下三张数据表的SQL语句
在SSMS中,用【创建表】来设计,包括约束;然后保存,选中该新表,右键【编写表脚本】,SQL就有了项目”表结构:项目号:普通编码定长字符类型,长度为10,主键。项目写出创建如下三张表的sQL语句。按照要求用SQL语句创建表格:选课表:表名——SC属性:Sno字符型,最大7个字符表示学生学号。Cno字符型,最...
SQL 试题 求高手给正确答案!
C、有很多重复值的列适合建索引。 D、 是外键或主键的列不适合建索引。
hive建立数据仓库 事实表的外键和维度表主键怎么关联 什么命令
其实hive里面虽然从mysql导入的时候要求mysql的数据有主键,但是在hive里面主键的概念明显是模糊了的甚至说是去掉的,更没有想传统数据仓库的时候,事实表和维表的键可以连在一起的情况一般都是直接在hive-ql的时候用jion的,即在条件判断的时候加上a.id=b.id ...
如何使用excel快速录入学生成绩
通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。例如:成绩表中的学号不能做成绩表的主键(因为一个学生可以有多行成绩数据),但每行的学号和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键 。在Excel中检查并删除重复数据的三个方法...
VB或 VFP 做的 图书管理系统的毕业论文
⊃2; 主键的个数越少越好。键是表间连接的工具,主键越少,表间的连接就越简单。⊃2; 字段的个数越少越好。⊃2; 所有基本表的设计均应尽量符合第三范式。数据库的设计中,如何处理多对多的关系和如何设计主键,是两个有着较大难度、需要重点考虑的问题。下面我们着重从SQL应用、数据库设计范式和查询优化等...
写出创建如下三张数据表的SQL语句。
表结构:项目号:普通编码定长字符类型,长度为10,主键。项目写出创建如下三张表的sQL语句。按照要求用SQL语句创建表格:选课表:表名——SC属性:Sno字符型,最大7个字符表示学生学号。Cno字符型,最大4个字符表示课程号。Grade整型表示成绩。约束:主码——Sno,Cno;Sno,Cno均为外码)...
如何使用excel快速录入学生成绩
在全部类别下找到vlookup函数,点击确定。4、选择请输入学号框,此处为D3;数据表-选择sheet2中所有数据;列序数-选择“考试名称”对应的sheet2中的列数,此处应为第2列;匹配条件-0表示精确查找,1-表示模糊查找,此处选择精确查找,则输入0。5、完成其余项目的函数输入,完成后如图所示。
姬景兰释: sql ce表中建立外键约束的语法:CREATE TABLE DetectTable(UserID integer,StartTime datetime not null,EndTime datetime not null,MassName nvarchar(10), foreign key (UserID) references UserTable(UserID)),其中,UserID为UserTable表中的主键.也可以在创建数据库关系图直接拖 在数据库关系图上右键-->新建关系图-->添加表 然后直接用鼠标拖字段连接就可以建立外键约束了
明山区15012545089: sql server 中怎样创建主键和外键 - ?
姬景兰释: 直接在表上name后面点 primary key 就出现小钥匙 那个就是主键了 外键也在表里改就行 具体什么位置不记得了 有个foreign key 然后可以选择外键
明山区15012545089: 在sql server2000中如何设置主键 和外键? - ?
姬景兰释: 1)主键 CREATE TABLE WL_Table_04 ( ID int PRIMARY KEY, Name char(8), Sex char(2) NOT NULL )2)外键 CREATE TABLE WL_Table_05 ( ID int REFERENCES WL_Table_04(ID), CourseID char(20), Grade int, CONSTRAINT ID_Course PRIMARY KEY(ID,CourseID) ) 上面两种都是在建表中完成的.
明山区15012545089: 无敌新手啊~SQL怎么设置主外键? - ?
姬景兰释: create table tab_stu ( sno int not null, sname varchar(20) not null, sex varchar(3) not null, sage int not null, constraint pk_sno Primary key (sno) --设置sno为主键 ) create table tab_score ( sno int not null, kno varchar(6) not null, score int not null, ...
明山区15012545089: 在SQL企业管理中,如何设置主键和外键,请求帮助,速度啦!!! - ?
姬景兰释: 在表上鼠标操作就可以,外键是表连接,然后设置左联还是右连,完全鼠标操作 最好看看书,图文并茂
明山区15012545089: sql用命令创建主键与外键. - ?
姬景兰释: --用命令创建主键与外键. --使用SQL语句创建主键约束可以在创建表(Create Table)或修改表(Alter Table)时进行 创建. --例创建表时 create table tablename ( id int (CONSTRAINT pk_id) PRIMARY KEY ) --例修改表时 ALTER TABLE ...
明山区15012545089: 如何在SQL server中设的外键, - ?
姬景兰释: 在SQL中设置主/外键很容易.楼上的做法并不可取. 只要在目标表上点击右键,选择"设计表". 并在"设计表"页面的工具栏上点击"管理关系..." 在里面你就可以看到主/外建,及各约束设置. 保存即可.
明山区15012545089: SQL 语句来创建表主键外键 - ?
姬景兰释: create table 班级简况 (班级代号 Char(5) primary key, 班级名称 Varchar(12) foreign key)
明山区15012545089: sql2000,主键和外键设置 - ?
姬景兰释: 添加外键,在T3,里面有id1,id2设置为主键,然后设置外键, id1与T1中id1,外键关联,其中选择级联删除,on delete cascade id2与T2中id2,外键关联,其中选择级联删除,on delete cascade 刚才在SQL2000中试了一下,可以实现
明山区15012545089: sql 设置主外键关系语句 - ?
姬景兰释: --表tb_user create table tb_user ( id int not null, username varchar(32) not null ); --给tb_user添加主键 alter table tb_user add constraint pk_users primary key (id);--表tb_course create table tb_course ( id int not null primary key, name varchar(20) ...