Constraints

简介: 【11月更文挑战第14天】

SQL 约束(Constraints)是用于确保数据库中数据准确性和可靠性的一种机制。它们定义了表中数据的规则和限制,帮助维护数据的完整性。以下是一些常用的 SQL 约束类型及其详细说明:

1. PRIMARY KEY(主键)

  • 唯一标识表中的每一行。
  • 不能包含 NULL 值。
  • 一个表中只能有一个主键。

2. FOREIGN KEY(外键)

  • 用于建立两个表之间的关系。
  • 外键列的值必须在关联表的主键中存在,或者为 NULL。

3. UNIQUE(唯一)

  • 保证列中的所有值都是不同的。
  • 可以有 NULL 值。

4. NOT NULL(非空)

  • 确保列不能包含 NULL 值。

5. CHECK(检查)

  • 用于确保列中的值满足特定的条件。

6. DEFAULT(默认值)

  • 指定列在没有提供值时的默认值。

SQL CREATE TABLE + CONSTRAINT 语法

以下是创建表时使用约束的语法:

CREATE TABLE table_name
(
    column_name1 data_type(size) CONSTRAINT constraint_name1 constraint_type,
    column_name2 data_type(size) CONSTRAINT constraint_name2 constraint_type,
    column_name3 data_type(size) CONSTRAINT constraint_name3 constraint_type,
    ...
);
  • table_name:新表的名称。
  • column_name:列的名称。
  • data_type:数据类型。
  • size:数据类型的大小(对于某些数据类型是必需的)。
  • CONSTRAINT:定义约束的关键字。
  • constraint_name:约束的名称。
  • constraint_type:约束的类型,如 PRIMARY KEY、FOREIGN KEY 等。

代码示例

假设我们正在创建一个名为 employees 的表,其中包含员工的 ID、姓名和部门 ID。我们将为这个表添加一些约束:

CREATE TABLE employees
(
    employee_id INT CONSTRAINT pk_employee PRIMARY KEY,
    first_name VARCHAR(50) CONSTRAINT nn_first_name NOT NULL,
    last_name VARCHAR(50) CONSTRAINT nn_last_name NOT NULL,
    department_id INT CONSTRAINT fk_department FOREIGN KEY REFERENCES departments department_id
);

在这个例子中:

  • employee_id 是主键,使用 PRIMARY KEY 约束。
  • first_namelast_name 都不能包含 NULL 值,使用 NOT NULL 约束。
  • department_id 是外键,引用了 departments 表中的 department_id,使用 FOREIGN KEY 约束。
目录
相关文章
|
3月前
|
JSON Java 关系型数据库
Optimizer Use of Generated Column Indexes
MySQL支持对生成的列进行索引并利用这些索引优化查询执行计划。即使查询未直接引用生成列,只要表达式与生成列定义匹配,优化器也会自动使用索引。但表达式需与生成列定义完全一致且结果类型相同。此功能适用于特定运算符如=、<、BETWEEN等。生成列定义需含函数调用或指定运算符。对于JSON值的比较,使用`JSON_UNQUOTE()`以确保正确匹配。若优化器未选择合适索引,可使用索引提示调整。
172 82
|
3月前
|
关系型数据库 MySQL 索引
Multiple-Column Indexes
MySQL 支持创建复合索引(多列索引),最多由 16 列组成,适用于查询中所有或部分列的查找。复合索引如同排序数组,通过连接索引列值创建。正确排列的单个复合索引能加速多种查询。若索引列非最左侧前缀,MySQL 无法使用索引查找。此外,还可引入基于其他列信息“哈希”的列作为替代方案,提高查询效率。
|
3月前
|
存储 关系型数据库 MySQL
Column Indexes
常见的索引类型通过复制列值至高效数据结构(如B树),实现快速查找。B树助力WHERE子句中=、>、≤、BETWEEN等运算符对应值的检索。每表至少支持16个索引,总长不少于256字节,具体限制依存储引擎而定。字符串列索引可指定前N字符,减少索引文件大小;BLOB或TEXT列索引需指定前缀长度。全文索引用于全文搜索,适用于InnoDB和MyISAM引擎的CHAR、VARCHAR、TEXT列;空间索引则针对空间数据类型,MyISAM和InnoDB采用R树索引。MEMORY引擎默认使用HASH索引,也支持BTREE索引。
RuntimeError: a view of a leaf Variable that requires grad is being used in an in-place operation.
RuntimeError: a view of a leaf Variable that requires grad is being used in an in-place operation.
2541 0
|
关系型数据库 MySQL 数据库
View ‘information_schema.SCHEMATA‘ references invalid table(s) or column(s) or function(s) or define
View ‘information_schema.SCHEMATA‘ references invalid table(s) or column(s) or function(s) or define
250 0
|
数据库
Incorrect table definition; there can be only one auto column and it must be defined as a key
Incorrect table definition; there can be only one auto column and it must be defined as a key
185 0
Incorrect table definition; there can be only one auto column and it must be defined as a key
1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause
1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause
210 0
1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause
杭电oj-1050 Moving Tables
杭电oj-1050 Moving Tables
122 0
杭电oj-1050 Moving Tables
|
Oracle 关系型数据库 OLAP
[20170421]impdp SKIP_CONSTRAINT_ERRORS
[20170421]impdp导入问题data_options=SKIP_CONSTRAINT_ERRORS.txt --//一般年前我们经常要做一些导入导出操作,经常会遇到主键冲突问题.
1482 0
javax.validation.constraints注解
javax.validation.constraints注解
249 0

热门文章

最新文章