软件测试学习笔记丨SQL常见约束

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/31939

一、简介

  • SQL约束是表中数据的限制条件,包括主键约束、唯一约束、外键约束、非空约束等。
  • 这些约束可以确保表中数据的完整性、唯一性和有效性。
    • 主键约束用于确保表中每行数据都有唯一标识符;
    • 唯一约束用于保证数据唯一性,外键约束用于建立表与表之间的引用关系;
    • 非空约束用于限制列中是否允许有空值;
    • 检查约束用于限制列中输入的数据类型和范围。

二、常见约束:

  • 主键约束:PRIMARY KEY
  • 非空约束:NOT NULL
  • 唯一约束:UNIQUE
  • 默认约束:DEFAULT
  • 外键约束:FOREIGN KEY

2.1 主键约束

  • 主键:一列(或一组列),其值能够唯一标识表中每一行;
  • 特点:不可重复,唯一,非空;
  • 语法:列名 字段类型 PRIMARY KEY

2.1.1 添加主键约束

-- 选择 hog_demo 数据库
USE hog_demo;
-- 创建一个带主键的表
CREATE TABLE emp1(
    -- 设置主键 唯一 非空
    eid INT PRIMARY KEY,
    ename VARCHAR(20),
    gender CHAR(1)
);
-- 查看表的详细信息
DESC emp1;

-- 给存在的表添加主键
CREATE TABLE emp2(
    eid INT ,
    ename VARCHAR(20),
    gender CHAR(1)
);

-- 通过 DDL 语句进行设置
ALTER TABLE emp2 ADD PRIMARY KEY(eid);
-- 查看表的详细信息
DESC emp2;

2.1.2 创建主键自增的表

  • 关键字:AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)
-- 创建主键自增的表
CREATE TABLE emp3(
    eid INT PRIMARY KEY AUTO_INCREMENT,
    ename VARCHAR(20),
    gender CHAR(1)
);

-- 查看表的详细数据
DESC emp3;

2.1.3 修改主键自增的起始值

  • 默认 AUTO_CREMENT 的起始值是1,如果希望修改起始值,请使用以下方式:
-- 创建主键自增的表,自定义自增起始值
CREATE TABLE emp4(
    eid INT PRIMARY KEY AUTO_INCREMENT,
    ename VARCHAR(20),
    gender CHAR(1)
)AUTO_INCREMENT=100;

-- 插入数据,观察主键的起始值
INSERT INTO emp4(ename,gender) VALUES('小李','男');
INSERT INTO emp4(ename,gender) VALUES('小赵','女'),
  • 注意:使用不同的删除数据的语法,对自增长的影响不同。
    • DELETE:只是删除表中所有数据,对自增没有影响,还会按照原来的顺序继续往下排;
    • TRUNCATE:是将整个表删除掉,然后重新创建一个新的表,所以主键自增会从1重新开始。

2.1.4 删除主键约束

  • 删除表中的主键:ALTER TABLE 表名 DROP PRIMARY KEY;
-- 使用 DDL 语句删除表中的主键
ALTER TABLE emp2 DROP PRIMARY KEY;

-- 查看表的详细数据
DESC emp2;

2.1.5 选择主键原则

什么类型的字段适合作为主键?

  • 通常针对业务去设计主键,往往每张表都设计一个主键;
  • 主键是给数据库和程序使用的,跟最终的客户无关,所以主键没有意义也没关系,主要能够保证不重复就可以。

2.2 非空约束

  • 非空约束特点:某一列不允许为空;
  • 语法:字段名 字段类型 NOT NULL
    • 非空约束 NOT NULL强制这个列不接受NULL值。如果不向字段添加值,就无法插入新纪录或者更新记录。

示例:

-- 选择 hog_demo 数据库
USE hog_demo;

-- 添加非空约束
CREATE TABLE emp5(
    eid INT PRIMARY KEY AUTO_INCREMENT,
    -- ename 字段限制不能为空
    ename VARCHAR(20) NOT NULL,
    gender CHAR(1)
);

-- 正常插入一条数据
INSERT INTO emp5(eid, ename,gender) VALUES(1,'小钱','女');

-- 插入一条ename为空的数据
INSERT INTO emp5(eid, ename,gender) VALUES(1,NULL,'男');

2.3 唯一约束

  • 唯一约束:在不是主键的特定列中,不会有重复的值;
  • 对NULL不做唯一判断,也就是说,唯一约束的列中可以有NULL值。
  • 语法:列名 字段类型 UNIQUE

示例:

-- 为 ename 字段添加唯一约束
CREATE TABLE emp6(
    eid INT PRIMARY KEY AUTO_INCREMENT,
    -- ename 字段限制不能重复
    ename VARCHAR(20) UNIQUE,
    gender CHAR(1)
);

2.3.1 主键约束与唯一约束的区别

特性主键约束(Primary Key Constraint)唯一约束(Unique Constraint)
唯一性
允许空值是(在许多数据库中多个NULL值被视为不相同)
每个表的数量一个多个
自动创建索引
标识行
用途唯一标识每一行记录确保特定列的值在表中是唯一的
是否可以由多个列组成可以(复合主键)可以(复合唯一约束)
  • 主键约束:唯一且不能为空;
  • 唯一约束:唯一但可以为空;
  • 一个表中只能有一个主键,但可以有多个唯一约束。

2.4 默认值

  • 默认值约束:用来指定某列的默认值;
  • 语法:字段名 字段类型 DEFAULT 默认值

2.4.1 字段指定默认值

-- 创建带有默认值的表
CREATE TABLE emp7(
    eid INT PRIMARY KEY AUTO_INCREMENT,
    ename VARCHAR(20),
    -- 为 gender 字段添加默认值
    gender CHAR(1) DEFAULT '女',
);

推荐学习

【霍格沃兹测试开发】7天软件测试快速入门带你从零基础/转行/小白/就业/测试用例设计实战

【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (上集)

【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (下集)

【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(上集)

【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(下集)

【霍格沃兹测试开发】精品课合集/ 自动化测试/ 性能测试/ 精准测试/ 测试左移/ 测试右移/ 人工智能测试

【霍格沃兹测试开发】腾讯/ 百度/ 阿里/ 字节测试专家技术沙龙分享合集/ 精准化测试/ 流量回放/Diff

【霍格沃兹测试开发】Pytest 用例结构/ 编写规范 / 免费分享

【霍格沃兹测试开发】JMeter 实时性能监控平台/ 数据分析展示系统Grafana/Docker 安装

【霍格沃兹测试开发】接口自动化测试的场景有哪些?为什么要做接口自动化测试?如何一键生成测试报告?

【霍格沃兹测试开发】面试技巧指导/ 测试开发能力评级/1V1 模拟面试实战/ 冲刺年薪百万!

【霍格沃兹测试开发】腾讯软件测试能力评级标准/ 要评级表格的联系我

【霍格沃兹测试开发】Pytest 与Allure2 一键生成测试报告/ 测试用例断言/ 数据驱动/ 参数化

【霍格沃兹测试开发】App 功能测试实战快速入门/adb 常用命令/adb 压力测试

【霍格沃兹测试开发】阿里/ 百度/ 腾讯/ 滴滴/ 字节/ 一线大厂面试真题讲解,卷完拿高薪Offer !

【霍格沃兹测试开发】App自动化测试零基础快速入门/Appium/自动化用例录制/参数配置

【霍格沃兹测试开发】如何用Postman 做接口测试,从入门到实战/ 接口抓包(最新最全教程)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值