SQL Server数据表的创建、删除、修改、查询

一、预备知识

1、SQL Server的四种表类型

二、🔺数据表的创建 CREATE TABLE

1、创建数据表的两种方式
1)🔺 通过T-SQL语句创建数据表
2)通过SQL Server Management Studio(SSMS)创建数据表【略】

1)🔺 通过T-SQL语句创建数据表

① “胶己” 整理的 模板

/* 
创建人:XXX
创建时间:XXXX 年 XX 月 XX 日
项目名称:XXX
*/
 
/* 选中数据库 */
use 数据库名
go
/* 创建数据表 */
create table 表名
(
	列名1 数据类型1 约束1,
	列名2 数据类型2 约束2,
	列名3 数据类型3 约束3
)

② 数据库命名规范
以下仅为个人数据库命名习惯,仅供参考

类型栗子
数据库名Student_DB、Library_DB …
数据表名student、teacher、course、book …
字段名(列名)sno、sname、sage、tid、tname、cid、cname …
外键字段名fk_tid、fk_cid …

③ "栗栗"更清晰

/* 
创建人:<0
创建时间:2020 年 04 月 20 日
项目名称:学生管理系统
*/

/* 
   student:学生表	teacher:教师表		course:课程表
	sno:   学号	     tid:   编号	     cid:   编号
	sname: 姓名		 tname: 姓名		 cname: 名称
	sage : 年龄		 tphone:电话		 credit:学分
	smajor:专业	
*/

use Student_DB
go 
/* 创建 student表 */
create table student
(
	sno		char(6) primary key,	 			-- primary key:列级主键约束,实体完整性,主键唯一且非空			
	sname	varchar(12) not null,				-- not null:   非空	
	smajor	varchar(40),			
	sage	int check(sage>0),					-- check:  	检查约束,用户定义完整性
	fk_tid	char(6) references teacher(tid),	-- references: 外键约束,参照完整性	  
	fk_cid	char(4),
	foreign key(fk_cid) references course(cid)	-- foreign key、references:	外键约束,参照完整性
)
go
/* 创建 teacher表 */
create table teacher
(
	tid		char(6) primary key,				
	tname	varchar(12) not null,				
	tphone	varchar(11)
)
go
/* 创建 course表 */
create table course
(
	cid		char(4) primary key,
	cname	varchar(30) unique,					-- unique:	    唯一性约束
	ccredit	int	
)
go

想一想 🧐

按照以上的编写顺序全选执行,会是怎样的结果?动手写一写,看看结果和你想的是不是一样,为什么❓

执行 报错 【其中 teacher表 和 course表 创建成功,student表 创建失败。】

分析 原因
程序是 至上而下 运行,当执行到 student表 的外键fk_tid 时,找不到对应的 teacher表( teacher表 的创建在 student表 后面),因此执行报错 —— 外键 ‘FK__student__fk_tid__4BAC3F29’ 引用了无效的表 ‘teacher’。

解决 方案
创建表多表设计,存在外键约束的表,应确保对应的其他表已在此之前创建好存在了.
因此可① 先选中 teacher表 和 course 表 执行,再执行 student表 
          ② 将 student表 移到它里面包含的外键约束的对应表之后,全选执行👇

/* 
创建人:<0
创建时间:2020 年 04 月 20 日
项目名称:学生管理系统
*/

/* student:学生表		teacher:教师表		course:课程表
	sno:   学号	         tid:   编号	     cid:   编号
	sname: 姓名		     tname: 姓名		 cname: 名称
	sage : 年龄		     tphone:电话		 credit:学分
	smajor:专业	
*/

use Student_DB
go 
/* 创建 teacher表 */
create table teacher
(
	tid		char(6) primary key,				-- primary key:列级主键约束,实体完整性,主键唯一且非空
	tname	varchar(12) not null,				-- not null:   非空
	tphone	varchar(11)
)
go
/* 创建 course表 */
create table course
(
	cid		char(4) primary key,
	cname	varchar(30) unique,					-- unique:	    唯一性约束
	ccredit	int	
)
go
/* 创建 student表 */
create table student
(
	sno		char(6) primary key,				
	sname	varchar(12) not null,					
	smajor	varchar(40),			
	sage	int check(sage>0),					-- check:  	检查约束,用户定义完整性
	fk_tid	char(6) references teacher(tid),	-- references: 外键约束,参照完整性	  
	fk_cid	char(4),
	foreign key(fk_cid) references course(cid)	-- foreign key、references:	外键约束,参照完整性
)
go

正确 执行结果

想一想 🧐

如果要删除这三个表,应先删哪一个呢? 是不是还是有外键约束的表放在最后呢❓ 接下来我们看看数据表的删除(drop table)操作 👇

三、数据表的删除 DROP TABLE

1、模板

/* 删除数据表 */
drop table 表名

2、“栗子

drop table teacher
drop table course
drop table student

执行 报错【其中 student表 删除成功,teacher表 和 course表 删除失败。】

分析 原因
程序是 至上而下 运行,drop table 是将一个表彻底删除掉。当执行到删除 teacher表 时,发现 主键tid 被用作 其他表的外键,不能彻底删除,因此执行报错 —— 无法删除对象 ‘teacher’,因为该对象正由一个 FOREIGN KEY 约束引用。 同理,删除 course表 执行报错 —— 无法删除对象 ‘course’,因为该对象正由一个 FOREIGN KEY 约束引用。

解决 方案
删除表 时,存在外键约束的表,应先删除,才能彻底删除被用作外键的其他表。
因此可① 先选中 student表 执行,再执行 teacher表 和 course表
          ② 将有外键约束的 student表 移最前,全选执行👇

drop table student
drop table teacher
drop table course

正确 执行结果

总结
创建数据表时,有外键约束的表应放在外键相关的其他表之后创建;否则,执行报错。
删除数据表时,有外键约束的表应先删除掉,才能确保外键相关的其他表能彻底删除;否则,执行报错


四、数据表名的修改

1、模板

/* 数据表名的修改*/
-- 用SP命令sp_rename
exec sp_rename oldtable_name, newtable_name

2、“栗子

-- 将 students表名 改成 student表
exec sp_rename stdudents, student

五、数据表的查询 SELECT … FROM …

1、模板

/* 数据表的查询 */
select * from 表名

2、“栗子

-- 查询学生表
select * from student

🍅 跟着 🤸‍♀️系列🤸‍♂️ 走

👉 SQL Server数据库的创建(create)、修改(alter)、删除(drop)


🍅🍅🍅 以往文章 👇

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值