JavaWeb SQL约束、外键约束、多表关系、多表查询以及子查询

一、SQL约束

1、主键约束

PRIMARY KEY 约束,用于标识数据库表中的每条记录是唯一不重复的。

开发中,每个表有且只有一个主键

主键特点:唯一且不能为空

添加主键约束的三种方式
方式一:创建表时,在字段描述处,声明指定字段为主键:
CREATE TABLE p1
(
id int primary key,
name varchar(200),
idCard varchar(50)
)

方式二:创建表时,在constraint约束区域,声明指定字段为主键:
格式:[constraint 名称] primary key (字段列表)
关键字constraint可以省略,如果需要为主键命名,constraint不能省略,主键名称一般没用。

联合主键:多个字段共同作为主键,单个字段的值可以重复,联合起来的值不能重复

CREATE TABLE p2
(
id int,
name varchar(200),
idCard varchar(50),
Primary key(字段列表)
)

方式三:创建表之后,通过修改表结构,声明指定字段为主键:
CREATE TABLE p3
(
id int,
name varchar(200),
idCard varchar(50)
)
#因为一般主键都是提前确定好的,都是跟随表一起创建
ALTER TABLE p3 ADD CONSTRAINT pk_p4 PRIMARY KEY (id);

删除主键约束
如需撤销 PRIMARY KEY 约束,请使用下面的 SQL:
ALTER TABLE 表名 DROP PRIMARY KEY;
注:主键约束一旦确定,开发中不会轻易删除。

2、非空约束

NOT NULL 约束强制列不接受 NULL 值。
NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
下面的 SQL 语句强制"Name" 列不接受 NULL 值:

CREATE TABLE p4
(
id int,
name varchar(200) not null,
idCard varchar(50)
)

3、唯一约束

UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束都可以标识当前字段唯一,不重复。
注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

唯一约束,会忽略null值

主键约束和唯一约束的区别:
1、主键是唯一且不能为空,唯一约束是唯一可以为空
2、一个表最多只能有一个主键,可以多个唯一约束

添加唯一约束
与主键添加方式相同,共有3种,
方式1:创建表时,在字段描述处,声明唯一:
CREATE TABLE p5
(
id int,
name varchar(200),
idCard varchar(50) unique
)
方式2:创建表时,在约束区域,声明唯一:
CREATE TABLE p6
(
id int,
name varchar(200),
idCard varchar(50),
Unique(idCard)
)

方式3:创建表后,修改表结构,声明字段唯一:(仅需了解)
ALTER TABLE Persons ADD [CONSTRAINT 名称] UNIQUE (字段)

删除唯一约束

如需撤销 UNIQUE 约束,请使用下面的 SQL:
ALTER TABLE p6 DROP INDEX 名称
如果添加唯一约束时,没有设置约束名称,默认是当前字段的字段名。
一般不会开发中一旦设置唯一约束,不会轻易删除

4、自动增长

我们通常希望在每次插入新记录时,数据库自动生成字段的值。
我们可以在表中使用 auto_increment(自动增长列)关键字,自动增长列类型必须是整形,自动增长列必须为键(可以是唯一约束,可以是主键约束)。

计数器:从1开始增
下列 SQL 语句把 “Persons” 表中的 “P_Id” 列定义为 auto_increment 主键
CREATE TABLE p7
(
id int PRIMARY KEY auto_increment,
name varchar(200),
idCard varchar(50)
)

#自动增长策略
#算出主键的最大值,再插入最大值+1

向persons添加数据时,可以不为P_Id字段设置值,也可以设置成null,数据库将自动维护主键值:

面试:delete和truncate的区别
Delete 不会清空自动增长的值
Truncate 清空自动增长的值

二、外键约束

外键作用:进行多表数据关联
(逻辑外键(一般用到的) 外键(受数据库的保护))
主表:数据提供方(一方的表)
从表:数据引用方(多方的表)
SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE;
查看所有的主键,外键信息;
外键特点
从表外键指向主表主键
从表外键的数据类型和长度,必须和主表主键数据类型和长度 一致

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、多表关系

1、一对多

在这里插入图片描述

2、多对多

在这里插入图片描述

3、一对一

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、多表查询

什么是多表查询
在这里插入图片描述
多表查询的分类
在这里插入图片描述

1、笛卡尔积现象

在这里插入图片描述
如何清除笛卡尔积
在这里插入图片描述
内连接
在这里插入图片描述
外连接
在这里插入图片描述

2、子查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值