SQL-约束


约束

SQL约束是用于限制数据库表中数据的完整性和一致性的规则。它们定义了对表中数据的操作所允许的条件和限制。约束可以应用于表的列或整个表。

1.引入库

约束的分类:

  1. 主键约束(Primary Key Constraint):用于标识表中的唯一记录。主键约束要求列中的值是唯一的且不为空。

  2. 外键约束(Foreign Key Constraint):用于建立表之间的关系。外键约束要求一个表的列的值必须是另一个表的主键值。

  3. 唯一约束(Unique Constraint):用于确保列中的值是唯一的。唯一约束要求列中的值不能重复。

  4. 非空约束(Not Null Constraint):用于确保列中的值不为空。非空约束要求列中的值不能为NULL。

  5. 检查约束(Check Constraint):用于定义列中值的范围或条件。检查约束要求列中的值必须满足指定的条件。

约束的作用:

  1. 数据完整性:约束可以确保表中的数据满足特定的条件和规则,防止无效或不一致的数据进入数据库。
  2. 数据一致性:约束可以确保表之间的关系是正确的,避免了数据冗余和不一致。
  3. 数据安全性:约束可以防止对表中数据的非法操作,保护数据的安全性。

约束的用法:

  1. 创建约束:在创建表时,可以使用CREATE TABLE语句来定义约束。例如,可以使用PRIMARY KEY关键字定义
  2. 主键约束,使用UNIQUE关键字定义唯一约束,使用FOREIGN KEY关键字定义外键约束等。
  3. 修改约束:可以使用ALTER TABLE语句来修改表的约束。例如,可以使用ADD CONSTRAINT关键字来添加新的约束,使用DROP CONSTRAINT关键字来删除约束等。
  4. 禁用约束:可以使用ALTER TABLE语句来禁用约束。例如,可以使用DISABLE CONSTRAINT关键字来禁用约束,以便在需要时可以绕过约束进行操作。
  5. 启用约束:可以使用ALTER TABLE语句来启用约束。例如,可以使用ENABLE CONSTRAINT关键字来启用约束,以便在禁用后重新启用约束。

总结起来,SQL约束是用于限制数据库表中数据的完整性和一致性的规则。它们可以应用于表的列或整个表,通过定义特定的条件和规则来确保数据的有效性和安全性。

1、主键约束

添加单列主键
方法1:
--在create table语句时,通过primary key
-- 在定义字段的同时指定主键,语法格式如下:
create table 表名 (
	...
	< 字段名 > < 数据类型 > primary key
	...
)

方式 1- 实现:
create table emp1(
	eid int primay key,
	name VARCHAR(20),
	deptId int,
	salary double
);

方法2-- 在定义字段之后再指定主键,语法格式如下:
create table 表名 (
	...
	[constraint < 约束名 >] primary key [ 字段名]
);

方式 2- 实现:
create table emp2(
	eid INT,
	name VARCHAR(20),
	deptId INT,
	salary double,
	constraint pk1 primary key(id)
);


