MYSQL—约束简介

本文介绍了数据库中的约束类型,包括非空约束(NOTNULL)、唯一约束(UNIQUE)、主键约束(PRIMARYKEY)、外键约束(FOREIGNKEY),以及默认值约束和检查约束。每个约束都有其特定的功能和用法,比如非空约束确保字段不为空,唯一约束保证字段值的唯一性,主键约束作为表的唯一标识,外键约束维护数据的参照完整性。此外,还提到了如何添加、删除这些约束的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1.  什么是约束

    约束是表级的强制规定。

    可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后通过 ALTER TABLE 语句规定约束

  2. 约束种类

    ·NOT NULL(非空约束)
    ·UNIQUE(唯一约束)
    ·PRIMARY KEY 约束(主键约束)
    ·FOREIGN KEY 约束(外键约束)
    ·CHECK 约束(检查约束)
    ·DEFAULT 约束(默认值约束)
     
  3. NOT NULL(非空约束)

    NOT NULL 非空约束,规定某个字段不能为空

    特点:
    1.默认,所有的类型的值都可以是NULL,包括INT、FLOAT等数据类型
    2.非空约束只能出现在表对象的列上,只能某个列单独限定非空,不能组合非空
    3.一个表可以有很多列都分别限定了非空
    4.空字符串''不等于NULL,0也不等于NULL

    添加非空约束
    (1)建表时
    CREATE TABLE 表名称(
    	字段名  数据类型,
        字段名  数据类型 NOT NULL,  
        字段名  数据类型 NOT NULL
    );

    例如:
     

    CREATE TABLE emp(
    id INT(10) NOT NULL,
    NAME VARCHAR(20) NOT NULL,
    sex CHAR NULL
    );

    (2)建表后
     

    alter table 表名称 modify 字段名 数据类型 not null;

    例如:
     

    alter table student modify sname varchar(20) not null;

    删除非空约束
     

    alter table 表名称 modify 字段名 数据类型 NULL;#去掉not null,相当于修改某个非注解字段,该字段允许为空
    
    或 
    
    alter table 表名称 modify 字段名 数据类型;#去掉not null,相当于修改某个非注解字段,该字段允许为空

    例如:
     

    ALTER TABLE emp
    MODIFY NAME VARCHAR(15) DEFAULT 'abc' NULL;

  4. UNIQUE(唯一约束)

    唯一约束用,来限制某个字段或某列的值不能重复

    特点:


    1.同一个表可以有多个唯一约束。
    2.唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一。
    3.唯一性约束允许列值为空。
    4.在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同。
    5.MySQL会给唯一约束的列上默认创建一个唯一索引

    添加唯一约束


    (1)建表时
    create table 表名称(
    	字段名  数据类型,
        字段名  数据类型  unique,  
        字段名  数据类型  unique key,
        字段名  数据类型
    );
    create table 表名称(
    	字段名  数据类型,
        字段名  数据类型,  
        字段名  数据类型,
        [constraint 约束名] unique key(字段名)
    );

    例如:
     

    create table student(
    	sid int,
        sname varchar(20),
        tel char(11) unique,
        cardid char(18) unique key
    );
    
    CREATE TABLE USER(
     id INT NOT NULL,
     NAME VARCHAR(25),
     PASSWORD VARCHAR(16),
     -- 使用表级约束语法
     CONSTRAINT uk_name_pwd UNIQUE(NAME,PASSWORD)
    );

    删除唯一约束
     

    ALTER TABLE USER 
    DROP INDEX uk_name_pwd;

  5. PRIMARY KEY 约束(主键约束)

    主键约束,用来唯一标识表中的一行记录

    特点:

    1.主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值。 2.一个表最多只能有一个主键约束
    3.主键约束对应着表中的一列或者多列(复合主键)
    4.如果是多列组合的复合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复

    添加主键约束

    (1)建表时
    create table 表名称(
    	字段名  数据类型  primary key, #列级模式
        字段名  数据类型,  
        字段名  数据类型  
    );
    create table 表名称(
    	字段名  数据类型,
        字段名  数据类型,  
        字段名  数据类型,
        [constraint 约束名] primary key(字段名) #表级模式
    );

    例如:
     

    create table temp(
    	id int primary key,
        name varchar(20)
    );
    create table temp(
    	id int,
        name varchar(20),
        primary key(id)
    );

    (2)建表后
     

    ALTER TABLE 表名称 ADD PRIMARY KEY(字段列表); #字段列表可以是一个字段,也可以是多个字段,如果是多个字段的话,是复合主键

    例如:
     

    ALTER TABLE student ADD PRIMARY KEY (sid);
    
    ALTER TABLE emp5 ADD PRIMARY KEY(NAME,pwd);

  6. FOREIGN KEY 约束(外键约束)

    外键约束,限定某个表的某个字段的引用完整性

    特点:
    1.从表的外键列,必须引用/参考主表的主键或唯一约束的列
    2.在创建外键约束时,如果不给外键约束命名,默认名不是列名,而是自动产生一个外键名
    3.创建(CREATE)表时就指定外键约束的话,先创建主表,再创建从表
    4.删表时,先删从表(或先删除外键约束),再删除主表
    5.当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从     表中依赖该记录的数据,然后才可以删除主表的数据
    6.在“从表”中指定外键约束,并且一个表可以建立多个外键约束
    7.从表的外键列与主表被参照的列名字可以不相同,但是数据类型必须一样,逻辑意义一致

    添加外键约束

    (1)建表时
    create table 主表名称(
    	字段1  数据类型  primary key,
        字段2  数据类型
    );
    
    create table 从表名称(
    	字段1  数据类型  primary key,
        字段2  数据类型,
        [CONSTRAINT <外键约束名称>] FOREIGN KEY(从表的某个字段) references 主表名(被参考字段)
    );

    例如:
     

    create table dept( #主表
    	did int primary key,		#部门编号
        dname varchar(50)			#部门名称
    );
    
    create table emp(#从表
    	eid int primary key,  #员工编号
        ename varchar(5),     #员工姓名
        deptid int,				#员工所在的部门
        foreign key (deptid) references dept(did)   #在从表中指定外键约束
        #emp表的deptid和和dept表的did的数据类型一致,意义都是表示部门的编号
    );
    

    (2)建表后
     

    ALTER TABLE 从表名 ADD [CONSTRAINT 约束名] FOREIGN KEY (从表的字段) REFERENCES 主表名(被引用字段) [on update xx][on delete xx];

    例如:
     

    ALTER TABLE emp1
    ADD [CONSTRAINT emp_dept_id_fk] FOREIGN KEY(dept_id) REFERENCES dept(dept_id);

  7. CHECK 约束(检查约束)

    检查约束,检查某个字段的值是否符号xx要求,一般指的是值的范围

    例如:
    create table employee(
    	eid int primary key,
        ename varchar(5),
        gender char check ('男' or '女')
    );

  8. DEFAULT 约束(默认值约束)

    默认值约束,给某个字段/某列指定默认值,一旦设置默认值,在插入数据时,如果此字段没有显式赋值,则赋值为默认值。

    给字段添加默认值:


    (1)建表时
    create table 表名称(
    	字段名  数据类型  primary key,
        字段名  数据类型  unique key not null,  
        字段名  数据类型  unique key,
        字段名  数据类型  not null default 默认值, 
    );
    create table 表名称(
    	字段名  数据类型 default 默认值 ,
        字段名  数据类型 not null default 默认值,  
        字段名  数据类型 not null default 默认值,
        primary key(字段名),
        unique key(字段名)
    );

  9. AUTO_INCREMENT(自增列)

    自增列,某个字段的值自增

    特点和要求:

    1.一个表最多只能有一个自增长列
    2.当需要产生唯一标识符或顺序值时,可设置自增长
    3.自增长列约束的列必须是键列(主键列,唯一键列)
    4.自增约束的列的数据类型必须是整数类型
    5.如果自增列指定了 0 和 null,会在当前最大值的基础上自增;如果自增列手动指定了具体       值,直接赋值为具体值。

    如何指定自增列

    (1)建表时
    create table 表名称(
    	字段名  数据类型  primary key auto_increment,
        字段名  数据类型  unique key not null,  
        字段名  数据类型  unique key,
        字段名  数据类型  not null default 默认值, 
    );
    create table 表名称(
    	字段名  数据类型 default 默认值 ,
        字段名  数据类型 unique key auto_increment,  
        字段名  数据类型 not null default 默认值,,
        primary key(字段名)
    );

    例如:
    create table employee(
    	eid int primary key auto_increment,
        ename varchar(20)
    );

    (2)建表后
     

    alter table 表名称 modify 字段名 数据类型 auto_increment;

    例如:
     

    alter table employee modify eid int auto_increment;

    如何删除自增列
     

    alter table 表名称 modify 字段名 数据类型
    
    例如:
    alter table employee modify eid int;

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值