mysql学习总结五:约束

一、什么是表约束

表约束是在创建表的时候,设计的一些表的约束条件,用来保证数据的合法性和数据的正确性。

二、为什么需要表约束

表约束是为了规范程序员正确使用表的,但表约束是预先设置的,设置之后就对所有插入和修改立即生效,比如非空约束设置好之后,如果添加和修改为null值就会报错。

三、约束类型

在这里插入图片描述
1.非空约束
语法: 字段 字段类型 not null;
在这里插入图片描述
非空约束的作用:
在这里插入图片描述
注意:
1.学习了约束之后,我们设计表时,就应该注意约束条件。(字段 字段类型 约束…)
2.一个表中的非空约束时没有数量限制的,可以有[0,n]个。
查看非空约束:
⾮空约束可以使⽤ desc table_name 命令来查看:
在这里插入图片描述

2.唯一约束
语法:字段 字段类型 unique;
在这里插入图片描述
唯一约束的作用:
在这里插入图片描述
注:一张表里可以有一个或多个唯一约束。
在这里插入图片描述
问题: 给某个字段只创建了唯一约束,没有指定非空约束。
1.这个字段能不能插入NULL值? 能
2.这个字段能不能插入空值(’’)? 能
3.能否重复插入null值、’’ ? 可以重复插入null,但是 ''不可以重复插入!
在这里插入图片描述
在这里插入图片描述

注意:
1.唯一约束字段可以插入NULL;
2.唯一约束字段的NULL可以插入多个。(Mysql中的NULL比较特殊,这里的NULL不是一个值为’null’的字符串,而表示暂时是没有值的。)
3.NULL和字符串’NULL’的区别:
字段没有值: null
字段有值,值就等于字符’null’
这两者的是不相同的!
在这里插入图片描述
4.Mysql中需注意:null和空(’’)和’null’这三个是完全不相同的,不要混淆。
查询null: is null/is not null
查询 ‘’ ‘null’ := ‘’/‘null’ !=’’/‘null’
查看唯一约束
使用show keys from table_name;(行的形式)可以产看索引详情,或者使用show keys from table_name;(列的形式)查看。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
3.主键约束
1.主键是可以用来表示一张表中某条数据的代表凭证,例如对于‘人’这张表来说,唯一的身份证号就可以作为主键来代表这个人,而‘姓名’就不行,因为姓名可能会有重复的。
2.语法:( primary key本质上=not null+unique)
在这里插入图片描述
3.主键的特征
①主键可以由多个字段或单个字段组成。
②主键不能为空且唯一。
③一个表中只能有一个主键。

