mysql 约束基本概念 主键约束 外键约束

constraint   约束数据(对表中数据的限制条件)

四种条件约束:非空  唯一性  主键约束 外键约束

  • 非空约束(not null)约束的字段不能为空值,必须赋具体的数据    

CREATE TABLE t_user (
    id INT (4),
    NAME VARCHAR(32) NOT NULL,
    class BIGINT(1000)
);

这里的ID不可以是空值

  • 唯一性约束(unique)约束的字段具有唯一性,不可重复
  1. 列级约束

 CREATE TABLE t_user (
    id INT (4)unique,
    NAME VARCHAR(32) ,
    class BIGINT(1000) 
);

  1. 表级约束(多个字段联合进行约束)

 CREATE TABLE t_user (
    id INT (4)
    NAME VARCHAR(32) ,
    class BIGINT(1000) 

    unique(id,name)

//多个字段的联合唯一性约束 constraint  表名 _ 字段名 _约束字段名

);

  • 非空性约束与联合性唯一约束的联合应用(既不能重复且唯一使用)

CREATE TABLE t_stu(
    NO INT (4) NOT NULL UNIQUE 
    NAME VARCHAR(128)
);

  • 主键约束

primary ky(pk)

主键约束  主键字段 主键值

表中某个字段被添加主键约束后,该字段被称为主键字段,主键字段中出现的每一个数据都称为主键值


主见约束的作用;

添加主见约束的字段既不能为空,也不能重复。。。。效果与not null unique 相同,但是默认添加了一个"索引 -----index"(

提高了检索效率)

一张表应该有主键,主键的值不能修改,及时两个数据完全相同但是他们的主键值不同,也认为他们是不同索引

  1. 根据个数分类,单一主键和复合主键

    列级写法
CREATE TABLE t_stu(
    NO INT (4) PRIMARY KEY

    NAME VARCHAR(32) NOT NULL

);

    表级写法

CREATE TABLE t_stu(
    NO INT (4),
    NAME VARCHAR(32) NOT NULL
     PRIMARY KEY(id)
);

对于复合主键,只要有一个字段值不同就认为不符合

  

2.根据业务逻辑分为:自然主键和业务主键

自然主键:若是一个自然数,则这个自然数和业务没有任何关系

业务主键:主键值和当前的业务紧密相关, 

mysql自动生成主键值AUTO_INCREMENT 

mysql提供一个自增数字auto_increment,默认从1开始自增。

CREATE TABLE t_students(
    id INT (4) PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(32) NOT NULL
);

  • 外键约束(foreign key)(外键在同一个表中可以有多个

外键约束,外键字段,外键值:

  1. 单一外键:给一个字段添加外键约束

DROP TABLE IF exits  t_class;

CREATE TABLE t_class (
    cno INT(4) PRIMARY KEY,
    cname VARCHAR(32)
);

DROP TABLE IF exits t_stdent;

CREATE TABLE t_student(
    sno INT(4)PRIMARY KEY AUTO_INCREMENT,
    sname INT (4),
    classno INT(4),
    CONSTRAINT t_stdent_class_fk FOREIGN KEY(classno) REFERENCES t_class(cno)
);

首先避免了数据冗余,其次添加了外键约束

以上的表中产生了父子关系,先有父的数据,才有子 ,创建表时应该先创建父表数据再创建字表数据。

外键字段可以为null,外键为空的数据称为孤儿数据

被应用字段必须具有唯一性约束,

外键约束应该注意:

分成两张表来存储,可以减少数据的冗余

典型的一对多的关系,在多的一方要添加外键

SELECT 
	s.sname,c,cname
FROM 
	t_student
JOIN 
	t_class
ON 
	s.cno = c.classno;
查询学生做对应的班级名称。

级联更新与级联删除(在外键约束的基础之上来使用)

在外键约束后面添加关键字(谨慎使用

级联删除:

alter table t_student add constraint t_student_classno_fk foreign key(classno) reference t_class(cno);

级联更新:

alter table t_student add constraint t_student_classno_fk foreign key(classno) reference t_class(cno) on update cascade;(及时更新与之相关的数据)

  1. 复合外键:给多个字段添加外键约束

发布了183 篇原创文章 · 获赞 19 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43641432/article/details/100187652