MySql中的约束(包含操作)

MySQL中的常见约束

1.什么是约束

  • 约束就是一种限制,用于限制数据库中表的列或行的数据。

2.使用约束有什么用

  • 为了保证数据库中的数据的准确和可靠性。比如说我有一个学生表,我想查找根据学号查询唯一的一名学生。这时候就需要学生表中学生的id是不能重复。这里的id就需要使用约束。

3.约束的分类以及各约束的作用

  • NOT NULL :非空,用于限制该字段的值不能为空。比如学号,姓名
  • DEFAULT:默认,用于给字段设置默认的值。比如性别
  • PRIMARY KEY:主键,用于保证该字段唯一且非空。比如学号员工编号
  • UNIQUE:唯一,用于保证该字段唯一,但是可以为空
  • CHECK:检查约束,在MySQL中没有效果,用于给字段中的值的插入添加限制条件。比如年龄不能小于0,性别不能为中。
  • FOREIGN KEY:外键,用于保证字段的值必须来自主表中的关联表中的值。比如:学生表中的专业字段来自主表专业表。这里添加外键的表是从表
    无标题.png

4.外键约束FOREGIN KEY的修饰表的位置

  • 字段约束:在表中字段类型的后面添加,但是在MySQL中没有效果
  • 表约束:在表中所有字段之后添加
create table 表名 (

    字段名 字段类型 字段外键约束
    ...
    外键的表约束
    
)

6.约束添加的分类和是否支持

一个字段可以添加多个约束

  • 列级约束:六中约束都支持但是外键约束和检查约束没有效果
  • 表级约束:除了非空、默认和检查约束都支持

使用约束建表

1.列级约束建表

注意只支持主键,默认,非空,唯一约束

create table studentinfo (
    id int primary key,#主键
    stuName varchar(20) not null,#非空
    gender char(1) check (gender = '男' or gender = '女'),#检查约束写在此处没效果
    seat int unique,#唯一可以为空
    age int default 18, #默认约束为18
    majorId int references major(id) #外键,写在此处没效果
)

create table majorinfo (
    id int primary key,
    subjects varchar(20),
)

2.表级约束建表

列级约束只支持唯一,主键,外键,检查约束(但没效果)。

语法:[constraint 约束名] 约束类型(字段名),其中constraint 约束名可省略

    create table stuinfo (
        id int,
        stuName varchar(20),
        gender char(1),
        seat int,
        age int,
        majorId int,
        
        constraint pk primary key(id),
        constraint uq unique(seat),
        constraint ck check(gender = '男' or gender = '女')
        constraint fk_stuinfo_major foreign key(majorId) references major(id)
    )

3.建表时约束的通用写法

由于有些约束写在字段或表的时候没有效果,所以总结一套约束都有效的建表写法

    create table stuinfo (
        id int primary key,
        stuName varchar(20) not null,
        gender char(1),
        seat int unique,
        age int default 18,
        majorId int,
        
        constraint fk_stuinfo_major foregin key(majorId) references major(id)
    )
  1. 修改表时添加约束

语法:

    # 添加列级约束
    alter table 表名 modify column 字段名 字段类型 新约束
    
    # 添加表级约束
    alter table 表名 add [constraint 约束名] 约束类型(字段名) [外键的引用]
    

例子:

    # 添加主键约束
    # 列级约束
    alter table stuinfo modify column id int primary key
    # 表级约束
    alter table stuinfo add primary key(id)
    
    # 添加外键约束
    alter table stuinfo add foreign key(majorId) references major(id)
    

删除表的约束

1.使用alter更改列

语法:

    alter table 表名 modify column 字段名 字段类型;#后面不加约束默认没有约束    

例子:

    alter table stuinfo modify column stuName varchar(20);

2.使用drop

语法:

    alter table drop 约束 [约束名],
    #如果表中只有一个该约束,可以不加约束名例如主键

例子:

    # 删除表中的主键约束
    alter table stuinfo drop primary key;
    
    #删除表中的唯一约束
    alter table stuinfo drop index seat;
    
    #删除表中的外键约束
    alter table stuinfo drop foreign key fk_stuinfo_major;

主键和非空的区别

保证唯一性是否允许为空一个表中可以有多个是否允许组合
主键××√,但不推荐
唯一√,但不推荐

外键的特点

  1. 添加了外键的表叫做从表,被引用的表叫主表
  2. 在添加外键约束时必须先创建主表插入数据,然后再创建子表后添加外键。
  3. 删除表时要先删除从表然后再删除主表
  4. 从表设置外键的字段的类型必须和主表的字段类型一样或兼容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值