4.单字段主键
在这里插入图片描述
‘’ ‘null’不能插入是因为主键的字段类型为int类型。varchar类型的主键是可以插入’'和 'null’的。
在这里插入图片描述
5.联合主键
在这里插入图片描述
总结:
1.联合主键:多个字段联合起来形成的主键,因此只要多个字段不同时重复,那么插入数据就可以成功。
2.独立主键:只有一个字段作为主键,因此此主键不能重复出现。
3.一个表只能有一个主键,一个主键中可以包含多个字段。
常见面试题:主键约束VS唯一约束
主键约束⼀个表只能有⼀个,⽽唯⼀约束可以有多个;
主键约束不能有 null 值,⽽唯⼀约束可以有 null(唯⼀索引可以有多个 null)。
4.外键约束
外键⽤于关联其他表的主键或唯⼀键,语法:
在这里插入图片描述
主表(主键)和次表(外键,关联到主表的主键上)
在这里插入图片描述
外键的作用:进行数据插入时,会先去主表查询外键的有效性。
在这里插入图片描述
注意:外键是可以插入null值的,并且可以插入多个null,但是如果指定了数据(指定了具体的值),那么这个值一定得是有效的才行(所谓有效指的是这个值已经在主表中存在了)。
在这里插入图片描述
在这里插入图片描述
5.检查约束
检查约束是保证列中的值符合指定的条件,⽐如性别只能插⼊“男”或者“⼥”。
语法:
在这里插入图片描述
在这里插入图片描述
查看当前使用的mysql服务器版本命令为: select version();
6.自增约束
语法:(自增约束通常和主键约束搭配在一起使用)
在这里插入图片描述
在这里插入图片描述
插入记录时,没有给自增列指定明确的值,自增列会自动生成下一个序列编号。⾃增默认从 1 开始,每次递增 1。
在这里插入图片描述
查看自增值:
使用show create table 表名;命令。可以看到当前的自增值(当前的自增最大值)已经变为3。即当我再输入一个name值时,id默认就等于3
在这里插入图片描述
注意:
1.当给自增列插入null时,它的执行逻辑和不设置是一样的,也就是自增列会自动生成下一个序列编号。
在这里插入图片描述
2.自增列可以指定值。
在这里插入图片描述
3.给自增列确定的值,会直接插入给定的值。且当下一次输入数据没有给定自增列值时,自增列会按照当前的自增最大值生成序列编号。(这样可以避免自增列的值发生冲突)在这里插入图片描述
在这里插入图片描述
4.一个表只能有一个字段使用auto_increment约束,且该字段必须有唯一约束,以避免序号重复(即该字段为主键或主键的一部分)
在这里插入图片描述
5.⾃增列的字段类型只能为整数类型(TINYINT、SMALLINT、INT、BIGINT 等)。
在这里插入图片描述
6.auto_increment 必须配合 key ⼀起使⽤,这个 key 可以是 primary key,foreign key,unique,如果没有 key就会报错。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
7.auto_increment不能只和not null一块使用。
在这里插入图片描述

手动指定自增值:
(字段…)auto_increment=n;
在这里插入图片描述
手动修改自增值:
alter table table_name auto_increment=n;
在这里插入图片描述
注意事项:auto_increment 的值只能设置⽐⽬前存储的最⼤值⼤,否则设置不会⽣效.
在这里插入图片描述
在这里插入图片描述
7.默认约束
默认约束是给没有给列赋值时的默认值,语法:
字段 字段类型 [其他约束…] default …;
在这里插入图片描述
在这里插入图片描述
id:自增列
name:默认值为空’’
createtime:默认为now(),即当前数据插入的时间
在这里插入图片描述
扩充:now() 类似auto_increment的用法
可以手动设置值
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习MySQL约束时,你可以按照以下实验步骤进行: 1. 安装MySQL:首先,你需要安装MySQL数据库管理系统。可以从MySQL官方网站下载适合你操作系统的版本,并按照安装指南进行安装。 2. 创建数据库:使用MySQL客户端连接到数据库服务器,并创建一个新的数据库。可以使用以下命令创建数据库: ```sql CREATE DATABASE mydatabase; ``` 3. 创建表:在创建表之前,你需要定义表的结构和列的属性。使用CREATE TABLE语句来创建表,并在其中指定列的名称、数据类型和约束。以下是一个示例: ```sql CREATE TABLE students ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT, class_id INT, CONSTRAINT fk_class FOREIGN KEY (class_id) REFERENCES classes(id) ); ``` 上面的示例创建了一个名为students的表,其中包含id、name、age和class_id四个列。id列被定义为主键约束,name列被定义为非空约束,class_id列被定义为外键约束。 4. 插入数据:使用INSERT INTO语句将数据插入到表中。例如: ```sql INSERT INTO students (id, name, age, class_id) VALUES (1, 'Alice', 20, 1), (2, 'Bob', 21, 2), (3, 'Charlie', 19, 1); ``` 这将向students表中插入三行数据。 5. 测试约束:尝试插入违反约束条件的数据,例如插入重复的主键值或空值。观察MySQL数据库管理系统如何拒绝这些违规操作,并返回错误消息。 6. 修改约束:如果需要修改表的约束条件,可以使用ALTER TABLE语句。例如,你可以添加或删除约束、修改列的数据类型等。 通过按照以上步骤进行实验,你将能够理解和掌握MySQL约束的使用方法,并能够在实际项目中应用它们来确保数据库数据的完整性和一致性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值