数据库原理与应用(SQL Server)笔记 第一章 数据定义语言和数据操纵语言

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 数据库原理与应用(SQL Server)笔记 第一章 数据定义语言和数据操纵语言

前言


本教程使用的是SQL Server 2008 R2,如嫌麻烦在网上找下载地址有需要的小伙伴可以直接私信我,我可以把压缩包以及安装教程直接发给你。(打开界面如下图)

本文章的篇幅很长,其中涉及的语句以及代码较多,建议最好有参考书做参考学习。

1666888283857.jpg


一、基本介绍


首先我们要知道所谓的T-SQL 即 Transact-SQL,是 SQL 在 Microsoft SQL Server 上的增强版,它是用来让应用程序与 SQL Server 沟通的主要语言。T-SQL 提供了标准 SQL 的 DDL 和 DML 功能,加上延伸的函数、系统预存程序以及程式设计结构(例如 IF 和 WHILE)让程式设计更有弹性。


在T-SQL中,语法规定不区分大小写,也就是代码不区分大小写。


另外我们要知道,使用SQL创建数据库和创建表有两种方式,分别是使用SSMS方式创建和使用T-SQL语句创建,这里我们推荐掌握使用T-SQL语句创建这种方式,但也要了解如何使用SSMS方式创建的一些基本操作,毕竟是图形化操作相较简单,使用SSMS方式创建数据库在很多网页以及参考书书上都能找到,这里就不再累述。所以我们以下的教程仅使用T-SQL语句来介绍T-SQL的一些操作并围绕语句来讲述。


二、在SQL里执行T-SQL语句


进入SQL后,首先我们创建一个数据库,右键“数据库”,点击“新建数据库”,设置好数据库的名称以及数据库文件的一些设置。

1666888314545.jpg

创建好后我们点击左上角的“新建查询”,这就是写T-SQL语句的地方。

1666888330304.jpg

这里可以选择在哪个数据库中进行新建查询。

1666888345625.jpg


三、数据定义语言(DDL)


(一)概述


数据定义语言用于对数据库和表进行创建、修改和删除,即DDL包括CREATE、ALTER、DROP等语句。


(二)数据定义语言用于数据库


1、创建数据库


(1)创建数据库的格式:

CREATE DATABASE <数据库名>
ON
(
  <数据库文件和文件组的属性>
)
LOG ON
(
  <日志文件属性>
)

(2)其中数据库文件和文件组的属性以及日志文件属性的格式如下:

{
  NAME=<逻辑名称>,
  FILENAME=<存储路径(物理名称)>,
  SIZE=<初始大小>,
  MAXSIZE=<最大容量>,
  FILEGROWTH=<增量[容量%]>,
}

(3)接下来我们通过一个例子来总结刚刚学的东西:


e.g.创建一个数据库名为MyStore,其中主数据文件为15MB,最大大小为100MB,按2MB增长;还有一个文件组名为mytest,包括文件test_0,文件初始大小为5MB,最大为20MB,按10%增长;另有一个日志文件,大小为2MB,最大大小为10MB,按5%增长。


在SQL Server查询分析器中输入以下语句:

CREATE DATABASE MyStore
ON
PRIMARY
(
  NAME='MyStore',
  FILENAME='C:\Users\myj\Desktop\MyStore.mdf',
  SIZE=15MB,
  MAXSIZE=20MB,
  FILEGROWTH=2MB
),
FILEGROUP mytest
(
  NAME='MyStore_test0',
  FILENAME='C:\Users\myj\Desktop\MyStore_test0.ndf',
  SIZE=5MB,
  MAXSIZE=20MB,
  FILEGROWTH=10%
)
LOG ON
(
  NAME='MyStore_log',
  FILENAME='C:\Users\myj\Desktop\MyStore_log.ldf',
  SIZE=2MB,
  MAXSIZE=10MB,
  FILEGROWTH=5%
)

分析:

点“执行”按钮后,下方显示完成,这时候我们可能在左边的对象资源管理器中并未看到刚刚创建的数据库,别着急,刷新一下管理器如果还没出现可能是因为版本的问题。这时我们退出保存好刚刚创建的库,此时桌面出现了我们创建的衍生文件,然后重新进入SQL Server,这时候就出来了MyStore我们所创建的数据库,创建完成。

1666888423363.jpg


2、修改数据库


(1)修改数据库的格式:

ALTER DATABASE <数据库名>
(
  <增加(ADD),删除(REMOVE),更改(MDOIFY)>
)

(2)其中增加,删除,更改的格式如下:

{
  ADD FILE <文件>[,...n][TO FILEGROUP 文件组],
  ADD LOG FILE <日志文件>[,...n],
  ADD FILEGROUP <文件组>,
  REMOVE FILE <文件>,
  REMOVE FILEGROUP <文件组>,
  MDOIFY FILE <文件>,
  MDOIFY NAME= <新数据库名>,
  MDOIFY FILEGROUP <文件组>,
}

