欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库(笔记)——定义数据表约束和修改数据表

程序员文章站 2022-05-30 18:18:05
...

在这里只使用SQL语句来进行

数据表约束的定义

约束的类型

  1. NULL/NOT NULL约束
    分别表示可以为空和不可以为空,语句如下
Create Table Stu
(
	stu_no nchar(11) Constraint s_con NOT NULL
)
[Constraint + 约束名] + 约束类型,其中约束名自己定义,中括号部分可以省略(也就是可以不对约束进行命名,系统会自定义)
  1. UNIQUE约束
    UNIQUE唯一,用于表示一列或者多个列的组合上取值唯一,不能用相同的值出现

注意:唯一约束下,可以有空值存在,但最多只能有一个

Create Table Stu
(	-- 单个属性列的约束
	stu_no nchar(11) Constraint s_uni UNIQUE
)
Create Table Stu
(	--多个属性列的约束
	stu_na nchar(8),
	stu_sex nchar(2),
	Constraint stu_uni UNIQUE(stu_na, stu_sex)
)
这是多个属性列一起,添加的唯一约束,意思是不能存在姓名、学号都相同的情况
  1. PRIMARY KEY约束
    主键约束,用于规定基本表的主键的,如下
Create Table Stu
(
	stu_no nchar(11) PRIMARY KEY
)
UNIQUEPRIMARY KEY不能共存

一个基本表中只能有一个主键约束,当存在多个属性列为主键时,需要通过表约束定义

  • 表约束实际上就是多个属性列组合在一定定义的约束,就如前面的Constraint stu_uni UNIQUE(stu_na, stu_sex)

那么多个属性列作为主键的定义如下

Create Table SC	--选课表
(		
	stu_no nchar(11) NOT NULL,	--学号
	c_no nchar(5) NOT NULL,		--课程号
	Score int,					--成绩
	Constraint sc_prim PRIMARY KEY(stu_no,c_no)
)
  1. FOREIGN KEY约束
    外键约束,定义外键,如下
    (在此之前先要知道,stu_no和c_no分别是学生表Stu,课程表C的主键,
    而这两个一起又是SC选课表的主键)
Create Table SC	--选课表
(		
	stu_no nchar(11) NOT NULL Constraint stu_fore FOREIGN KEY Stu(stu_no)	--学号
	c_no nchar(5) NOT NULL Constraint stu_fore FOREIGN KEY C(c_no)	--课程号
	Score int,					--成绩
	Constraint sc_prim PRIMARY KEY(stu_no,c_no)
)
添加外键的语法:FOREIGN KEY 源表名(列名)
  1. CHECK约束
    该约束用于检测,录入\更新数据库的数据是否符合这一约束的规定,如下
Create Table Stu
(
	stu_sex nchar(2) Default '男' Constraint stu_she Check(stu_sex = '男' or stu_sex = '女')
)
它表示,性别只能取男或女
//Defaule '男'表示给stu_sex设定的默认值为男,当没有填写这项数据,就会默认为男
//Default不是约束

修改数据表

  1. 添加属性列
Alter Table Stu
Add
	stu_age int
添加新的属性的语法与创建时几乎相同,只是外部变为了Alter(修改的意思)

新添加的属性列需要注意

  • 新加入的属性列将全部填为空值NULL,因此不能对其定义NOT NULL和UNIQUE
  1. 添加约束
Alter Table Stu
Add
Constraint stu_ch Check(stu_age > 0 and stu_age < 100)
//对之前新加的属性列添加约束
  1. 修改字符长度
    原则是只能改长,不能改短
Alter Table Stu
Alter Column
stu_na nchar(12)
//之前我对stu_na定义的长度都为8,这里改为了12
  1. 修改约束
  • 可以直接修改NULL和NOT NULL,但存在NULL的属性列不能改为NOT NULL
  • 其它约束要进行修改,必须先删除,然后在添加
//删除约束
Alter Table Stu
Drop Constraint stu_ch	//Drop Constraint 约束名
//这里删除了前面给stu_age定义约束
//因此能够删除的约束,需要知道对应的约束名

总结

定义约束是比较简单的,也不容易出错
而在添加,修改这一块就很容易出错,很容易忘记一些规定,在修改的时候就报错