这里我觉得我对键这个概念,了解的很模糊,但是它又是一个非常重要的东西。
我目前对键的了解大概只有主键和外键了。 所以我觉得很有必要回去学一下键。
在此之前我去看了我当时的学习笔记,发现自己对MySQL的笔记少之又少。回想了一下当时,我也就学到了第一范式,对第二范式和第三范式似乎已经没什么印象了。
那还是从零开始吧。
主键约束
它能够唯一确定一张表中的一条记录,也就是我们通过给某个字段添加约束,就可以使得改字段不重复且不为空。即唯一约束。
主键的设计原则:
1.主键应当是对用户没有意义的,比如说用户登陆一个系统的时候的登录id。
2.唯一性。
3.非空性:主键的值是不可重复的,也不可以为空。
4.也不要更新主键。实际上,因为主键除了惟一地标识一行之外,再没有其他的用途了,所以也就没有理由去对它更新
create table user(id int primary key,name varchar(20));
联合主键
1、数据库的每张表只能有一个主键,不可能有多个主键。
2、所谓的一张表多个主键,我们称之为联合主键。
注:联合主键:就是用多个字段一起作为一张表的主键。
3、主键的主键的作用是保证数据的唯一性和完整性,同时通过主键检索表能够增加检索速度。
4、联合主键的任何一个字段都不能为空。
主键和联合主键的区别
主键的一个目的就是确定数据的唯一性,它跟唯一约束的区别就是,唯一约束可以有一个NULL值,但是主键不能有NULL值。
再说联合主键,联合主键就是说,当一个字段可能存在重复值,无法确定这条数据的唯一性时,再加上一个字段,两个字段联合起来确定这条数据的唯一性。
比如你提到的id和name为联合主键,在插入数据时,当id相同,name不同,或者id不同,name相同时数据是允许被插入的,但是当id和name都相同时,数据是不允许被插入的。
外键约束
外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。
定义外键时,需要遵守下列规则:
- 主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。
- 必须为主表定义主键。
- 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
- 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。
- 外键中列的数目必须和主表的主键中列的数目相同。
- 外键中列的数据类型必须和主表主键中对应列的数据类型相同。
//班级create table classes(id int primary key,name varchar(20)) ;//学生表create table students(id int primary key,name varchar(20),class_id int,foreign key (class_id) references classes(id) //按字面理解,就是,前一个字段参考后一个字段) ;
自增约束
特点:(1)一个表只能有一个自增约束。因为一个表只有一个维护自增值的变量。
(2)自增约束的列只能是整数列
(3)自增约束的列必须是键列(主键,唯一键,外键),
实际中一般是主键自增最多
如何在建表时指定某个列自增
create table 【数据库名.】表名称(字段名1 xxInt primary key auto_increment,字段名2 数据类型 【unique key】【not null】 default 默认值,字段名3 数据类型 default 默认值,); //创建数据库create table t_stu(sid int primary key auto_increment, //就是这一行的autosname varchar(20));//创建表
唯一约束和非空约束
唯一约束
唯一约束和主键很像,他们在某种程度上可以达到相同的效果,但是他们依旧有本质上的区别。上面讲到,主键里有一个叫做联合主键的东西,在唯一约束里也有一个类似的,姑且当做联合约束吧。
区别
每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。 且当一个属性声明为主键时,它将不接受NULL值。另一方面,当声明为Unique的属性时,它可以接受一个NULL值。
一定要注意一个点,主键不等于索引,二者有本质上的区别。
语句
关于在表里添加约束,删除约束的具体语句不做多余的讲解,建议百度。
-—总结:
1、建表的时候就添加约束。
2、可以使用alter、add、alter 、modif 等添加约束。
4、删除a可以用lter 、drop
非空约束
即约束的字段不能为空。
默认约束
默认约束-―就是当我们插入字段值的时候,如果没有传值,就会使用默认值
mysql> create table user10(->id int,->name varchar(20),->age int default 10 //默认值为10);
就这些吧,大概没什么问题。
