这里我觉得我对键这个概念,了解的很模糊,但是它又是一个非常重要的东西。
我目前对键的了解大概只有主键和外键了。 所以我觉得很有必要回去学一下键。

在此之前我去看了我当时的学习笔记,发现自己对MySQL的笔记少之又少。回想了一下当时,我也就学到了第一范式,对第二范式和第三范式似乎已经没什么印象了。
那还是从零开始吧。

主键约束

它能够唯一确定一张表中的一条记录,也就是我们通过给某个字段添加约束,就可以使得改字段不重复且不为空。即唯一约束。

主键的设计原则:

1.主键应当是对用户没有意义的,比如说用户登陆一个系统的时候的登录id。
2.唯一性。
3.非空性:主键的值是不可重复的,也不可以为空。
4.也不要更新主键。实际上,因为主键除了惟一地标识一行之外,再没有其他的用途了,所以也就没有理由去对它更新

  1. create table user(
  2. id int primary key,
  3. name varchar(20)
  4. );

联合主键

1、数据库的每张表只能有一个主键,不可能有多个主键。
2、所谓的一张表多个主键,我们称之为联合主键。
注:联合主键:就是用多个字段一起作为一张表的主键。
3、主键的主键的作用是保证数据的唯一性和完整性,同时通过主键检索表能够增加检索速度。
4、联合主键的任何一个字段都不能为空。

主键和联合主键的区别

主键的一个目的就是确定数据的唯一性,它跟唯一约束的区别就是,唯一约束可以有一个NULL值,但是主键不能有NULL值。
再说联合主键,联合主键就是说,当一个字段可能存在重复值,无法确定这条数据的唯一性时,再加上一个字段,两个字段联合起来确定这条数据的唯一性。
比如你提到的id和name为联合主键,在插入数据时,当id相同,name不同,或者id不同,name相同时数据是允许被插入的,但是当id和name都相同时,数据是不允许被插入的。


外键约束

外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。

定义外键时,需要遵守下列规则:

  • 主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。
  • 必须为主表定义主键。
  • 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
  • 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。
  • 外键中列的数目必须和主表的主键中列的数目相同。
  • 外键中列的数据类型必须和主表主键中对应列的数据类型相同。
    1. //班级
    2. create table classes(
    3. id int primary key,
    4. name varchar(20)
    5. ) ;
    6. //学生表
    7. create table students(
    8. id int primary key,
    9. name varchar(20),
    10. class_id int,
    11. foreign key (class_id) references classes(id) //按字面理解,就是,前一个字段参考后一个字段
    12. ) ;

自增约束

特点:(1)一个表只能有一个自增约束。因为一个表只有一个维护自增值的变量。
(2)自增约束的列只能是整数列
(3)自增约束的列必须是键列(主键,唯一键,外键),
实际中一般是主键自增最多

如何在建表时指定某个列自增

  1. create table 【数据库名.】表名称(
  2. 字段名1 xxInt primary key auto_increment,
  3. 字段名2 数据类型 unique key】【not null default 默认值,
  4. 字段名3 数据类型 default 默认值,
  5. ); //创建数据库
  6. create table t_stu(
  7. sid int primary key auto_increment, //就是这一行的auto
  8. sname varchar(20)
  9. );//创建表

唯一约束和非空约束

唯一约束

唯一约束和主键很像,他们在某种程度上可以达到相同的效果,但是他们依旧有本质上的区别。上面讲到,主键里有一个叫做联合主键的东西,在唯一约束里也有一个类似的,姑且当做联合约束吧。
区别
每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。 且当一个属性声明为主键时,它将不接受NULL值。另一方面,当声明为Unique的属性时,它可以接受一个NULL值。
一定要注意一个点,主键不等于索引,二者有本质上的区别。
语句
关于在表里添加约束,删除约束的具体语句不做多余的讲解,建议百度。
-—总结:
1、建表的时候就添加约束。
2、可以使用alter、add、alter 、modif 等添加约束。
4、删除a可以用lter 、drop

非空约束

即约束的字段不能为空。


默认约束

默认约束-―就是当我们插入字段值的时候,如果没有传值,就会使用默认值

  1. mysql> create table user10(
  2. ->id int,
  3. ->name varchar(20),
  4. ->age int default 10 //默认值为10
  5. );

就这些吧,大概没什么问题。