(3)然后进行操作跟前面的一样,类似NAME、SIZE、FILEGROWTH等等。


e.g.我们来看一个例子,例如要在数据库Store0中,增加一个数据文件Store_data,大小为10MB,最大为50MB,按5MB增长。


在SQL Server查询分析器中输入以下语句:


ALTER DATABASE Store0
ADD FILE
(
  NAME=Store_data',
  FILENAME='C:\Users\myj\Desktop\Store_data.ndf',
  SIZE=10MB,
  MAXSIZE=50MB,
  FILEGROWTH=5MB
)

3、使用数据库


当我们要使用数据库时,我们调用USE语句,

语句格式如下:

USE <数据库名>


注:这里我们要注意,USE语句只用在第一次打开数据库时使用,后续操作都是作用于该数据库中。如果我们要另外使用其它数据库,则需重新使用USE语句来使用另一个数据库。具体USE语句的使用我们在之后的创建表中介绍到。


4、删除数据库


当我们不需要数据库时,调用DROP语句,

语句格式如下:

DROP DATABASE <数据库名>


5、查看数据库


当我们要查看一个所创建的数据库时,调用系统存储过程SP_HELPDP即可查看数据库信息,语句格式如下:

SP_HELPDP <数据库名>


例如我们查看“1.创建数据库(3)”例子当中的数据库MyStore,点击新建查询,输入框输入SP_HELPDP MyStore,即可查到该数据库的相关信息:

1666888517620.jpg


(三)数据定义语言用于表


1、创建数据表


(1)使用CREATE TABLE 语句创建数据表

①创建数据库的格式:

CREATE TABLE <数据表名>
(
  <列定义>
)

②其中列定义的格式如下:

{
  列名 数据类型 NULL/NOT NULL (AS 计算字段的字段值表达式)[,...n]<表约束> 
}

③现在我们通过一个简单的例子来总结刚刚所讲到的:


e.g.下图给出一个表,使用sql语句创建该数据表:

1666888557286.jpg

在SQL Server查询分析器中输入以下语句:

CREATE TABLE OrderDetail(
  OrderID int NOT NULL,
  ProductID char(6) NOT NULL,
  Quantity int NULL,
  PRIMARY KEY(OrderID,ProductID)
)

(2)使用CREATE TABLE 语句创建临时数据表和全局临时表

①临时表的创建在CREATE TABLE语句后面加上#savg ,即表示创建了一个稳定临时表,此表只能由创建者使用。

格式如下:

CREATE TABLE #savg


②若在CREATE TABLE 语句后面再加上两个’#’,此时表示的是创建了一个全局临时表,它可以由所有用户使用。

格式如下:

CREATE TABLE ##savg


注:临时表在断开与数据库连接时会被服务器删除。


(3)由其他表创建新数据表

由其他表创建新数据表即使用 SELECT INTO 语句创建一个新数据表,并用SELECT 的结果填充该表。

语句格式:

SELECT <列名> INTO <数据表1> FROM <数据表2>


即使用数据表2的列名来创建新的数据表1。


e.g.在数据库Test_0中,使用SQL语句由student1表创建student2表,其中student2表包括列名student2ID、student2Name、student2Class:

USE Test_0
SELECT student2ID,student2Name,student2Class INTO student2
FROM student1

2、修改数据表


当我们要修改数据表时,我们使用ALTER TABLE语句,

语句格式如下:

ALTER TABLE <数据表名>
(
  ALTER COLUMN (<列名> <数据类型>...)  /*修改表中指定列的属性*/
  ADD (<列名> <数据类型>...)           /*增加表中的列*/
  DROP (<列名> <数据类型>...)          /*删除表中的列或者约束*/
)

注意:在使用ALTER TABLE语句中,一次只能包含ALTER COLUMN、ADD、DROP子句中的一项。


e.g.在数据库Test_0中,使用SQL语句,在student新增加一列tel char(15):

USE Test_0
ALTER TABLE student
  ADD tel char(15)

3、删除数据表


当我们要删除数据表时,我们使用DROP TABLE语句,

语句格式如下:

DROP TABLE <数据表名>


e.g.已知数据库School,删除该数据库中的数据表class。

USE School
DROP TABLE class


四、数据操纵语言(DML)


(一)概述


数据操纵语句是用于向表中插入记录、修改记录以及删除记录的语句,即数据操作语句DML包括INSERT、UPDATE、DELETE等语句。


(二)插入语句


INSERT语句用于向向数据表或视图中插入指定的各列值的行。

语句格式:

INSERT [ INTO ] <数据表名> [(字段列表)] VALUES (数据列表) [,…n]

注:如果插入的数据按照表中各列的列名顺序列出这些值,那就可以省略列名;VALUES子句后接多行的值用逗号隔开。


