第三章:数据表管理(4):修改表

第三章包含以下内容:

1.数据表简介

2.创建表

3.临时表,删除表,编写表脚本

4.修改表

前言

非科班自学SQLSERVER和C#编程两年。该系列文章中涉及的知识点是在工作中需要用到的一些基础知识。文章比较适合初识数据库的学生或自学数据库的成人,文章是以SSMS作为例子。如果有认知错误的地方请大家指正。

准备步骤

--创建一个表名为Customer(客户表),拥有5个列的表,列名分别为CustomerID,CustomerName,TelNumber,Birth,Address          

create table Customer
(
CustomerID   bigint  not null ,
CustomerName varchar(20) unique not null , --not null 代表非空约束
TelNumber    varchar(20) , 
Birth        datetime  ,
Address      varchar(50) 
)
--创建一个表名为CustomerOrder的客户订单表
create table CustomerOrder
(
CustomerID   bigint  not null  ,
product      varchar(20) ,
price        numeric(10,2) 
)
--往Customer插入数据
insert into Customer(CustomerID,CustomerName,TelNumber,Birth,Address) values(1,'Miss汪','123456','1995.01.01','上海XXX区XXX路')
insert into Customer(CustomerID,CustomerName,TelNumber,Birth,Address) values(2,'Mr.黄','1234567','1995.01.01 00:00:01','上海XXX区XXX路')

修改原有的表结构通常是因为当前表已经不能满足我们的业务需求了才会去进行修改,不管什么修改表的语句开头都是 alter table 表名

新增字段

语法:

alter table 表名
ADD 字段名 类型名 约束(可加可不加)

以Customer为例,我们现在希望为这张表新增一个字段isVIP,用于判断这个客户是否是会员。

--如果这边你不加not null 和 default 1,当这张表是有数据时,你查询时会发现新增的isVIP为null(数值未知的意思),
--再有数据的情况下单加default 1 也没用,个人感觉是因为他可以默认为 1它也可以null,所以数据库优先选择了null吧。
--再有数据的情况下单加 not null 也没用,必须给个默认值。
alter table Customer
ADD isVIP char(1) not null default 1  --0 是会员 ,1 不是会员,默认不是会员

以Customer为例,我们现在希望为这张表新增一个字段sex,用于判断这个客户是否是男是女。

alter table Customer
ADD sex char(4) not null default '未知'  --一个汉字占两个长度

添加/删除约束

再添加约束之前一定要保证表中的数据是能在约束范围之内的。比如你表中电话号码字段是有多条重复记录的,这个时候你再去加唯一性约束肯定是加不上的。

语法1——添加主键约束:

alter table 表名
add constraint 约束名 primary key(主键名)

以Customer为例,我们现在希望为这张表添加一个主键来确定唯一的用户(表数据很多时请不要后期加主键,后期讲到索引时会解释)。

alter table Customer
add constraint PK_CustomerID primary key(CustomerID) --再添加主键之前,该字段必须拥有not null。

语法2——添加唯一性约束:

alter table 表名
add constraint 约束名 primary key(唯一键名)

以Customer为例,我们现在希望为这张表TelNumber新增一个唯一约束用于保证电话号码不会重复。

alter table Customer
add constraint UK_TelNumber unique(TelNumber) 

语法3——添加check约束:

alter table 表名
add constraint CK_约束名
check(约束的条件)

以Customer为例,我们希望客户的性别只能是’男’,‘女’,'未知’中的一种

alter table Customer
add constraint CK_Sex
check (sex='男' OR sex='女' or sex = '未知')

语法4——添加非空约束:

alter table 表名
alter column 字段名 类型名 not null

以Customer为例,我们希望客户的电话号码是必须有的

alter table Customer
alter column TelNumber varchar(20) not null

语法5——添加外键约束:

alter table 表名
add constraint FK_外键名
foreign key(外键名) references 主键表表名(主键名)

以Customer为例,我们希望客户订单表的客户ID 必须等于客户表中的客户ID

alter table CustomerOrder
add constraint FK_CustomerID   
foreign key(CustomerID) references Customer(CustomerID)

语法6——添加default约束:

alter table 表名
ADD CONSTRAINT  DK_约束名  default xxx for 列名

以Customer为例,我们希望客户的地址默认是’地址未知’

alter table Customer
ADD CONSTRAINT  DK_address  default '地址未知' for Address

语法7——删除约束:
以下图片为约束的名字——都是在表中的约束,如果是主键/唯一性约束就在索引里面:
在这里插入图片描述

alter table 表名
drop CONSTRAINT  约束名  

以Customer为例,删除约束

--删除客户id主键约束
alter table Customer
drop  CONSTRAINT  PK_CustomerID

--删除电话花号码唯一性约束
alter table Customer
drop  CONSTRAINT  UK_TelNumber 

--删除性别check约束
alter table Customer
drop  constraint CK_Sex

--删除非空约束————其实就是变为可空
 alter table Customer
alter column TelNumber varchar(20)  null

--删除外键约束
alter table CustomerOrder
drop constraint FK_CustomerID   

--删除default约束
alter table Customer
drop CONSTRAINT  DK_address 

删除已有字段

语法:

alter table 表名
DROP COLUMN 字段名 

以Customer为例,我们删除isVIP

alter table Customer
DROP COLUMN isVIP

以下为报错图片,原因是我们加了个约束,通常这种报错信息大多数都是约束的原因。那么我们把这个约束删除掉。
在这里插入图片描述

--删除default约束就可以删除了。
alter table Customer
drop CONSTRAINT  DF__Customer__isVIP__2D0887CF
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值