数据库外键关系
1. 数据库外键怎么设置
sql 数据库建表时怎么设置外键,
1> -- 创建测试主表. ID 是主键.
2> CREATE TABLE test_main (
3> id INT,
4> value VARCHAR(10),
5> PRIMARY KEY(id)
6> );
7> go
-- 建表时设置外键
1> CREATE TABLE test_sub (
2> id INT,
3> main_id INT,
4> value VARCHAR(10),
5> PRIMARY KEY(id),
6> FOREIGN KEY (main_id) REFERENCES test_main
7> );
8> go
sql怎么设置外键
可以在创建表的时候创建,也可以在创建表之后创建。
创建表时创建:
create table student
(id int primary key,
name char(4),
dept char(9)
sex char(4))
create table grade
(id int ,
grade int
constraint id_fk foreign key (id) references student (id)
)
或创建了两表之后再建
alter table grade
add constraint id_fk foreign key (id) references student (id)
呵呵,希望能帮助你。
sql server中图形界面如何设置外键
在那个属性上右键 有约束 自己添加就OK了
mysql怎么设置外键?
ALTER TABLE b ADD CONSTRAINT c FOREIGN KEY(c) REFERENCES a(c) ON DELETE CASCADE ON UPDATE CASCADE; 哎呀。。好像写反了。我写的是把表B的c设置为外键了。。你改一下吧。
如何在数据库的建立表的时候设置表的外键
1> -- 创建测试主表. ID 是主键.
2> CREATE TABLE test_main (
3> id INT,
4> value VARCHAR(10),
5> PRIMARY KEY(id)
6> );
7> go
-- 建表时设置外键
1> CREATE TABLE test_sub (
2> id INT,
3> main_id INT,
4> value VARCHAR(10),
5> PRIMARY KEY(id),
6> FOREIGN KEY (main_id) REFERENCES test_main
7> );
8> go
sql server 2008 怎么设置外键
建外键的前提是此外键必须是另外一个表的主键。建外键的步骤: 第一步打开要建外键表的设计器,右击选择“关系”。然后弹出“外键关系”窗体,我们选择“添加”,然后点击“表和列规范”后面的小按钮,就会弹出另外一个窗体让我们选择主键表和列,选好之后点击确定。然后我们INSERT和UPDATE规范,在更新规则和删除规则有四个选项,分别是“不执行任何操作”、“级联”、“设置为NULL”、“设置默认值”。默认的不执行任何操作。如果是“不执行任何操作”,当我们删除或更新主键表的数据时,会告诉用户不能执行删除或更新该操作。“级联”的意思是当我们删除或更新主键表的数据时,会删除或更新外键表中所涉及的相关数据的所有行。 “设置Null”的意思是当我们删除或更新主键表的数据时,外键表中的外键列的值会设为Null,但前提是该列允许为空。 “设置默认值”的意思是如果我们将外键列定义了默认值,当我们删除或更新主键表的数据时,外键表中的外键列的值设为定义的默认值。 当然我们可以用代码创建,当我们在创建数据库表T——Card时只要加上一句话就OK啦,“Foreign key (studentNo) references T_Student(studentNo)"。如果我们已经创建了改表,那如何用代码实现了,这也很简单也就一句话“ add constraint CMPKey(外键名) foreign key(studentNo) references T_Student(studentNo)”。
sql中怎样创建外键约束
在创建表之后,添加外键约束:
alter table yuangong add constraint fk foreign key (部门罚) references bumen(部门号)
或者在创建表的时候添加外键
foreign key (部门号) references bumen(部门号)放在最后,用","与列分隔
数据库中,一对多的时候外键设置在多的那张表吗?如果一对一的时候,外键应该设置在哪里?多对多的时候,
首先,外键引用的那个列在主表中必须是主键列或者唯一列。
所以1:n的肯定把外键建立在n的那张表上。
1:1,一般要看谁是主表,谁是附属表,外键当然建立在附属表中。
n:m的情况,需要建立一个关系表,两个原表和其关系分别是1:n,1
:m
数据库语句怎么加外键
1,创建表的时候添加:foreign key (你的外键) references (表名)(字段名);
2,创建好之后修改:
alter table dbo.mh_User
add constraint FK_mh_User_..._id foreign key (你的外键) references (表名)(字段名);
Sql server怎样创建主外键关系
在要设置关系的外键表中,右击关系→添加→在表和列规范中选择关联的主表再选择外键表与其关联的字段
2. 数据库中的外键是什么意思
外键(FK)是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。
当创建或更改表时可通过定义FOREIGNKEY约束来创建外键。
例如,数据库pubs中的titles表与publishers表有链接,因为在书名和出版商之间存在逻辑联系。
titles表中的pub_id列与publishers表中的主键列相对应。titles表中的pub_id列是到publishers表的外键。
(2)数据库外键关系扩展阅读:
保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值或使用空值。
学号在成绩表(表2)中是主键,在学生表(表1)中是外键。如果不使用外键,表1的学号字段插了一个值(比如20140999999),但是这个值在表2中并没有,这个时候,数据库允许插入,并不会对插入的数据做关系检查。
然而在设置外键的情况下,插入表1学号字段的值必须要求在表1的学号字段能找到。 同时,如果要删除表2的某个学号字段,必须保证表2中没有引用该字段值的列,否则就没法删除。
这就是所谓的保持数据的一致性和完整性。如右图,如果表1还引用表2的某个学号,却把表1中的这个学号删了,表2就不知道这个学号对应的学生是哪个学生。
3. 数据库之主键外键
1,主键约束 (table的唯一标识)
能够作为主键列的特点:该列不能为空,不能有重复值出现
创建表时指定主键的两种方式:
CREATE TABLE stu(
sid CHAR(6) PRIMATY KEY,
sname VARCHAR(20),
age INT,
gender VARCHER(10)
);
指定sid列为主键列
CREATE TABLE stu(
sid CHAR(6),
sname VARCHAR(20),
age INT,
gender VARCHER(10),
PRIMARY KEY(sid)
);
指定sid列为主键列
修改表时指定主键:ALTER TABLE stu ADD PRIMATY KEY(sid);
删除主键:ALTER TABLE stu DROP PRIMARY KEY;
2,主键自增长
因为主键列的特性是:必须唯一,不能为空,所以我们通常会指定主键为整形,然后设置其自动增长
创建表时指定主键自增长:
CREATE TABLE stu(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20),
age INT,
gender VARCHAR(10)
);
修改表时设置主键自增长:ALTER TABLE stu
3,非空约束
CREATE TABLE stu(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) NOT NULL,
age INT,
gender VARCHAR(10)
);
对sname列设置了非空约束
4,唯一约束
某些列不能设置重复的值,所以可以对列添加唯一约束
CREATE TABLE stu(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) NOT NULL UNIQUE,
age INT,
gender VARCHAR(10)
);
6,外键约束
外键特点:外键必须是另一个表的主键的值(外键要引用主键!),外键可以重复,外键可以为空,一张表可以有多个外键!
CREATE TABLE dept( //部门表
deptno INT PRIMARY KEY AUTO_INCREMENT,
deptname CHAR(20)
);
INSERT INTO dept VALUES(10,‘研发部’);
INSERT INTO dept VALUES(20,‘人力部’);
INSERT INTO dept VALUES(30,‘财务部’);
CREATE TABLE emp( //员工表
empno INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(50),
dno INT, //员工所属部门(外键),
CONSTRAINT fk_emp_dept FOREIGN KEY(dno) REFERENCES dept(deptno)
);
INSERT INTO emp(empno,ename) VALUES(NULL,‘张三’),//外键可以不传入值
INSERT INTO emp(empno,ename) VALUES(NULL,‘李四’,10),//外键可以重复
INSERT INTO emp(empno,ename) VALUES(NULL,‘王五’,10),
INSERT INTO emp(empno,ename) VALUES(NULL,‘赵六’,80),//dept表没有主键值为80的记录,sql客户端编译报错
7,一对一关系模型
创建老公表
CREATE TABLE hashand(
hid INT PRIMARY KEY AUTO_INCREMENT,
hname VARCHAR(50),
);
INSERT INTO hashand VALUES(NULL,‘刘备’);
INSERT INTO hashand VALUES(NULL,‘关羽’);
INSERT INTO hashand VALUES(NULL,‘张飞’);
SELECT * FROM hashand
//创建老婆表
CREATE TABLE wife(
wid INT PRIMARY KEY AUTO_INCREMENT,
wname VARCHAR(50),
CONSTRAINT fk_wife_hashand FOREIGN KEY(wid) REFERENCES hashand(hid)
)
/**
wid:
1,非空
2,唯一
3,引用hid
*/
INSERT INTO wife VALUES(1,‘杨贵妃’);
INSERT INTO wife VALUES(2,‘妲己’);
INSERT INTO wife VALUES(3,‘褒姒’);
SELECT * FROM wife;
对于一对一关系模型从表的主键即是外键,例如老公和老婆的关系模型,一个老公只能有一个老婆,一个老婆只能有一个老公
对于一对多关系模型主表的主键即是从表的外键,例如订单和用户的关系模型,一个用户可以下单多次,对应多个订单,而一个订单只能属于一个用户
对于多对多关系模型没有主表和从表之分,需要建立第三张表来记录这两张表的外键,建立两个外键,分别引用这两张表的主键
8,多对多关系模型
在表中简历多对多关系需要使用中间表,即需要三张表,在中间表中使用两个外键,分别引用其他两个表的主键,例如学生和老师的关系模型,一个老师可以有多个学生,一个学生可以有多个老师
CREATE TABLE student(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname CHAR(40)
);
CREATE TABLE teacher(
tid INT PRIMARY KEY AUTO_INCREMENT,
tname CHAR(40)
);
CREATE TABLE stu_tea(
sid INT,
tid INT,
ADD CONSTRAINT fk_stu_tea_sid FOREIGN KEY(sid) REFERENCES student(sid),
ADD CONSTRAINT fk_stu_tea_tid FOREIGN KEY(tid) REFERENCES teacher(tid)
);
INSERT INTO student VALUES(NULL,‘刘德华’);
INSERT INTO student VALUES(NULL,‘梁朝伟’);
INSERT INTO student VALUES(NULL,‘黄日华’);
INSERT INTO student VALUES(NULL,‘苗侨伟’);
INSERT INTO student VALUES(NULL,‘汤镇业’);
INSERT INTO teacher VALUES(NULL,‘崔老师’);
INSERT INTO teacher VALUES(NULL,‘刘老师’);
INSERT INTO teacher VALUES(NULL,‘石老师’);
SELECT * FROM student;
SELECT * FROM teacher;
INSERT INTO stu_tea VALUES(1,1); //刘德华是崔老师的学生
INSERT INTO stu_tea VALUES(2,1); //梁朝伟是崔老师的学生
INSERT INTO stu_tea VALUES(3,1);//黄日华是崔老师的学生
INSERT INTO stu_tea VALUES(4,1);//苗侨伟是崔老师的学生
INSERT INTO stu_tea VALUES(5,1);//汤镇业是崔老师的学生
INSERT INTO stu_tea VALUES(2,2);//梁朝伟是刘老师的学生
INSERT INTO stu_tea VALUES(3,2);//黄日华是刘老师的学生
INSERT INTO stu_tea VALUES(4,2);//苗侨伟是刘老师的学生
INSERT INTO stu_tea VALUES(3,3);//黄日华是石老师的学生
INSERT INTO stu_tea VALUES(5,3);//汤镇业是刘老师的学生
SELECT * FROM stu_tea;
这时在stu_tea这个中间表中的每条记录都是来说明student表和teacher表的关系的
例如在stu_tea表中的记录:sid为1001,tid为2001,这说明编号为1001的学生有一个编号为2001的老师
sid tid
1001 2001 //编号为1001的学生有一个编号为2001的老师
1001 2002 //编号为1001的学生有一个编号为2002的老师
1001 2003 //编号为1001的学生有一个编号为2003的老师
1002 2001 //编号为2001的老师有一个编号为1002的学生
1002 2004 //编号为2004的老师有一个编号为1002的学生
9,合并结果集
要求要合并的结果集中,列的类型和列数相同
UNION,去除重复行,UNION ALL,不去除重复行
4. 什么是关系型数据库,主键,外键,索引分别是什么
1、关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。
2、主关键字(primary key)是表中的一个或多个字段,它的值用于唯一的标识表中的某一条记录
3、外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字
4、在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单