‘壹’ 数据库里面的主键和外键及候选键是什么意思啊
1、主键(primary key)吧:一张表(关系)的一个列(属性)或多个列可以作为主键,但是前提是让这个列作主键,这个列就能保证该列下的各个行(元组)的值不能相同,比如说用姓名属性作主键的话,那么这个主键就不一定可以,如果有两个人是同样的名字的话,就不能做到该属性下的各个元组数据的值不同,如果用阿拉伯数字作主键就是一个很好的选择。
2、外键(foreign key):一张表(关系)的列(属性)它同时存在表1和表2中,它不是表1的主键,而是表2的主键,就可以说他是表1的外键。
3、候选键(Candidate Key):能唯一标识表(关系)中行(元组)的列(属性),则称该属性为候选键,也称 候选关键字 或 候选码;由此来看候选键可以不只一个,还看一看得出的就是主键同时它也是候选键。
‘贰’ 数据库之主键外键
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,不去除重复行
‘叁’ 在Linux环境下,oracle数据库中查询表主键、外键及索引的命令是什么
要通过查询ORACLE的数据字典才能知道。
1、查主键名称:
select * from user_constraints
where table_name = 'ART'
and constraint_type ='P';
查主键对应的列:
select * from user_cons_columns
where table_name = 'ART'
and constraint_name = 'PK_ART';
2、查索引名称:
select * from user_indexes
where table_name = 'ART';
查索引对应的列:
select * from user_ind_columns
where table_name = 'ART'
and index_name = 'INDX_BA';
‘肆’ 数据库中什么是主键,什么是外键
主键(Primary key): 也称为主码或主关键字,用于惟一地确定一个元组的属性或属性组(复合主码)。每个关系都有一个并且只有一个主码。
外键(Foreign Key):也称为外码或外部关键字。如果一个属性集不是所在关系的关键字,但是是其他关系的关键字,则该属性集称为外部关键字。
在关系数据库中可以通过外键使两个关系关联,这种联系通常是一对多(1:n)的,其中主(父)关系(1方)称为被参照关系,从(子)关系(n方)称为参照关系。
(4)数据库主键外键命令扩展阅读:
数据库主键作用:
1、保证实体的完整性
2、加快数据库的操作速度
3、在表中添加新记录时,DBMS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。
4、DBMS自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。
在有些数据库中,虽然主键不是必需的,但最好为每个表都设置一个主键,不管是单主键还是复合主键。它存在代表着表结构的完整性,表的记录必须得有唯一区分的字段,主键主要是用于其他表的外键关联,以及本记录的修改与删除。
‘伍’ 在MySQL中如何设置主键和外键
工具/原料
电脑 MySQL
方法/步骤
设置主键:
1、通过终端进入到mysql命令行工具。
‘陆’ 什么是主键与外键
1、主关键字(主键,primary key)是被挑选出来,作表的行的惟一标识的候选关键字。一个表只有一个主关键字。主关键字又可以称为主键。 主键可以由一个字段,也可以由多个字段组成,分别成为单字段主键或多字段主键。
2、外键:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。
(6)数据库主键外键命令扩展阅读:
主关键字的作用
1、保证实体的完整性;
2、加快数据库的操作速度;
3、在表中添加新记录时,ACCESS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复;
4、ACCESS自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。
‘柒’ Sql server怎样创建主外键关系
Sqlserver怎样创建主外键关系的方法。
如下参考:
1.为了帮助你理解,用一个例子来帮助你理解。它基本上是指通过引用表2中的字段来约束表1中的字段。
‘捌’ sql用命令创建主键与外键。
创建SQL的主键和外键约束的方法:
--在创建表时就可以对字段加上约束:
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_字段这样的约束名
--注意:如果约束是在创建表的时候创建的,则不能用命令删除
--只能在'企业管理器'里面删除
参考资料 : http://www.studyofnet.com/news/92.html
希望以上的回答能够帮到你
‘玖’ 在MySQL中如何设置主键和外键
1.外键的作用,主要有两个:
一个是让数据库自己通过外键来保证数据的完整性和一致性
一个就是能够增加ER图的可读性
2.外键的配置
1)先创建一个主表,代码如下:
#创建表student,并添加各种约束
create table student
(
id int primary key , #主键约束
name varchar(20) , #唯一约束
age int NOT NULL, #非空约束
sex varchar(2) ,
address varchar(20) default '重庆' #默认约束
) ;
再通过一个外键,创建一个分数表,这样的话,就可以方便查询。代码如下:
#创建分数表
create table score
(
id int primary key ,
sid int ,
china int ,
history int,
english int,
constraint FK_sid foreign key(sid) references student(id) #通过外键创建链接
) ;
创建外键的方法有很多,其中最常见创建外键的格式是:constraint FK_*** foreign key(**) references 链接的外表
删除外键:
alter table drop foreign key '外键名'.
注意:
只有在定义外键时,用constraint 外键名 foreign key .... 方便进行外键的删除
主键是唯一标示这一行的,就好像你的身份证号一样,每个人只有一个,也是唯一能证明你是你的东西。外键是别人执行你的东西。也就是说如果一个人想和你有点关系怎么办,那就要关联起来,怎么关联起来,就通过外键啊
定义主键和外键主要是为了维护关系数据库的完整性,总结一下:
一、主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
‘拾’ 数据库主键和外键怎么写
举例:设置主键
create table 学生表
(学号, char(12) primary key not null,
姓名, char(8) not null,
班级编号, char(10) foreign key references 班级表(班级编号)
)
第一列学号设为主键,第三列班级编号为外键,参考班级表中的班级编号列。