第三章包含以下内容:
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