e.g.已知数据库School,使用INSERT语句向student表中插入一个学生记录:“studentID:001、name:yyy、sex:男、address:小区25号”。

USE School
INSERT INTO student(studentID,name,sex,address)
VALUES(001,'yyy','男','小区25号')

显式指定列名表:显示列名表可用于插入值少于列的个数或列的顺序不同的数据,即我们可以这样添加,不用加上列表名,但要注意顺序:


USE School
INSERT INTO student VALUES(001,'yyy','男','小区25号')

(三)修改语句


UPDATE语句用于修改数据表或视图中特定记录或列的数据,即将表中满足查询条件的记录中由SET指定的各列的列值设置为SET指定的新值进行修改,然而WHERE可无,即不使用WHERE子句时更新所有记录的指定列值。

语句格式:

UPDATE < 数据表名 >

SET { 列名 = 表达式 [,…n] }

(WHERE < 查询条件 >)


e.g.已知数据库School,使用UPDATE语句修改在student_1表中,studentID为202119001的学生A的地址address改为“学区01栋”,并将其课程号为“002”的课程的ctype值改为“必修”以及他的学分ccredit加1。

USE School
UPDATE student_1
SET address='学区01栋',ctype='必修',ccredit=ccredit+1
WHERE studentID=202119001

(四)删除语句


1、DELETE语句


DELETE语句用于删除数据表或视图中的一行或多行记录,即将指定数据表或者视图中删除满足查询条件的行,若省略WHERE子句,即删除所有行。

语句格式:

DELETE < 数据表名 >

(WHERE < 查询条件> )


e.g.已知数据库School,使用DELETE语句向student表中学号studentID为001以及ctype值为NULL的学生记录。


USE School
DELETE  student
WHERE studentID=001
WHERE ctype IS NULL

2、TRUNCATE TABLE语句


TRUNCATE TABLE语句与刚刚的DELETE语句有点像,这里我们先比较DELETE语句和TRUNCATE TABLE语句的区别。首先DELETE语句是一次删除一条记录,其每次操作都记录在事务日志中,速度慢;而TRUNCATE TABLE语句一次删除所有记录,并不计入事务日志,相较于DELETE语句更快。


语句格式:

TRUNCATE TABLE <数据表名>


e.g.已知数据库School,删除当前数据库中表room_01和表room_02中的所有记录。


TRUNCATE TABLE School
SELECT * FROM room_01
SELECT * FROM room_02

结语


以上就是本次数据库原理与应用(SQL Server)教程的全部内容,感谢您的阅读和支持,篇幅较长,若有表述或者代码中的不当之处,望指出!您的指出和建议能给作者带来很大的动力!!!


相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
7天前
|
运维 安全 Cloud Native
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
|
6天前
|
存储 SQL JSON
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
|
7天前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的考试管理系统(含教程&源码&数据库数据)
在数字化时代背景下,本文详细介绍了如何使用Spring Boot框架结合Vue.js技术栈,实现一个前后端分离的考试管理系统。该系统旨在提升考试管理效率,优化用户体验,确保数据安全及可维护性。技术选型包括:Spring Boot 2.0、Vue.js 2.0、Node.js 12.14.0、MySQL 8.0、Element-UI等。系统功能涵盖登录注册、学员考试(包括查看试卷、答题、成绩查询等)、管理员功能(题库管理、试题管理、试卷管理、系统设置等)。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的考试管理系统(含教程&源码&数据库数据)
|
2天前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之Oracle数据库是集群部署的,怎么进行数据同步
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
10月前
|
SQL Oracle 关系型数据库
本机不安装Oracle客户端,使用PL/SQL Developer连接远程数据库
本机不安装Oracle客户端,使用PL/SQL Developer连接远程数据库
207 0
|
SQL 程序员 数据库
【python】连接sql server数据库,并实现简单的增删改查(1)
Python编程语言越来越受到大家的喜爱,本篇文章就从链接微软数据库进行增删改查操作的讲解
611 0
|
SQL 数据库连接 数据库
Qt实用技巧:Qt连接SQL Server数据库(需要配置ODBC)
Qt实用技巧:Qt连接SQL Server数据库(需要配置ODBC)
|
3月前
|
SQL IDE Java
Java连接SQL Server数据库的详细操作流程
Java连接SQL Server数据库的详细操作流程
|
3月前
|
SQL 关系型数据库 MySQL
sql连接mysql数据库
要使用SQL来连接MySQL数据库,你实际上需要使用一种编程语言(如Python、Java、PHP等)配合相应的数据库驱动或库。下面,我将为你提供几个常见编程语言的示例,说明如何连接到MySQL数据库
|
4月前
|
SQL 关系型数据库 数据库连接
Python 连接 SQL 数据库 -pyodbc
以下是如何在 Python 中使用 pyodbc 连接到 SQL 数据库的基本步骤和详解
114 0

热门文章

最新文章

下一篇
云函数