mysql基础--约束

mysql基础--约束

用于确保数据库的数据满足特定的商户规则,mysql中的约束有(not null 、 unique、 primary key、foreign key、check)

  • primary key:主键

    用于唯一的标示表行的数据,定义主键约束后,该列不能重复

    • 不能重复而且不能为null
    • 一张表只能有一个主键,但可以是复核主键使用下面方式,也就是用两个字段值合并当成一个组合主键
      • 在表定义最后写 primary key (字段名,字段名)
    • 指定方式又两种
      • 直接在创建字段后面指定:字段名 primary key
      • 在表定义最后写 primary key (字段名)
    • 使用desc 表名,可以看到primary key的情况
    • 往往实际开发中,每个表都会具有一个主键
  • not null:非空

    必须有数据,不能为null值

  • unique:唯一

    本列不能出现重复值

    细节:

    • 如果被指定的字段,没有另外指定not null,则unique字段可以有多个null;如果一个字段是 unique not null 使用效果类似primary key
    • 一张表可以有多个unique字段
  • foreign key:外键

    用于定义主表和从表之间的关系:外键约束要定义在从表上,主表则必须具有主键约束或者是unique约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null,同时当主表中数据已经被外键关联后不能单独去删除主表数据,必须在外键中关联的数据删除后才可以删除主表的关联数据

    -- 外键演示
    
    -- 创建主表
    create table my_class(
    	id int primary key, -- 班级编号
        `name` varchar(32) not null default ''
    );
    
    -- 创建从表
    create table my_stu(
    	id int primary key,-- 学生编号
        `name` varchar(32) not null default ''
        class_id int,-- 学生所在班级编号
        -- 下面指定外键
        foreign key (class_id) references my_class(id)
    );
    
    -- 测试代码
    insert into my_class
    	values(100, 'java'), (200, 'web');-- 新增班级
    
    insert into my_stu
    	values(1, 'tom', 100);-- 新增学生
    insert into my_stu
    	values(2, 'jack', 200);-- 新增学生
    insert into my_stu
    	values(3, 'milan', 300);-- 新增学生,失败,因为外键约束,没有300这个键的班级
    
    • 外键指向的表的字段,要求是primary key 或者有unique约束
    • 表的类型是innodb,这样的表才支持外键
    • 外键字段的类型要和主键字段的类型一致,长度可以不同
    • 外键字段的值必须在主键出现过,或则为null(前提时外键字段允许为null)
    • 一旦建立主外键的关系,数据不能随意删除了
  • check:检查

    用于强制性数据必须满足条件检查,假定sal列上定义了check,并要求sal列值在1000-2000之间,如果插入的值不满足就会提示出错

    注意:oracle 和sql server 均支持check,但是mysql5.7目前还不支持check,只做语法检查,但不会生效;mysql中实现check,一般是在程序中控制,或者通过触发器完成

    create table test(
    	id int primary key,
        `name` varchar(32),
        sex varchar(6) check (sex in ('man','woman')),
        sal double check (sal > 1000 and sal <2000)
    )
    
posted @   邵泽龙  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示