MYSQL笔记_约束

本文详细解释了数据库中的各种约束,包括保证数据完整性的不同类型(如实体完整性、引用完整性等)、NOTNULL约束的使用、UNIQUE约束的灵活性、PRIMARYKEY约束的作用以及如何通过ALTERTABLE操作来添加、修改和删除这些约束。

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

为什么

保证数据完整性
a,实体完整性,如:同一个表中不存在无法区分的,两条完全相同的记录
b,域完整性,如:年龄范围(0,100)
c,引用完整性,如:外连接查找客户地址,连接的表里必须有客户地址
d,用户自定义完整性,如:用户名唯一,密码不能为空


是什么

对表中字段的限制
表级的强制规定,在创建表时(CREATE TABLE)/创建表后(ALTER TABLE)规定约束


分类

A,根据约束列的限制(约束字段的个数)
单列约束:每个约束只约束一个列
多列约束:每个月书约束多个列

B,根据约束的作用范围(作用范围)
列级约束:作用在一个列上(在字段的后面声明)
表级约束:作用在一个表上(所有字段都声明完后,在所有字段后面,声明约束)

C,根据约束的作用或功能

1,NOT NULL 非空约束

2,UNIQUE 唯一性约束

3,PRIMARY KEY 主键约束   

4,FOREIGN 外键约束

5,CHECK 检查约束

6,DEFAULT 默认值约束



1,NOT NULL 非空约束
        

        A,作用:不允许为空
        B,特点

                1,默认
                2,只能某个列单独限制非空
                3,一个表可以有很多列限定非空
                4,空字符串不等于NULL,0不等于NULL

    
        C,添加    

    CREATE DATABASE dbtest2 ;
    USE dbtest2 ;    

        1,建表时声明

        CREATE TABLE test1(
        id INT NOT NULL,
        last_name VARCHAR(15) NOT NULL,
        email VARCHAR(25),
        salary DECIMAL(10,2) NOT NULL
        );
        DESC test1;
        INSERT INTO test1(id,last_name,email,salary)
        VALUES(123,'TOM','TOM@gmail.com',5000);

        错误,因为其他字段没有输入默认为null

        INSERT INTO test1(id,email)
        VALUES(123,'TOM@gmail.com');

    
        2,建表后声明

方法一

        UPDATE test1
        SET email = NULL
        WHERE id = 1 ;

方法二 

        ALTER TABLE test1
        MODIFY email VARCHAR(25) NOT NULL;     

     
        D,删除

        ALTER TABLE test1
        MODIFY NAME VARCHAR(25) DEFAULT 'TOM' NULL;


2,UNIQUE 唯一性约束


    A,允许出现多个空值
    B,特点

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

    C,添加

        CREATE TABLE test2(
         id INT UNIQUE,列级约束
        last_name VARCHAR(15) UNIQUE,
        email VARCHAR(25),
        salary DECIMAL(10,2), 

        表级约束
        CONSTRAINT UK_test2_email UNIQUE(email)
        );
        DESC test2;

 方法一

        INSERT INTO test2(id,last_name,email,salary)
        VALUES(2,'TOM',NULL,4600);

方法二

        ALTER TABLE test2
        ADD CONSTRAINT uk_test2_sal UNIQUE(salary);

方法三

        ALTER TABLE test2
        MODIFY last_name VARCHAR(15) UNIQUE;


    D,复合唯一性约束

        CREATE TABLE test_user(
        id INT,
        `NAME` VARCHAR(15),
        `PASSWORD` VARCHAR(25),
        
        CONSTRAINT uk_user_name_pwd UNIQUE(`NAME`,`PASSWORD`)

        );

      
        name和password不完全一样就不会报错

        INSERT INTO test_user
        VALUES(1,'TOM','ABC');


        INSERT INTO test_user
        VALUES(1,'JERRY','ABC');


    E,删除唯一性约束

        1,添加唯一性约束时,系统会自动创建唯一索引
        2,唯一性约束如果是单列,索引名等于列名
        3,唯一性约束只能通过唯一索引来删除

        ALTER TABLE test-user
        DROP INDEX uk_name_pwd;


 3,PRIMARY KEY 主键约束

        A,作用:用来唯一标识表中的一行记录

        B,特点

        1,主键约束相当于,唯一性约束加上非空约束的组合,不允许重复,也不允许出现空值
        2,多列组合的复合主键约束中,列不能为NULL,且不能重复
        3,主键约束对应表中的一列或多列
        4,创建主键约束时,系统会在所在的列或列组合上建立对应的主键索引
        5,MYSQL的主键名总是PRIMARY
        6,一个表只有一个主键约束
        7,修改了逐渐的值,可能会破坏数据完整性


        C,添加

CREATE TABLE test_primary(
id INT PRIMARY KEY,
last_name VARCHAR(15),
salary DECIMAL(10,2),
email VARCHAR(25)

#CONSTRAINT PK_TEST_ID PRIMARY KEY(id)
);

INSERT INTO test_primary(id,last_name,salary,email)
VALUES(2,'TOM',4600,'123@gmail.com');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值