it编程 > 数据库 > MsSqlserver

SQL中的键与约束

4人参与 2025-10-24 MsSqlserver

1. 约束的概念讲解

在sql这里所说的约束是一种规则,它不是一个具体的代码或者指令。然后我们创建了键,然后给不同的键添加了不同的规则,用来实现约束。

约束的存在主要解决三大问题,确保数据库数据可靠:

  1. 防止无效数据:比如禁止在 “年龄” 列插入负数或字符串。
  2. 避免重复数据:比如确保 “用户 id” 列不会出现两个相同的编号。
  3. 维护表间关联:比如确保 “订单表” 中的 “用户 id”,在 “用户表” 中一定存在。

2. 空属性

我们可以理解为在一些用户注册的时候要求必须填入的部分。

简单来说就是在创建的时候我们可以设置某一个字段不可以为空,然后用户在输入的时候为空了那就报错。

我们看,如果不给a1插入的话,就会报错,因为我们提前设置了要求a1不可以为空。这就是一种约束。

我们查看t1也可以发现在null这一栏a1写的是no。

3. 默认值default

这个我们可以理解为比如说在填入自己的信息是默认都是汉族,类似于这种。

default

我们看下面这张表格,如果我们设置了其中一个为default,那么哪怕我们不填入,它也会是1。如果我们往a1里面填入了,那么它就是我们填入的值。

4.列描述comment

列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或dba 来进行了解。简单来说就是注释。

我们在创建的时候这么写。

然后我们通过下面这行代码就可以查看到注释信息。

5. 主键

主键: primary key 用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个。

同时当一个字段被确认为主键的时候,那么就意味着它在插入的时候必须被填入,同时也不允许重复。

我们看下面这一张图片,当a1被设置为主键时候,key这一栏就显示为pri。如果我们插入两个一样的数给a1,那么就会直接报错。

当表创建好以后但是没有主键的时候,可以再次追加主键

alter table 表名 add primary key(字段列表)

删除主键

alter table 表名 drop primary key;

复合主键

在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段

作为主键,可以使用复合主键。在这里的报错条件就是多个字段全部重复。

我们看下面这一张图片,在id和course全部重复的时候,那么就会报错。

下面这行代码是设置复合主键的方式。

mysql> create table tt14( -> id int unsigned,
-> course char(10) comment '课程代码', 
-> score tinyint unsigned default 60 comment '成绩',
-> primary key(id, course) -- id和course为复合主键 -> ); 
query ok, 0 rows affected (0.01 sec)

6.自增长

auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值 +1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。

自增长的特点:

任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)

自增长字段必须是整数

一张表最多只能有一个自增长

auto_increment必须在主键或者唯一索引的地方使用。我们看下面这一张图片,如果设置成功的话,我们desc会在extra的地方显示一个auto_increment。

我们看下面的代码和图片,如果我们一开始a1给了1,那么接下来它就会在这一额基础上进行++,但是我们如果在后面给了100,那么接下来就是在100的基础上进行++。

mysql> insert into t5 (a1,a2) values (1,"a");
query ok, 1 row affected (0.00 sec)
mysql> insert into t5 (a2) values ("a");
query ok, 1 row affected (0.01 sec)
mysql> insert into t5 (a2) values ("a");
query ok, 1 row affected (0.00 sec)
mysql> insert into t5 (a2) values ("a");
query ok, 1 row affected (0.00 sec)
mysql> insert into t5 (a2) values ("a");
query ok, 1 row affected (0.00 sec)
mysql> insert into t5 (a1,a2)values (100,"b");
query ok, 1 row affected (0.00 sec)
mysql> insert into t5 (a2) values ("b");
query ok, 1 row affected (0.00 sec)
mysql> insert into t5 (a2) values ("b");
query ok, 1 row affected (0.00 sec)

7.唯一键

一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以

解决表中有多个字段需要唯一性约束的问题。

唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。

关于唯一键和主键的区别:

我们可以简单理解成,主键更多的是标识唯一性的。而唯一键更多的是保证在业务上,不要和别的信息 出现重复。

其实简单来说唯一键就是为了解决我们在一张表格中不止一个需要去重的地方而设计的。

我们看下面这张图片,它可以达到和主键一样的效果。

8. 外键

外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null

foreign key (字段名) references 主表(列)

这个比较抽象,我们借用下面这张图来进行说明,foreign key (class_id) references myclass(id)就给两者之间建立了关系。然后现在班级有10和20,那么现在在学生表中插入数据,同时给他的calss_id填入30,那么sql就会报错。

注意:foreign key (字段名) references 主表(列)     这行要写在创建从表时的时候。

我们看下面这张图片,被关联的主表里面的列要为主键。这样我们就建立好了外键约束。

到此这篇关于sql之键与约束的文章就介绍到这了,更多相关sql键与约束内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

SQL Server INSERT操作实战与脚本生成方法

10-24

SQL CTE (Common Table Expression) 高级用法与最佳实践

10-24

PostgreSQL实现跨数据库授权查询的详细步骤

10-23

使用SQLite实现CacheHelper的示例代码

10-23

SQL中的CASE WHEN用法常用场景分析

10-21

在Django中如何执行原生SQL查询详解

10-21

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论