当前位置:   article > 正文

MySQL七大约束,三大范式 ,级联删除_mysql清除表的关键约束

mysql清除表的关键约束
  1. 非空约束(Not Null Constraint):非空约束用于确保某个列中的值不能为空(即非空)。该约束可以使指定列中的数据不允许包含空值(NULL),从而确保数据的完整性和可靠性。

    创建表设置not null
    create table 表名(列1 数据类型 not null,列2 数据类型…)
    创建表后设置not null
    alter table 表名 change 旧列1 新列1 新数据类型 not null;
    删除非空约束
    alter table 表名 change 旧列1 新列1 新数据类型 null;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

  1. 唯一约束(Unique Constraint):唯一约束用于确保表中的某个列或一组列的值是唯一的,即不能重复。与主键约束不同的是,唯一约束允许有空值(NULL),但对于非空值,要求其在整个表中是唯一的。

    create table 表名 (列1 数据类型, 列2 数据类型 unique,.....);
    对唯一约束起名
    create table 表名 (列1 数据类型, 列2 数据类型 CONSTRAINT 约束名 unique key(列2));
     
    创建完表后添加唯一约束
    语法1:alter table tbname add unique key(列名);
    语法2:alter table tbname change 旧列名 新列名 新数据类型 unique;
    
    删除唯一约束
    语法:alter table 表名 drop index 唯一性约束的约束名(如果没有对唯一约束起名,默认时有唯一约束的列名
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

  2. 主键约束(Primary Key Constraint):主键约束用于唯一标识一条记录,在表中不能重复。它能确保表中的每一条记录都有唯一的主键值,也可以作为其他表与该表进行关联的外键。

    创建表:create table 表名(列名1 数据类型 primary key, 列名2 数据类型 ...);
    多主键设置
    create table 表名(列名1 数据类型 , 列名2 数据类型,primary key(列名1,列名2));
    创建表后:alter table 表名 change 旧列名 新列名 新数据类型 primary key;
    联合主键
    语法:create table 表名(列名1 数据类型 , 列名2 数据类型,primary key(列名1,列名2));
    删除主键:alter table 表名 drop primary key;
    删除非空: alter table 表名 change 旧列1 新列1 新数据类型 null;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

  3. 外键约束(Foreign Key Constraint):外键约束用于建立表与表之间的关联关系,确保表中的外键值引用了其他表中的主键值。外键约束可以保证数据的完整性,实现数据的一致性和有效性。

    语法:create table 子表 (列1 数据类型,列2 数据类型) constraint 外键名字 foreign key(外键列名) REFERENCES 主表(主键));
    列如:
    CREATE TABLE 主表名称( 
    字段1 数据类型 PRIMARY KEY, 
    字段2 数据类型 
    );
    CREATE TABLE 从表名称( 
    字段1 数据类型 PRIMARY KEY, 
    字段2 数据类型, 
    [CONSTRAINT <外键约束名称>] FOREIGN KEY(从表的某个字段) REFERENCES 主表名(被参考字段) 
    );
    创建表后再添加外键
    语法:alter table 子表 add constraint 外键名 foreign key(列1) REFERENCES 主表(主键);
    删除外键
    语法:alter table 子表 drop FOREIGN key 外键名称;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

  4. 默认约束(Default Constraint):默认约束用于设置某个列在插入新记录时的默认值。如果插入操作中没有为指定列提供具体值,该列就会使用默认约束定义的默认值。

     语法:create table 表名(列1 数据类型, 列2 数据类型 default 默认值)
     创建表之后添加默认值约束
     语法:alter table 表名 change 旧列 新列 数据类型 default '默认值';
     删除默认值约束
     语法:alter table 表名 change 旧列 新列 数据类型 default null
    
    • 1
    • 2
    • 3
    • 4
    • 5
  5. 自增长约束

    某个字段的值自增, 一个表最多只能有一个自增长列, 当需要产生唯一标识符或顺序值时,可设置自增长, 自增长列约束的列必须是键列(主键列,唯一键列), 自增约束的列的数据类型必须是整数类型

    • 给表的某个列添加了自增长约束后
    • 给该表添加数据的时候,就不需要给给列赋值了
    • 该列会自动生成一个新的值,这个新的值是这个列最大值+1
    • 如果给值得话,会默认使用给定得值
    • 如果使用truncate关键字进行删除表数据时,会重置自增长最大序列值
     语法:create table 表名(列1 数据类型 primary key auto_increment);
     作用:生成不重复的并且递增的数据,一般是和主键一起使用
     注意:一张表一般就一个递增序列
     删除自增长约束
     语法:alter table 表 change 旧列 新列 新数据类型
     使用truncate关键字进行删除表数据时,会重置自增长最大序列值, truncate只能删除整个表
     truncate table 表名;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

  6. 检查约束(Check Constraint):检查约束用于限制列中的值必须满足某个条件或表达式。通过检查约束,可以设置某个列的取值范围或满足特定条件的约束,确保数据的有效性和一致性。

     语法:create table 表名(列1 数据类型, 列2  set('男','女'))
     创建完表后添加检查约束
     语法:alter table 表名 change 旧列 新列 set(值1,值2);
     删除检查约束
     语法:alter table 表名 change 旧列 新列 新数据类型;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在MySQL中,CHECK约束可以用于在插入或更新行时验证列值的规则。然而,需要注意的是,MySQL并不直接支持CHECK约束,但你可以通过使用触发器来模拟实现类似的功能。

    以下是一个使用触发器实现CHECK约束的示例:

    1. 创建表并添加列级CHECK约束:
    CREATE TABLE employee (
        id INT PRIMARY KEY,
        name VARCHAR(100),
        age INT,
        salary DECIMAL(10, 2),
        CONSTRAINT check_age CHECK (age >= 18)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这个示例中,我们在employee表的age列上定义了一个CHECK约束,要求age的值必须大于或等于18。

    1. 创建触发器来验证CHECK约束:
    DELIMITER //
    
    CREATE TRIGGER check_age_trigger BEFORE INSERT ON employee
    FOR EACH ROW
    BEGIN
        IF NEW.age < 18 THEN
            SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Age must be greater than or equal to 18';
        END IF;
    END //
    
    DELIMITER ;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这个示例中,我们创建了一个BEFORE INSERT触发器,在每次插入行之前验证age的值是否满足CHECK约束。如果不满足,触发器会抛出一个自定义的错误消息。

    请注意,触发器只是模拟实现CHECK约束的一种方法,在MySQL中并不是原生的CHECK约束。因此,你需要在应用程序中确保在插入或更新数据时遵循所定义的约束规则。

    总结起来,在MySQL中使用CHECK约束的常见做法是通过创建触发器来实现类似的功能。但也要记住,触发器可能会增加数据库的复杂性,并且在处理大量数据时可能会影响性能。因此,在使用触发器实现CHECK约束之前,要仔细考虑你的需求和数据库设计。

这些约束可以在表的设计阶段或创建表时定义,或者在已存在的表上进行修改和添加。通过使用这些约束,可以提高数据库的数据完整性、一致性和安全性。

级联删除更新规则

级联删除,级联更新

  • restrict:默认值,主表对数据进行更新或者删除时,关联的从表数据如果有,则不允许主表数据更新或删除
  • noaction:不操作, 作用同上
  • cascade:主表对数据进行更新或者删除时,关联的从表数据如果有,则允许主表删除或者更新数据,关联的从表数据同步更新或删除
  • set null:主表对数据进行更新或者删除时,关联的从表数据如果有,则允许主表删除或者更新数据,关联的从表数据设置为null
约束名约束关键字说明
主键约束primary key字段不能重复且不能为空
非空约束not null不能为空
唯一约束unique不能重复
默认值约束default给定一个默认的值
检查约束check(mysql不支持,oracle,使用set代替check)字段给定一个取值范围
自增长约束auto_increment字段的数值自己增加
外键约束foreign key建立表之间的关系,数据来源于主表的主键数据,保证数据的一致性完整性

MySQL并没有明确的“三大范式”概念,而是关系数据库设计中的范式原则。范式是用来规范数据库设计的一种方法,主要目的是消除数据冗余和提高数据的一致性。

以下是关系数据库设计中的三个主要范式:

  1. 第一范式(1NF):确保每个列都是原子的,即每个列都不能再分解为更小的数据项。这意味着每个列都应该是单一值,不允许包含多个值或重复的值。

  2. 第二范式(2NF):要求满足第一范式,并且非主键列完全依赖于主键列。换句话说,表中的每个非主键列都必须完全依赖于主键,而不能依赖于其他非主键列。

  3. 第三范式(3NF):要求满足第二范式,并且非主键列之间不存在传递依赖。换句话说,表中的每个非主键列都不能依赖于其他非主键列。

通过遵循这些范式,可以确保数据库设计的规范性和数据的一致性,减少数据冗余和更新异常。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/574865
推荐阅读
相关标签
  

闽ICP备14008679号