Mysql-约束-7种

  主键约束
    - 说明:1张表中最多只能有1个主键(可以没有)。主键可以是1个属性,也可以是由多个属性同时组成
    - 主属性的值不能为空,不能重复
    - 方式1:列级,`属性1 数据类型 primary key`

# 创建学生表,学号作为主键
create table if not exists student(
  st_no char(10) primary key,   # 主键约束
  st_name varchar(20),
  st_age tinyint,
  st_gender char(1),
  st_date date
)engine=innodb charset="utf8" collate="utf8_general_ci";


    - 方式2:表级,`constraint 主键名称 primary key(属性1,属性2,...)`
        - `constraint 主键名称`,可选的,指定主键的名称,如果省略系统会为主键自动生成一个名称


# 创建成绩表,学号+课程号为主键
create table if not exists score(
  st_no char(10),    # 学号
  cu_no char(4),    # 课程号
  score tinyint,    # 成绩
  constraint pk_sc primary key(st_no,cu_no) # 主键约束
)engine=innodb charset="utf8" collate="utf8_general_ci";

```


外键约束
    - 概念:两张表A、B,A表中的属性s(可以是主属性或者非主属性)出现在B表中(不作为B表的主属性),此时将B表中的属性s(可能叫其他名字)称为外键,A表为主表,B表为子表
    - 外键约束:子表中不能引用主表中不存在的值
    - 注意:子表引用主表中非主属性时,需要为该属性设置索引
    - 语法:`constraint 外键名 foreign key (属性名) references 主表名(属性) on delete cascade on update cascade`
        - `constraint 外键名`,可选的,指定外键名称,省略时系统自动命名
        - `foreign key (属性名)`,表示在子表的哪个属性上创建外键
        - `references 主表名(属性)`,表示引用主表的哪个属性
        - `on delete cascade`,可选的,级联删除,表示主表数据被删除时,联动删除子表中对应的数据
        - `on update cascade`,可选的,级联修改,表示主表数据被修改时,联动修改子表中对应的数据。如果省略,则主表的数据不允许变动(默认)

# 创建学生表,学号作为主键
create table if not exists student(
  st_no char(10) primary key,   # 主键约束
  st_name varchar(20),
  st_age tinyint,
  st_gender char(1),
  st_date date
)engine=innodb charset="utf8" collate="utf8_general_ci";

# 创建成绩表,学号为外键,引用学生表中的学号
create table if not exists score(
  st_no char(10),    # 学号
  cu_no char(4),    # 课程号
  score tinyint,   # 成绩
  # 创建外键
  constraint fk_stno foreign key (st_no) references student(st_no) 
  on update cascade on delete set null
)engine=innodb charset="utf8" collate="utf8_general_ci";

唯一约束
      - 语法:`属性 数据类型 unique`,属性的值不能重复



 非空约束
      - 语法:`属性 数据类型 not null`,属性的值不能为空
 检查约束
      - 语法:`属性 数据类型 check(条件)`,属性的值必须满足指定条件(mysql 8以上版本支持)
      - mysql 8以下版本对于离散值,比如性别的男或者女,可以通过`set`或者`enum`实现。

      -enum和set的区别:set可选择多个选项,enum只能单选。



  默认值
      - 语法:`属性 数据类型 default 值`,放在其他约束之后
 自增长
      - 语法:`属性 数据类型 auto_increment`,只能用在主键上
  - 例:


# 创建学生表,学号作为主键
create table if not exists student(
  st_no char(10) primary key,   # 主键约束
  st_name varchar(20) not null,  # 非空约束
  st_age tinyint not null,
  st_gender char(1) not null default "男",  # 非空约束+默认值
  st_phone char(11) unique not null,
  st_date date not null
)engine=innodb charset="utf8" collate="utf8_general_ci";

# 创建课程表
create table if not exists course(
  cu_no char(4) primary key,
  cu_name varchar(20) not null unique
)engine=innodb charset="utf8" collate="utf8_general_ci";


# 创建成绩表,学号为外键,引用学生表中的学号
create table if not exists score(
  id int auto_increment primary key,
  st_no char(10) not null,    # 学号
  cu_no char(4) not null,    # 课程号
  score enum("A","B","C","D"),   # 成绩
  # 创建外键
  foreign key (st_no) references student(st_no) on update cascade on delete cascade,
  foreign key (cu_no) references course(cu_no) on update cascade on delete cascade
)engine=innodb charset="utf8" collate="utf8_general_ci";

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
MySQL-xmind 是一MySQL 数据库架构可视化为思维导图的工具。它可以帮助开发人员更好地理解和管理数据库结构。 使用 MySQL-xmind,我们可以通过图形化的方式表示数据库中的表、字段、关系和约束等元素。这样做可以使得数据库设计更加直观、易于理解。通过思维导图的形式,我们可以清楚地看到表之间的关系,如外键约束和关联关系。这对于开发人员在编写 SQL 查询和构建复杂查询时非常有帮助,因为他们可以更轻松地理解表之间的连接和关联。 此外,MySQL-xmind 还可以帮助我们进行数据库的维护和优化。我们可以使用思维导图来查看表的索引、主键和其他约束,从而更好地了解数据库的性能和结构。通过检查思维导图,我们可以发现潜在的问题,如冗余数据、不合理的索引或缺失的关联。 一些功能强大的特性,如批量生成 SQL 语句、导出导入数据库结构等,也使得 MySQL-xmind 成为一个非常实用的工具。它允许我们快速生成 SQL 脚本,以便在不同的环境中部署数据库结构。同样地,我们可以将数据库结构导出为思维导图,方便与团队成员共享和讨论。 总之,MySQL-xmind 是一个方便实用的工具,可以对 MySQL 数据库的结构进行可视化管理和优化。它帮助了开发人员更好地理解数据库的设计和关系,并提供了一些非常有用的功能,如批量生成 SQL 语句和导出导入数据库结构等,使得数据库管理更加高效和便捷。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LYJ的whale

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值