• 约束的概念和分类(包含外键约束)


    约束的概念

    约束是作用于表列上的规则,用于限制加入表中的数据

    约束的存在保证了数据库中数据的正确性,有效性和完整性。

    约束的分类

    非空约束: 保证列中所有的数据不能有null值   关键字  NOT null

    唯一约束: 保证列中所有数据各不相同     关键字 Unique

    主键约束:主键是一行数据的唯一标识,要求非空且唯一  关键字  Primary Key

    检查约束: 保证列中的值满足某一条件   关键字 Check

    默认约束: 保存数据时,未指定值采用默认值   关键字Default

    外键约束:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性    Foreign key

    注意:mysql中是没有检查约束的 

    案例

    1. -- 员工表
    2. CREATE table `emp11`(
    3. `id` int PRIMARY KEY auto_increment, -- 员工id,主键且自增
    4. `ename` VARCHAR(50) UNIQUE NOT NULL, -- 员工姓名 非空且唯一
    5. `joindate` DATE not NULL, -- 入职日期,非空
    6. `salary` DOUBLE(7,2) NOT null,-- 工资非空
    7. `bonus` DOUBLE(7,2) DEFAULT 0 -- 如果没有奖金默认为0
    8. );
    9. INSERT into emp11 (id ,ename,joindate,salary,bonus)VALUES (1,'张三','1999-11-11',3000,222);
    10. INSERT into emp11 (ename,joindate,salary)VALUES ('李四','1999-11-11',3000);
    11. SELECT * FROM emp11;

    自增字段的要求为:当前列是数字类型,并且是唯一约束修饰的

    补充一下

    1. -- 删除约束非空约束 ALTER table 表名 MODIFY 字段名 数据类型 ;
    2. ALTER table emp11 MODIFY salary DOUBLE;
    3. -- 建完表后添加非空约束 ALTER TABLE 表名 modify 字段名 数据类型 NOT NULL;
    4. ALTER TABLE emp11 modify salary DOUBLE NOT null;
    5. -- 删除约束唯一约束 ALTER table 表名 MODIFY 字段名 数据类型 ;
    6. -- 建完表后添加唯一约束 ALTER TABLE 表名 modify 字段名 数据类型 UNIQUE;
    7. -- 建完表添加默认约束 ALTER TABLE 表名 ALTER 字段名 SET DEFAULT 默认值;
    8. -- 删除默认约束 ALTER TABLE 表名 ALTER 字段名 DEFAULT;
    9. -- 建完表添加主键约束 ALTER table 表名 ADD PRIMARY KEY(字段名);
    10. -- 删除主键 ALTER table 表名 DROP PRIMARY key;

    外键约束:

    概念:外键是用来让两个表的数据建立连接,保证数据的一致性和完整性

    添加外键约束

    要先创建好主表,才能创建外键   。

    添加数据的时候也要先添加主表,才能添加字表

    要想删除主表数据,必须先把与主表相关联的数据先删除,或者直接删除外键

    在Navicat中,可以选择表-> 选择有关联的表->右击->逆向表到模型就可以查看表的关系

    1. -- 部门表(主表)
    2. CREATE TABLE dept(
    3. id int PRIMARY key auto_increment,
    4. dep_name varchar(20),
    5. addr VARCHAR(20)
    6. );
    7. -- 员工表(从表)
    8. CREATE TABLE emp3(
    9. id int PRIMARY key auto_increment,
    10. `name` VARCHAR(20),
    11. age int,
    12. dep_id int,
    13. -- 添加外键 dep_id,关联dept 表的主键 CONSTRAINT 外键名 FOREIGN key(本(子)表字段) REFERENCES 主表(字段)
    14. CONSTRAINT fk_emp3_dept FOREIGN key(dep_id) REFERENCES dept(id)
    15. );
    16. -- 给部门表添加数据
    17. INSERT into dept(dep_name,addr) VALUES('研发部','北京'),('销售部','上海');
    18. -- 给员工表添加数据
    19. INSERT into emp3(name,age,dep_id) VALUES
    20. ('张三','20',1),
    21. ('李四','22',2),
    22. ('王五','20',2),
    23. ('赵六','20',1);
    24. SELECT * FROM dept;
    25. SELECT * FROM emp3;
    26. -- 删除外键 ALTER table 表名(在哪个表创建的外键就写哪个表的表名) DROP FOREIGN key 外键名称;
    27. ALTER TABLE emp3 DROP FOREIGN key fk_emp3_dept;
    28. -- 建完表后添加外键ALTER table 表名 ADD CONSTRAINT 外键名称 FOREIGN key (外键字段名称,本表的) REFERENCES 主表名称(主表列名称);
    29. ALTER table emp3 ADD CONSTRAINT fk_emp3_dept FOREIGN key(dep_id) REFERENCES dept(id);

  • 相关阅读:
    排错 rpmbuild -ba ***.spec时出现 警告:发现已安装(但未打包的)文件/错误:警告:发现已安装(但未打包的)文件
    10-2.WPF的Style
    华为云14天鸿蒙设备开发-Day9网络应用开发
    Casdoor系统static任意文件读取漏洞
    leetCode 583.两个字符串的删除操作 动态规划 + 优化空间复杂度(二维dp、一维dp)
    plsql导入dmp文件:使用PL/SQL导入DMP文件,实现数据库的快速迁移
    SpringCloud无介绍快使用,sentinel热点key限流与系统规则的基本使用(二十二)
    国产企业级低代码开发哪个最好?这一款超好用
    Spring Initailizr
    奇迹mu 架设过程中可能会出现的问题及解决办法
  • 原文地址:https://blog.csdn.net/m0_64365315/article/details/126110203