实验一

文章目录

  • 实验一
    • 前言
    • 一、创建数据库和查看数据库属性
      • 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)相关推荐

  1. sql server中创建数据库和表的语法

    下面是sql server中创建数据库,创建数据表以及添加约束的sql语句: use master --创建数据库 if exists (select * from sysdatabases wher ...

  2. 数据库实验一 在SQL Server 中创建数据库

    一.实验内容 1.创建数据库和查看数据库属性. 2.创建表.确定表的主码 3.查看和修改表结构. 4,具体内容 (1)使用SQL语句按教材中的内容建立学生数据库. (2)查看学生数据库的属性,并进行修 ...

  3. SQL Server 中创建数据库、更改主文件组示例

    以下示例在 SQL Server 实例上创建了一个数据库.该数据库包括一个主数据文件.一个用户定义文件组和一个日志文件.主数据文件在主文件组中,而用户定义文件组包含两个次要数据文件.ALTER DAT ...

  4. 用VB代码在SQL SERVER 中创建数据库,表,列.以及对数据库的操作

    前面看了一编用VB代码创建ACCESS数据库的文章,写的很好. 根据思路,写下创建SQL 数据库的方法,供大家参考. 1:引用ADO2.5lib 2:在窗体上添加一个按钮COMMAND1 3:按钮代码 ...

  5. SQL Server中通用数据库角色权限的处理详解

    SQL Server中通用数据库角色权限的处理详解 前言 安全性是所有数据库管理系统的一个重要特征.理解安全性问题是理解数据库管理系统安全性机制的前提. 最近和同事在做数据库权限清理的事情,主要是删除 ...

  6. SQL Server中的数据库文件组和零碎还原

    So far, we discussed many de-facto details about SQL Server database backup and restore. In this 15t ...

  7. 什么是SQL Server中的数据库规范化?

    In addition to specifically addressing database normalization in SQL Server, this article will also ...

  8. sql server中创建链接服务器图解教程

    转自sql server中创建链接服务器图解教程 1.展开服务器对象-->链接服务器-->右击"新建链接服务器" 注意:必须以数据库管理员身份登录(通常也就是sa帐号) ...

  9. SQL Server中的动态SQL

    In this article, we will review how to construct and execute dynamic SQL statements in SQL Server wi ...

  10. 创建视图SQL:在SQL Server中创建视图

    介绍 (Introduction) In this article, we are going to see how to use the CREATE VIEW SQL statement to c ...

最新文章

  1. mybatis中sqlSession的设计与实现
  2. 方法的绑定机制-静态绑定和动态绑定
  3. [Java基础]数据输入
  4. 查询sql语句是否使用索引
  5. 为 Windows 用户准备的简明 Linux 词汇表
  6. 学成在线案例——黑马程序员pink老师\思路讲解\完整源代码
  7. LAMP+Redis详解(一)——基本原理
  8. komodo-edit
  9. MSRA-USTC 计算机科学领域前沿进展新年第一讲
  10. java连不上mysql_eclipse连接不上mysql
  11. Android应用开发入门教程(经典版)
  12. ie上传文件到ftp服务器,通过浏览器上传文件到ftp
  13. 团队管理经典书籍推荐:《团队管理必读12篇》
  14. [树形dp][组合数] JZOJ P1794 保镖排队
  15. kubernetes高可用集群web页面部署
  16. 闹闹天宫一直显示服务器错误,闹闹天宫常见问题FAQ
  17. vs code下载慢的解决方法
  18. ubuntu删除虚拟网卡
  19. matlab演示系统,用MATLAB演示新古典增长模型
  20. 《C++性能优化指南》 linux版代码及原理解读 第四章

热门文章

  1. 关于搜索引擎原理的详细解读
  2. 微信小程序项目源代码SSM考勤签到管理系统
  3. mysql 2005 安装教程_sql2005 安装教程 图文
  4. 华为鲲鹏HCIA认证笔记总结三(附题库)
  5. 自动化测试是测试人员的遮羞布?
  6. Windows程序设计:使用VS2010创建窗口程序
  7. 2个月快速通过PMP证书的经验分享
  8. 利用CSkin组件设计漂亮的WinForm登录界面
  9. linux 安装php7.3
  10. SqlServer2005安装详解