TIT 数据库实验一 在SQL Server中创建数据库(SQL入门教学一 从0到1)
实验一
文章目录
- 实验一
- 前言
- 一、创建数据库和查看数据库属性
- 1.创建数据库
- 2.查看数据库属性
- 二、基本表
- 1.创建表、确定表的主码
- 2.查看基本表结构
- 3.修改基本表
- 4.删除基本表
- 三、索引
- 1.建立索引
- 2.修改索引
- 3.删除索引
- 四、表格信息
- 1.插入表格信息(增)
- 2.查询表格信息(查)
- 3.删除表格信息(删)
- 4.修改表格信息(改)
- 五、思考题
- 六、遗留问题
前言
注:TIT的校友只需要运行二、1.2创建表格,三、1.建立索引,四、1.2插入表格信息。其他内容为做实验过程中扩充的知识点,可作为SQL学习使用
参考教材《数据库系统概论第五版》一、二、三为P82—P93,四、表格信息为P118内容
第六点为遗留问题,但不影响代码运行。解决后会回来修改
本篇主要介绍SQL语句,在SQL Server中也可以使用键鼠操作,我参考了这篇,很不错!《数据库实验》实验一:建立数据库和基本表结构_三桥君-CSDN博客
实验内容和要求
1.创建数据库和查看数据库属性。
2.创建表、确定表的主码。
3.查看和修改表结构。
4.具体内容:
(1)使用SQL语句按教材中的内容建立学生数据库。
(2)查看学生数据库的属性,并进行修改,使之符合要求。
(3)使用SQL语句,在建好的学生数据库中建立学生、课程、选课和系部4个表,其结构为;
学生(学号,姓名,年龄,性别,所在系)
课程(课程号,课程名,先行课,学分)
选课(学号,课程号,成绩)
系部(系号,系名称,系主任)
要求:
(1)建库、建表和建立表间联系。(表间联系通过外键实现,在属性关系中建)
(2)选择合适的数据类型。
(3)定义必要的主键和索引。
(4)使用SQL语句在上述4个表中尽可能的多输入些数据(每个表不能少于10条记录)。要求记录不仅满足数据约束要求,还要有表间关联的记录。
一、创建数据库和查看数据库属性
1.创建数据库
右击数据库,点击“新建数据库”,命名“学籍管理”
SQL语句:
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
2.查看数据库属性
右击学籍管理,点击“属性”
SQL语句:
sp_helpdb 学籍管理 --使用数据库信息报告的系统过程
select *from sys.databases where name='学籍管理'
第一种信息更为全面
二、基本表
1.创建表、确定表的主码
1.1右击学籍管理新建
展开新建的数据库,右击“新建表”
右击列名可以修改其属性
1.2使用SQL语句创建
创建前先展开”学籍管理“数据库,或在CREATE TABLE前加一句”USE 学籍管理“表示新建表在学籍管理数据库中或下图(常用按键)
点击新建查询,写入代码,执行代码,右击刷新即可看到新建表格
- 学生(学号,姓名,年龄,性别,所在系)
CREATE TABLE Student(Sno CHAR(9) PRIMARY KEY, /*列级完整性约束条件,Sno是主码*/Sname CHAR(20) UNIQUE,/*Sname取唯一值*/Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20)
);
- 课程(课程号,课程名,先行课,学分)
CREATE TABLE Course(Cno CHAR(4) PRIMARY KEY,/*列级完整性约束条件,Cno是主码*/Cname CHAR(40) NOT NULL,/*列级完整性约束条件,Cname不能取空值*/Cpno CHAR(4),Ccredit SMALLINT,--FOREIGN KEY(Cpno) REFERENCES Course(Cno)/*表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno*/
);
- 选课(学号,课程号,成绩)
CREATE TABLE SC(Sno CHAR(9),Cno CHAR(4),Grade SMALLINT,PRIMARY KEY(Sno,Cno),/*主码由两个属性构成,必须作为表级完整性进行定义*/FOREIGN KEY(Sno) REFERENCES Student(Sno),/*表级完整性约束条件,Sno是外码,被参照表是Student*/FOREIGN KEY(Cno) REFERENCES Course(Cno)/*表级完整性约束条件,Cno是外码,被参照表是Course*/
);
- 系部(系号,系名称,系主任)
CREATE TABLE Dept(Dno CHAR(10) PRIMARY KEY,Dname CHAR(40),Ddictor CHAR(20)
);
扩充:主键/主码 :primary key,一个表可能有多个,往往选中一个作为主键. 外键/外码 :foreign key,假设表A的某个属性attr是另一表B中的主码,且A和B有某种联系,则称attr是外码
2.查看基本表结构
查看Course表的结构
sp_help table_name
sp_help Course
sp_columns Student
sp_columns Course;
区别: 第一种信息更全面
3.修改基本表
3.1增加列
向Student中增加入学时间,数据类型为日期型
ALTER TABLE Student ADD S_entrance DATE;
3.2修改数据类型
修改年龄字符型为整数型
ALTER TABLE Student ALTER COLUMN Sage INT;
3.3修改约束条件
增加课程名称必须取唯一值的约束条件
ALTER TABLE Course ADD UNIQUE(Cname);
3.4删除约束条件
删除FOREIGN KEY(Cno) REFERENCES Course(Cno),FK__SC__Cno__2C3393D0在键中查看
ALTER TABLE SC DROP CONSTRAINT FK__SC__Cno__2C3393D0
4.删除基本表
删除基本表时会删除索引与触发器等对象,例如删除Student,则与Student索引的SC中Sno也会删除
CASCADE: 删除表和视图
DROP TABLE Student CASCADE;
RESTRICT: 若有视图,系统返回错误信息,此表不能删除
DROP TABLE Student RESTRICT;
视图(将多张表组合为一张表)这里只以一张表做列子,实验一入门SQL,不做赘述
CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS';
三、索引
1.建立索引
能够加速数据库查询,但需要占用一定的储存空间,当基本表更新时,索引需要维护,增加数据库负担,所以根据实际选择地创建
格式:
UNIQUE: 索引的每一个索引值只对应唯一的数据记录
CLUSTER: 建立的索引是聚簇索引
CREATE [UNIQUE/CLUSTER] INDEX <索引名> ON <表名>(<列名> <次序:ASC升序,DESC降序>);
建立Student 、Course、SC三个表的索引
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);
查看结果:建立好后展开Student,展开索引查看对应属性
SQL语句:
use 学籍管理
exec sp_helpindex Student
2.修改索引
将SC中的SCno索引修改为SCSno
ALTER INDEX SCno RENAME TO SCSno;
3.删除索引
删除Student中的Stusname索引
DROP INDEX Stusname;
四、表格信息
可以右击表格“编辑前200行”,进行编辑或查看,实现表格信息中增删改
SQL语句:
1.插入表格信息(增)
1.1只指出表名,无属性,则必须按CREATE TABLE中的属性赋值
INSERT INTO Student
VALUES('192054401','张帆','男','20','计算机工程系');
1.2属性顺序可以与CREATE TABLE不同,但VALUES与INTO必须对应
INSERT INTO Student(Sno,Sname,Ssex,Sage,Sdept)
VALUES('192054401','张帆','男','20','计算机工程系'),('192054402','万润南','女','21','计算机工程系'),('192054403','白峰','男','20','计算机工程系'),('192054404','汤明学','男','19','计算机工程系')
,('192054405','王政杰','男','20','计算机工程系'),('192054406','张力','男','22','计算机工程系')
,('192062101','刘俊卓','男','18','数学系'),('192062102','李云龙','男','21','数学系')
,('192062103','刘宇豪','男','20','数学系'),('192062104','江鑫艺','女','21','数学系')
,('192062105','王鼎','男','21','数学系'),('192062106','申宇宙','男','20','数学系'),('192062107','樊倩','男','20','数学系'),('192062108','武文琴','男','20','数学系');INSERT INTO Course(Cno,Cname,Cpno,Ccredit)
VALUES('001','数据库','5','4'),('002','数学','','2'),('003','信息系统','1','4'),('004','操作系统','6','3'),('005','数据结构','7','4'),('006','数据处理','','2'),('007','PASCAL语言','6','4'),('008','C++','2','4'),('009','C++面向对象','3','4'),('010','JAVA','4','4');INSERT INTO Dept(Dno,Dname,Ddictor)
VALUES('1','王宇藩','机械工程系'),('2','殷爱博','电子工程系'),('3','秦立伟','自动化系'),('4','武文琴','化学与化工系'),('5','樊倩','计算机系'),('6','董佳杰','环境与安全工程系'),('7','郭文裕','新能源系'),('8','刘尧','理学系'),('9','曲婷婷','经管系'),('10','张伟豪','外语系');
在这里注意,选课中的Sno被Student中的Sno所约束,不能一次运行完成代码。所以要先插入上面代码,之后再插入SC信息
INSERT INTO SC(Sno,Cno,Grade)
VALUES
('192054401','001','88'),('192054401','002','85'),('192054401','003','70'),('192054401','004','80'),('192054401','005','71'),('192054401','006','73'),('192054401','007','72'),('192054401','008','75'),
('192054401','009','80'),('192054401','010','70'),('192054402','002','85'),('192054403','002','84'),('192054404','002','80'),('192054405','002','88'),('192054406','002','70'),('192062101','001','88'),('192062102','001','85'),('192062103','001','84'),('192062104','001','87'),('192062105','001','83'),('192062106','001','84'),('192062107','001','80'),('192062108','001','86'),('192054406','001','83'),('192054404','001','');
2.查询表格信息(查)
2.1.自定义列显示顺序,也可以单独看某几列
SELECT Sno,Sname,Ssex,Sage,Sdept/*默认为ALL,也可定义为DISTINCT*/
FROM Student;
2.2当表中有重复信息
SELECT DISTINCT Sno/*表示查看Sno列有两个192062116时只显示其中一行*/
FROM Student;
2.3查看全部
SELECT *
FROM Student;
3.删除表格信息(删)
3.1删除一个元组的值
删除192054401的学生记录
DELETE
FROM Student
WHERE Sno='192054401'
3.2删除多个元组的值
删除所有的选课记录
DELETE
FROM SC;
3.3.带子查询的删除语句
删除计算机系所有学生的选课记录
DELETE
FROM SC
WHERE Sno IN(SELECT SnoFROM StudentWHERE Sdept='计算机系'
);
4.修改表格信息(改)
4.1修改一个元组的值
修改192054401的学生年龄为21
UPDATE Student
SET Sage=21
WHERE Sno='192054401';
4.2修改多个值
将所有的学生年龄加一
UPDATE Student
SET Sage=Sage+1;
五、思考题
为什么要建立索引?
当表的数据量比较大时,查询操作会比较耗时,建立索引是加快查询速度的有效手段,用户可以根据应用环境的需要在基本表上建立一个或多个索引,以提供多种存取路径,加快查找
学生库选课表中的学号、课程号采用数值型、还是采用字符型的?采用哪种数据类型更好?
字符型。数值型只能代表数字,当学号前缀有字符时,不能使用。
六、遗留问题
二、1.2中建立Course,第六行,Cpno被Cno约束后,无法修改Cpno的值,参考下面这两篇仅理解外键被约束后,主键必须先有值再填写外键。但问题没有解决。解决后回来重写!
INSERT 语句与 FOREIGN KEY 约束"XXX"冲突。该冲突发生于数据库"XXX",表"XXX", column 'XXX
INSERT语句与FOREIGN KET约束‘FK__SC__Cno__2C3393D0‘冲突,该冲突发生于数据库‘Test20210322‘,表‘dbo.Course‘,column‘Cno‘
TIT 数据库实验一 在SQL Server中创建数据库(SQL入门教学一 从0到1)相关推荐
- sql server中创建数据库和表的语法
下面是sql server中创建数据库,创建数据表以及添加约束的sql语句: use master --创建数据库 if exists (select * from sysdatabases wher ...
- 数据库实验一 在SQL Server 中创建数据库
一.实验内容 1.创建数据库和查看数据库属性. 2.创建表.确定表的主码 3.查看和修改表结构. 4,具体内容 (1)使用SQL语句按教材中的内容建立学生数据库. (2)查看学生数据库的属性,并进行修 ...
- SQL Server 中创建数据库、更改主文件组示例
以下示例在 SQL Server 实例上创建了一个数据库.该数据库包括一个主数据文件.一个用户定义文件组和一个日志文件.主数据文件在主文件组中,而用户定义文件组包含两个次要数据文件.ALTER DAT ...
- 用VB代码在SQL SERVER 中创建数据库,表,列.以及对数据库的操作
前面看了一编用VB代码创建ACCESS数据库的文章,写的很好. 根据思路,写下创建SQL 数据库的方法,供大家参考. 1:引用ADO2.5lib 2:在窗体上添加一个按钮COMMAND1 3:按钮代码 ...
- SQL Server中通用数据库角色权限的处理详解
SQL Server中通用数据库角色权限的处理详解 前言 安全性是所有数据库管理系统的一个重要特征.理解安全性问题是理解数据库管理系统安全性机制的前提. 最近和同事在做数据库权限清理的事情,主要是删除 ...
- SQL Server中的数据库文件组和零碎还原
So far, we discussed many de-facto details about SQL Server database backup and restore. In this 15t ...
- 什么是SQL Server中的数据库规范化?
In addition to specifically addressing database normalization in SQL Server, this article will also ...
- sql server中创建链接服务器图解教程
转自sql server中创建链接服务器图解教程 1.展开服务器对象-->链接服务器-->右击"新建链接服务器" 注意:必须以数据库管理员身份登录(通常也就是sa帐号) ...
- SQL Server中的动态SQL
In this article, we will review how to construct and execute dynamic SQL statements in SQL Server wi ...
- 创建视图SQL:在SQL Server中创建视图
介绍 (Introduction) In this article, we are going to see how to use the CREATE VIEW SQL statement to c ...
最新文章
- mybatis中sqlSession的设计与实现
- 方法的绑定机制-静态绑定和动态绑定
- [Java基础]数据输入
- 查询sql语句是否使用索引
- 为 Windows 用户准备的简明 Linux 词汇表
- 学成在线案例——黑马程序员pink老师\思路讲解\完整源代码
- LAMP+Redis详解(一)——基本原理
- komodo-edit
- MSRA-USTC 计算机科学领域前沿进展新年第一讲
- java连不上mysql_eclipse连接不上mysql
- Android应用开发入门教程(经典版)
- ie上传文件到ftp服务器,通过浏览器上传文件到ftp
- 团队管理经典书籍推荐:《团队管理必读12篇》
- [树形dp][组合数] JZOJ P1794 保镖排队
- kubernetes高可用集群web页面部署
- 闹闹天宫一直显示服务器错误,闹闹天宫常见问题FAQ
- vs code下载慢的解决方法
- ubuntu删除虚拟网卡
- matlab演示系统,用MATLAB演示新古典增长模型
- 《C++性能优化指南》 linux版代码及原理解读 第四章