1. 表约束分类
-
主键约束:保证数据的完整性,唯一性,原子性(Id:编号)
-
外键约束
分类表数据:
Id 分类名称 1 衣服 2 手机 3 电器 商品表数据:
商品编号 商品名称 价格 所属分类(外键) 1 李宁牌运动服 300 1 2 华为7500手机 3600 2 3 国美电饭堡 200 3 4 国美油烟机 2500 5(不合理) -
唯一约束
-
检查约束
-
默认值约束
-
非空约束
文章来源:https://www.toymoban.com/news/detail-746923.html
2. 主键约束
主键只能有一个,但是可以由1-n个字段组成,多个字段组成的主键叫复合主键
-- 在表中添加主键约束 create database 第四单元; -- 简写的创建数据库的语法,数据库的相关参数都是默认值 -- 切换数据库 use 第四单元; -- 第一种写法 create table Category ( -- 列级约束 Id int primary key identity, -- 商品分类编号, primary key 是主键约束 CategoryName varchar(20) ) -- 第二种写法 create table Category2 ( Id int identity, CategoryName varchar(20), --primary key(Id) -- 表级约束 constraint pk_category2_id primary key(id) ) -- 第三种写法,假设表已经创建完毕,突然发现,主键忘记创建了 create table Category3 ( Id int identity, -- 商品分类编号, primary key 是主键约束 CategoryName varchar(20) ) -- 表级约束 alter table Category3 add constraint pk_category3_id primary key(Id)
表级约束,列级约束
列约束是对某一个特定列的约束,包含在列定义中,直接跟在该列的其他定义之后,用空格分隔,不必指定列名; 表约束与列定义相互独立,不包括在列定义中,通常用于对多个列一起进行约束,与列定义用’,’分隔,定义表约束时必须指出要约束的那些列的名称。
区别
如果完整性约束涉及到该表的多个属性列,必须定义在表级上,否则既可以定义在列级也可以定义在表级。
简而言之: 列级约束:列级约束是行定义的一部分,只能应用于一列上。 表级约束:表级约束是独立于列的定义,可以应用在一个表中的多列上。
3. 复合主键
create table score ( studentId int, courseId int, score int, addTime datetime, primary key(studentId,courseId) -- 复合主键 )
学生编号 | 课程编号 | 成绩 | 添加时间 |
---|---|---|---|
1 | 1 | 80 | 2022-04-02 |
1 | 2 | 78 | 2022-04-02 |
2 | 1 | 92 | 2022-04-02 |
2. 外键约束
-- 商品表 create table Product ( Id int primary key identity, -- 商品编号 ProductName varchar(20), Price decimal(8,2), -- 8,2 指的是,加上小数最多可以有8位,和2位小数 -- 商品分类,这里的int 必须与Category商品表中的Id的类型保持一致 -- foreign key :外键 -- references:参照,引用,指向 CategoryId int foreign key references Category3(Id) )
-- 表级 外键 create table Product2 ( Id int primary key identity, -- 商品编号 ProductName varchar(20), Price decimal(8,2), -- 8,2 指的是,加上小数最多可以有8位,和2位小数 -- 商品分类,这里的int 必须与Category商品表中的Id的类型保持一致 -- foreign key :外键 -- references:参照,引用,指向 CategoryId int, constraint fk_CategoryId foreign key(CategoryId) references Category3(Id) );
-- 第三种:在创建表的时候,添加了外键,但是没有加外键约束
create table Product3 ( Id int primary key identity, -- 商品编号 ProductName varchar(20), Price decimal(8,2), -- 8,2 指的是,加上小数最多可以有8位,和2位小数 -- 商品分类,这里的int 必须与Category商品表中的Id的类型保持一致 -- foreign key :外键 -- references:参照,引用,指向 CategoryId int ); alter table Product3 add constraint fk_CategoryId foreign key(CategoryId) references Category3(Id)
3. 唯一约束
-- 表级唯一约束 create Table UserInfo2 ( Id int primary key identity, NickName varchar(20) , -- 用户姓名 Email varchar(20), constraint uq_NickName unique(NickName) -- NickName 添加了一个唯一约束 ); -- 也可以这样 create Table UserInfo2 ( Id int primary key identity, NickName varchar(20) unique(NickName), Email varchar(20) );
Id | 用户名 | 邮箱 |
---|---|---|
1 | zhangsan | 1310734441@qq.com |
2 | lisi | 252618779@163.com |
3 | lisi(失败) | lisi@outlook.com |
4. 检查约束
Check约束通过逻辑表达式来判断数据的有效性,用来限制输入一列或多列的值的范围
Create Table UserInfo4 ( Id int primary key identity, NickName varchar(20), Email varchar(20), Sex varchar(10) check(Sex in('男','女')), --性别:检查性别只能输入 ,男或者女 Age tinyint check(Age>=18), -- 年龄:检查年龄是否大于等于18 -- len(Pwd):获取密码的实际长度 Pwd varchar(50) check(len(Pwd)>=4 and len(Pwd)<=16), -- 密码:密码的实际长度必须是4-16位 )
请判断如下哪些数据是非法的(可以在评论区或者弹幕中告诉我答案)?
id | 姓名 | 邮箱 | 性别 | 年龄 | 密码 |
---|---|---|---|---|---|
1 | 张三 | 111@qq.com | 男 | 18 | root |
2 | 李四 | 222@qq.com | 保密 | 20 | 123456 |
3 | 叶星辰 | 123@163.com | 女 | 19 | 123 |
4 | 赵日天 | 666@yahu.com | 男 | 17 | 12345678 |
5. 默认值约束
create Table UserInfo6 ( Id int primary key identity, NickName varchar(20) default '张三', -- 默认值为张三 Email varchar(20), -- 可以为null Age tinyint default '10' -- 添加默认值约束 )
6. 非空约束
Create Table UserInfo5 ( Id int primary key identity, NickName varchar(20) not null, -- 非空约束 Email varchar(20), -- 可以为null )
7. 作业
一. 创建数据库DBStudents
二. 创建表student表
(stu_id 主键 不为空
stu_name 不为空
stu_tel;
stu_sex 检查约束男,女,默认男;
stu_address 默认 北京;
stu_age 介于16-40岁之间
三. 案例完成思路及要求:
-
使用sql命令语句创建数据库(10分)
-
使用sql命令语句创建数据表和创建正确约束(50分)
-
使用sql命令语句修改表结构删除表中stu_age列(10分)
-
使用sql命令语句删除表(10分)
-
使用sql命令语句删除数据库(10分)
-
注释 (10分)
配套视频链接:SQLServer 入门基础 - 网易云课堂 (163.com)文章来源地址https://www.toymoban.com/news/detail-746923.html
到了这里,关于第四单元 表约束的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!