2个的意思一楼的已经说了:
FOREIGN
KEY是外键,与其他表关联的时候用的
UNIQUE
是唯一,即此列此值在此表唯一
(不知道二楼是怎么把unique变成union的!!)
举个例子:
表一(学生表):sutdent(sno,sname)
表二(成绩表):cs(cno,sno,grade)
成绩表里的学号列(sno)按理来说必须要是在学生表里存在的,如果没设置外键,就可能会出现成绩表里的学号不在学生表里,但是如果设置了外键,你现在输入一个不在学生表里的学号到成绩表里是插入不进去的,会提示错误;
在说下unique,拿表一来说,如果你在创建表的时候什么都没加以限制,则可能出现2个或者多个学号重复的情况,但你对学号加了unique,则表的sno列是不允许出现重复的学号的,不过这里要说明的一点是要注意和primary
key(主键)的区别---primary
key(主键)是不允许为空的(null),而unique(唯一)可以允许出现一次空值(null)
一、unique不等于普通索引,各种索引的定义如下:二、虽然键和unique都能唯一标识一条记录,但是一个表只能建立一个主键,而unique则能建多个1、普通索引
这是最基本的索引类型,而且它没有唯一性之类的限制。普通索引可以通过以下几种方式创建:
创建索引,例如CREATE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表);
创建表的时候指定索引,例如CREATE TABLE tablename ( [], INDEX [索引的名字] (列的列表) );
2、唯一性索引
这种索引和前面的「普通索引」基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。唯一性索引可以用以下几种方式创建:
创建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
创建表的时候指定索引,例如CREATE TABLE tablename ( [], UNIQUE [索引的名字] (列的列表) );
3、主键
主键是一种唯一性索引,但它必须指定为「PRIMARYKEY」。如果你曾经用过AUTO_INCREMENT类型的列,你可能已经熟悉主键之类的概念了。主键一般在创建表的时候指定,例如「CREATETABLE tablename ( [], PRIMARY KEY (列的列表) );」。但是,我们也可以通过修改表的方式加入主键,例如「ALTER TABLE tablename ADD PRIMARY KEY (列的列表);」。每个表只能有一个主键。
4、全文索引
MySQL从32323版开始支持全文索引和全文检索。在MySQL中,全文索引的索引类型为FULLTEXT。全文索引可以在VARCHAR或者TEXT类型的列上创建。它可以通过CREATE TABLE命令创建,也可以通过ALTER TABLE或CREATEINDEX命令创建。对於大规模的数据集,通过ALTER TABLE(或者CREATEINDEX)命令创建全文索引要比把记录插入带有全文索引的空表更快。本文下面的讨论不再涉及全文索引,要瞭解更多信息,请参见MySQLdocumentation。
约束类型
总的来说有五种:唯一性和主键约束、外键约束、检查约束、空值约束、默认值约束,约束的简介
数据的完整性是指数据的正确性和一致性,可以通过定义表时定义完整性约束,也可以通过规则,索引,触发器等。约束分为两类:行级和表级,处理机制是一样的。行级约束放在列后,表级约束放在表后,多个列共用的约束放在表后。
完整性约束是一种规则,不占用任何数据库空间。完整性约束存在数据字典中,在执行SQL或PL/SQL期间使用。用户可以指明约束是启用的还是禁用的,当约束启用时,他增强了数据的完整性,否则,则反之,但约束始终存在于数据字典中。
有五大关键词,UNIQUE和PrimaryKey,ForeignKey,CHECK,NOTNULL,DEFAULT
举个简单的例子,你就明白了
Create Students(
id varchar(10) not null,
name varchar(20) not null unique,
sex varchar(2) not null check(sex ='男' or sex = '女'),
address varchar(30) null,
primary key (id),
id int foreign key references Course(id)
);
unique是当你定义数据库时候对某个字段限制唯一值(就是这个值不能重复)
primary key定义这个表的主键(比如id,不能重复,不能为空)
foreign key定义这个表的外键(与其他表关联的键,比如Students表的id字段与Course表的id字段相对应)
check是定义这个字段只能输入满足条件的,比如sex字段,只能输入男和女)
例:
00001 name1 男 address1(可以输入)
00001 name3 男 address2(不可以输入,id主键不能重复)
00002 name1 男 address3(不可以输入,name字段必须唯一)
00004 name4 她 address4(不可以输入,sex字段必须是男或女)
00005 name5 女 address5(可以输入)
明白?
作用为:唯一约束保证在一个字段或者一组字段里的数据与表中其它行的数据相比是唯一的。
创建唯一约束可确保在不参与主键的特定列中不输入重复值。当唯一约束和主键都强制唯一性时,如果满足下列条件,则应将唯一约束而不是主键约束附加到表上:
1、希望在列或列的组合中强制唯一性。可将多个唯一约束附加到表,但是只能将一个主键约束附加到表。
2、希望在允许空值的列中强制唯一性。可将唯一约束附加到允许空值的列,但是只能将主键约束附加到不允许空值的列。当将唯一约束附加到允许空值的列时,请确保在约束的列中最多有一行包含空值。
扩展资料:
SQL中其他约束有:
1、主键约束:
主键列的数据类型不限,但此列必须是唯一并且非空。如该表中已有主键为1000的行,则不能再添加主键为1000。人工或程序不好控制的时候,也可以设置主键列为自动增长列。
2、参考约束:
参考约束是一个规则,可由SQL和XQuery编译器使用,但数据库管理器不会强制执行它。
查询编译器包括一个重写查询阶段,它将SQL和XQuery语句变换为可能是优化的格式并改进所需数据的访问路径。该约束的目的不是由数据库管理器对数据执行附加验证,而是为了提高查询性能。
3、用户自定义完整性约束:
用户自定义完整性指针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。
例如某个属性必须取唯一值,某个非主属性也不能取空值,某个属性的取值范围在0-100之间等。
以上就是关于SQL里FOREIGN KEY和UNIQUE什么时候用全部的内容,包括:SQL里FOREIGN KEY和UNIQUE什么时候用、UNIQUE等于普通索引吗、数据库中约束的类型有几种等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)