约束类型
1.主键约束
语法: 字段 数据类型 primary key
2.外键约束
语法: foreign key (字段) references 引用的表(引用的字段)
3.检查约束
语法: 字段 数据类型 check (约束内容)
4.默认约束
语法: 字段 数据类型 default ('默认值')
5.非空约束
语法: 字段 数据类型 not null
6.唯一约束
语法: 字段 数据类型 unique
创建表的时候同步创建约束
create database text2
use text2
create table student_detail(
id varchar(20)primary key,
)
create table student(
id varchar(30) primary key,-- 主键约束
student_detail_id varchar(20) ,
foreign key (student_detail_id) references student_detail(id), -- 外键约束
age int check ( age >= 1 and age <= 100),
sex varchar(10) check( sex = '男' or sex = '女'), -- 检查约束
address varchar(20) default ('上海'), -- 默认约束
username varchar(30)not null,--非空约束
id_card varchar(30) unique, -- 唯一约束
)
唯一约束与主键约束区别
主键约束:(一个) 唯一且非空,
唯一约束:(可以有多个)唯一,允许有一个空值
注意:创建表以后再去创建约束
创建表后添加约束
-- 添加检查约束
语法:alter table 表名称 add constraint 约束名称 具体的约束内容
eg: alter table Orders add constraint ck_CustomerID check(CustomerID > 10)
-- 添加默认约束
语法:alter table 表名称 add constraint 约束名称 default '默认的内容' for 字段名称
eg: alter table Orders add constraint df_OrderDate default '2024-12-12' for OrderDate
删除约束
语法:alter table 表名称 drop constraint 约束名称
eg: alter table Orders drop constraint ck_CustomerID
作业练习
题目1
在SQL Server中,假设有一个名为Students的表,包含以下字段:
StudentID (int): 学生的唯一标识符
FirstName (nvarchar(50)): 学生的名字
LastName (nvarchar(50)): 学生的姓氏
Age (int): 学生的年龄
Email (nvarchar(100)): 学生的电子邮件地址
DepartmentID (int): 学生所在部门的ID
请根据以下要求,为Students表创建适当的约束:
确保StudentID字段是主键。
确保FirstName和LastName字段都不允许为空,并且长度不超过50个字符。
确保Age字段的值在18到30之间(包含18和30)。
确保Email字段的值是唯一的,并且符合电子邮件地址的格式(例如:user@example.com)。
为DepartmentID字段创建一个外键约束,它引用另一个名为Departments的表的DepartmentID字段。
create database test2
use test2
create table Departments(
DepartmentID int primary key
)
create table Students(
StudentID int primary key,
FirstName nvarchar(50) not null,
LastName nvarchar(50) not null,
Age int check( Age between 18 and 30),
Email nvarchar(100) unique, check( Email like '%@%.%'),
DepartmentID int foreign key references Departments(DepartmentID)
)
题目2:
在SQL Server中,假设有一个名为Orders的表,用于记录订单信息。该表包含以下字段:
OrderID (int): 订单的唯一标识符
CustomerID (int): 客户的唯一标识符
OrderDate (date): 订单日期
TotalAmount (decimal(10, 2)): 订单总金额
Status (nvarchar(50)): 订单状态(例如:'Pending', 'Shipped', 'Delivered')
请根据以下要求,为Orders表创建适当的约束:
确保OrderID字段是主键,并且自动递增。
确保CustomerID字段引用另一个名为Customers的表的CustomerID字段,作为外键约束。
确保OrderDate字段的值是有效的日期,并且不允许为空。
确保TotalAmount字段的值大于0,且最多保留两位小数。
为Status字段创建一个检查约束,确保订单状态只能是'Pending', 'Shipped', 或 'Delivered'其中之一。
create table Orders(
OrderID int primary key identity(101,3),
CustomerID int,
OrderDate date not null,
TotalAmount decimal(10, 2) check(TotalAmount>0),
Status nvarchar(50) check(Status IN ('Pending','Shipped','Delivered'))
)
补充decimal和identity用法
-- decimal(最大保存多少位,保留几位小数) 小数类型
-- identity(从几开始增加,每次增加几)
标签:int,数据库,笔记,约束,字段,key,table,nvarchar,实验课 From: https://blog.csdn.net/wangwanqin12/article/details/136853040