添加多列主键(联合主键)
语法:
create table 表名(
	...
	primary key (字段1,字段2...,字段n);

实现:
create table emp3(
	name varchar(20),
	deptId int,
	salary double,
	primary key(name,deptId)
);


通过修改表结构添加主键
主键约束不仅可以在创建表的同时创建,也可以在修改表时添加。

语法;
create table 表名 (
	...
);
alter table < 表名 > add primary key (字段列表 );

实现:
-- 添加单列主键
create table emp4(
	eid int,
	name varchar(20),
	deptId int,
	salary double,
);
alter table emp4 add primary key ( eid);


删除主键约束
格式:
alter table <数据表名> drop primary key;

实现:
-- 删除单列主键
alter table emp1 drop primary key;
-- 删除联合主键
alter table emp5 drop primary key;

2.自增长约束

在 MySQL中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。
通过给字段添加 auto_increment 属性来实现主键自增长

语法:
字段名 数据类型 auto_increment

实现:
create table t_user1(
	id int primary key auto_increment,
	name varchar(20)
);


特点:

  • 默认情况下, auto_increment 的初始值是 1 ,每新增一条记录,字段值自动加 1 。
  • 一个表中只能有一个字段使用auto_increment 约束,且该字段必须有唯一索引,以避免序号重复(即为主键或 主键的一部分)。
  • auto_increment约束的字段必须具备 NOT NULL 属性。 auto_increment 约束的字段只能是整数类型(
    TINYINT 、SMALLINT 、 INT 、 BIGINT 等。
  • auto_increment 约束字段的最大值受该字段的数据类型约束,如果达到上限, auto_increment 就会失效。

指定自增字段初始值

-- 方式 1 ,创建表时指定
create table t_user2 (
	id int primary key auto_increment,
	name varchar(20)
)auto_increment=100;

--方式2,创建表之后指定
create table t_user3 (
	id int primary key auto_increment,
	name varchar(20)
);
alter table t_user2 auto_increment=100;


delete 和 truncate 在删除后自增列的变化:
delete:数据之后自动增长从断点开始
truncate:数据之后自动增长从默认起始值开始

3.非空约束

语法:
方式 1< 字段名 >< 数据类型 > not null;
方式 2alter table 表名 modify 字段 类型 not null;

添加非空约束
--方法1,创建表时指定
create table t_user6 (
	id int ,
	name varchar(20) not null,
	address varchar(20) not null
);

--方法2,之后指定
create table t_user7 (
	id int ,
	name varchar(20) , -- 指定非空约束
	address varchar(20) -- 指定非空约束
);
alter table t_user7 modify name varchar(20) not null;
alter table t_user7 modify address varchar(20) not null;

删除非空约束:
-- alter table 表名 modify 字段 类型
alter table t_user7 modify name varchar(20) ;
alter table t_user7 modify address varchar(20) ;

4.唯一约束

语法:
方式 1< 字段名 > < 数据类型 > unique
方式 2alter table 表名 add constraint 约束名 unique();

添加唯一约束 - 方式 1
-- 创建表时指定
create table t_user8 (
	id int ,
	name varchar(20) ,
	phone_number varchar(20) unique -- 指定唯一约束
);

添加唯一约束 - 方式 2
create table t_user9 (
	id int ,
	name varchar(20) ,
	phone_number varchar(20) -- 指定唯一约束
);
alter table t_user9 add constraint unique_ph unique(phone_number);

删除唯一约束
-- alter table < 表名 > drop index < 唯一约束名 >;
alter table t_user9 drop index unique_ph;

5.默认约束

语法
方式 1< 字段名 > < 数据类型 > default < 默认值 >;
方式 2: alter table 表名 modify 列名 类型 default 默认值 ;

添加默认约束 - 方式 1

create table t_user10 (
id int ,
name varchar(20) ,
address varchar(20) default ‘ 北京’ -- 指定默认约束
);

添加默认约束 - 方式 2
--alter table 表名 modify 列名 类型 default 默认值
create table t_user11 (
	id int ,
	name varchar(20) ,
	address varchar(20)
);
alter table t_user11 modify address varchar(20) default ‘ 北京’ ;

删除默认约束
-- alter table < 表名 > modify column < 字段名 > < 类型 > default null;
alter table t_user11 modify column address varchar(20) default null;

6.零填充约束

  • 插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的 0
  • zerofill 默认为 int(10)
  • 当使用 zerofill 时,默认会自动加 unsigned (无符号)属性,使用 unsigned 属性后,数值范围 是原值的 2 倍,例如,有符号为 -128~+127 ,无符号为 0~256 。
create table t_user12 (
	id int zerofill , -- 零填充约束
	name varchar(20)
);

删除
alter table t_user12 modify id int;

相关推荐

  1. <span style='color:red;'>SQL</span><span style='color:red;'>约束</span>

    SQL约束

    2024-07-17 08:44:03      32 阅读
  2. SQL约束

    2024-07-17 08:44:03       26 阅读
  3. SQL-约束

    2024-07-17 08:44:03       24 阅读
  4. 2. SQL - 约束

    2024-07-17 08:44:03       52 阅读
  5. SQL常见约束及外键约束删除更新行为

    2024-07-17 08:44:03       31 阅读
  6. SQL基础 | NOT NULL 约束介绍

    2024-07-17 08:44:03       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 08:44:03       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 08:44:03       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 08:44:03       62 阅读
  4. Python语言-面向对象

    2024-07-17 08:44:03       72 阅读

热门阅读

  1. 【DevOps文化与实践】DevOps的基本原则和实施策略

    2024-07-17 08:44:03       21 阅读
  2. 基于形状匹配原始版放出来(给有用的人参考2)

    2024-07-17 08:44:03       22 阅读
  3. 华为应用市场静默安装

    2024-07-17 08:44:03       20 阅读
  4. 使用Micronaut进行无服务器应用开发

    2024-07-17 08:44:03       26 阅读
  5. GCC链接静态库和动态库详解

    2024-07-17 08:44:03       26 阅读
  6. 数据库SQL Server时间函数Datetime

    2024-07-17 08:44:03       27 阅读
  7. Redis⑥ —— 缓存设计

    2024-07-17 08:44:03       22 阅读