SQL列级约束与表级约束思考记录(附SQL语句说明)

2024-04-24 11:28

本文主要是介绍SQL列级约束与表级约束思考记录(附SQL语句说明),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SQL列级约束与表级约束思考记录(附SQL语句说明)

以MySQL中的表级约束与列级约束举例,虽然实现的功能相同,都是为了保证数据的完整性,但它们在定义位置、适用范围、是否允许命名以及在某些特定约束类型的使用上有所区别。

下面通过代码示例来具体说明这些区别:

1.列级约束

CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,FirstName VARCHAR(50) NOT NULL,LastName VARCHAR(50) NOT NULL,Salary DECIMAL(10, 2) CHECK (Salary > 0),DepartmentID INT UNIQUE,HireDate DATE DEFAULT GETDATE(),ManagerID INT REFERENCES Managers(EmployeeID)
);

如上SQL实例中:

  • EmployeeID 定义为主键约束(PRIMARY KEY),这是列级约束。
  • FirstNameLastName 使用了非空约束(NOT NULL),也是列级约束。
  • Salary 使用了检查约束(CHECK),确保薪水大于零,为列级约束。
  • DepartmentID 定义了唯一性约束(UNIQUE),属于列级约束。
  • HireDate 使用了默认约束(DEFAULT),为当前日期,是列级约束。
  • ManagerID 建立了外键约束(REFERENCES),指向另一个表 ManagersEmployeeID 列,同样是列级约束。

上述所有这些约束都在对应的列定义内部直接指定,没有单独命名,特别强调:一张表主键约束只允许添加一个,且不重复出现

个人经验分享,主键设定建议使用:int、bigint、char等类型,不建议使用:varchar做主键,实际开发中主键一般为数字,定长呈现。

2.表级约束

CREATE TABLE Departments (DepartmentID INT,DepartmentName VARCHAR(50) NOT NULL,Location VARCHAR(50),ManagerID INT,Budget DECIMAL(10, 2),CONSTRAINT PK_Departments PRIMARY KEY (DepartmentID),CONSTRAINT UC_DepartmentName UNIQUE (DepartmentName),CONSTRAINT CK_BudgetPositive CHECK (Budget >= 0),CONSTRAINT FK_Manager FOREIGN KEY (ManagerID) REFERENCES Employees(EmployeeID),CONSTRAINT DF_Location DEFAULT 'Headquarters' FOR Location
);

如上SQL实例中:

  • PK_Departments 是主键约束,尽管它仍作用于单个列 DepartmentID,但在这里作为表级约束声明,明确指定了约束名称。
  • UC_DepartmentName 是唯一性约束,作用于 DepartmentName 列,同样作为表级约束并命名。
  • CK_BudgetPositive 是检查约束,确保 Budget 列的值大于等于零,是表级约束并命名。
  • FK_Manager 是外键约束,关联 ManagerID 列与 Employees 表的 EmployeeID 列,作为表级约束并命名。
  • DF_Location 是默认约束,为 Location 列设置默认值 'Headquarters',这个约束也是表级约束并命名。

单个主键可能出现重复,但联合主键中只要出现一个主键不重复则表级约束(复合主键)即可成立。

以上展示了表级约束的特点:

  • 约束定义在所有列定义之后,与列定义同级,并用逗号分隔。
  • 使用 CONSTRAINT 关键字为约束命名(主键约束除外,其使用 PRIMARY KEY 直接定义)。
  • 表级约束可以同时约束多个列,如复合主键或复合唯一键等(此处未展示复合键的例子)。

总结来说,列级约束是在列定义内部直接指定,通常不命名;而表级约束在所有列定义之后单独声明,可以命名,且在某些情况下更适合用来约束多个列。

两种方式都能实现数据完整性约束,实际使用时可以根据需要选择合适的方式,开发中个人建议使用列级约束

相关检索内容附上:

MySQL表级约束和列级约束-博客园

关于数据库的列级约束以表级约束的区别-CSDN技术社区

关于数据库的列级约束以表级约束的区别-CSDN技术社区

数据库SQL语言中列级约束和表级约束-CSDN技术社区

Oracle表级约束和列级约束-Oracle-小翔博客

了解更多知识请戳下:

@Author:懒羊羊

这篇关于SQL列级约束与表级约束思考记录(附SQL语句说明)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/931628

相关文章

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进

Python3.6连接MySQL的详细步骤

《Python3.6连接MySQL的详细步骤》在现代Web开发和数据处理中,Python与数据库的交互是必不可少的一部分,MySQL作为最流行的开源关系型数据库管理系统之一,与Python的结合可以实... 目录环境准备安装python 3.6安装mysql安装pymysql库连接到MySQL建立连接执行S

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio