sql server 数据库的学习

前言:

SQL Server是由微软公司开发的一种关系型数据库管理系统(RDBMS),用于存储和检索数据。它提供了一个可扩展的、安全的和可靠的数据存储和管理解决方案,并主要用于构建企业级应用程序。SQL Server支持使用SQL(结构化查询语言)进行数据管理和查询,这是一种用于管理和操纵数据库的标准语言。

通过SQL,用户可以轻松地创建、修改和查询数据库中的表、视图、存储过程和触发器。此外,SQL Server还提供了一套强大的工具和功能,可以有效地管理和操作数据库,包括数据模型设计、数据导入和导出、事务处理、数据备份和恢复。

在实际应用中,用户可以使用SQL Server Management Studio (SSMS)来连接SQL Server,创建新的数据库,以及执行各种查询和数据操作。然而,在使用过程中也可能会遇到一些常见问题,如连接异常或安装错误等,需要采取相应的解决方法。

总之,SQL Server是一种功能强大且广泛使用的数据库系统,被许多企业和组织用于处理和管理其数据。如需更深入地了解SQL Server的使用和管理,建议查阅相关的官方文档或教程。

 

一、基本概念

1. 数据库(Database)

定义:数据库是按照数据结构来组织、存储和管理数据的仓库。

特性

  • 数据独立性:数据逻辑结构和物理结构分离,应用程序只与数据的逻辑结构打交道,数据的物理结构改变时,应用程序不需要修改。
  • 数据共享性:数据库中的数据可以被多个用户、多个应用程序共享使用。
  • 数据完整性:数据库通过完整性约束,确保数据的一致性和准确性。

2. 数据库管理系统(DBMS)

定义:数据库管理系统是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。

功能

  • 数据定义:提供数据定义语言(DDL),用于定义数据库中的对象(如表、视图、索引等)。
  • 数据操纵:提供数据操纵语言(DML),用于查询、插入、更新和删除数据。
  • 数据控制:控制用户对数据的访问权限,确保数据的安全性和完整性。
  • 数据库维护:提供数据的备份、恢复、优化等功能。

3. 数据模型

定义:数据模型是数据库中用来对现实世界进行抽象的工具,是数据库中用于提供信息表示和操作手段的形式构架。

常见的数据模型

  • 关系模型:用二维表格表示实体和实体之间的联系。SQL Server是关系型数据库管理系统的一个例子。
  • 层次模型:用树形结构表示实体和实体之间的联系。
  • 网状模型:用网状结构表示实体和实体之间的联系。

4. 关系

位在关系模型中,关系(或称为“表”)是存储数据的基本单,由行(记录)和列(字段)组成。每个列都有一个数据类型,定义该列中数据的类型。

5. 键

  • 主键:唯一标识表中每一行的一个或多个字段的组合。一个表只能有一个主键。
  • 外键:一个表中的字段,其值取自另一个表的主键,用于建立和加强两个表数据之间的链接。

6. 数据完整性

定义:数据完整性是指数据的准确性和一致性。DBMS通过完整性约束(如主键约束、外键约束、唯一约束等)来确保数据完整性。

7. 视图

定义:视图是从一个或多个表(或其他视图)中导出的表。视图本身不存储数据,而是基于查询定义的虚拟表。

8. 索引

定义:索引是用于加快表中数据检索速度的数据结构。通过索引,DBMS可以快速地定位到表中的特定记录。

9. 事务

定义:事务是一系列操作,这些操作要么全部完成,要么全部不完成,以此确保数据库的完整性。事务通常用于处理涉及多个步骤的业务逻辑。

10. 并发控制

定义:当多个用户或应用程序同时访问和修改数据库时,需要进行并发控制,以确保数据的一致性和完整性。

了解并掌握这些基本概念是深入学习数据库的前提,它们为后续学习SQL语言、数据库设计、数据库优化等提供了坚实的基础。

二、SQL Server基础

  1. 表:表是SQL Server中最基本的数据存储单位,由一组列(字段)组成,每列定义了特定类型的数据。
  2. 查询语言:SQL是用于在SQL Server中进行数据查询和操作的标准语言,包括数据定义(DDL)、数据操作(DML)等语句。
  3. 索引:索引是一种数据结构,用于加快数据库的查询速度。
  4. 视图:视图是由一个或多个表的查询结果构成的虚拟表。
  5. 存储过程:存储过程是一组预先编译的数据库操作语句集合,可被保存并重复执行。
  1. SQL的增删改查

    • DML语句:用于操作数据,包括查询数据(SELECT)、插入数据(INSERT)、更新数据(UPDATE)和删除数据(DELETE)。
    • 查询语言:SQL(Structured Query Language)是用于在SQL Server中进行数据查询和操作的标准语言。

三、数据库语法

1.创建数据库

在SQL Server中,你可以使用CREATE DATABASE语句来创建一个新的数据库。以下是一个基本的CREATE DATABASE语句的示例:

CREATE DATABASE 数据库名;


其中,数据库名是你想要创建的数据库的名称。

例如,如果你想创建一个名为MyNewDatabase的数据库,你可以执行以下SQL语句:

CREATE DATABASE MyNewDatabase;


在执行此语句之前,你需要确保已经连接到SQL Server实例,并且你有足够的权限来创建数据库。

除了基本的创建语句,CREATE DATABASE语句还支持许多可选参数,允许你指定数据库的初始大小、增长限制、文件路径、日志文件设置等。以下是一个更复杂的示例,它指定了主数据文件的大小和增长限制:

CREATE DATABASE MyNewDatabase 
ON 
( NAME = MyNewDatabase_dat, 
FILENAME = 'C:\SQLData\MyNewDatabase.mdf', 
SIZE = 10, 
MAXSIZE = 50, 
FILEGROWTH = 5 ) 
LOG ON 
( NAME = MyNewDatabase_log, 
FILENAME = 'C:\SQLData\MyNewDatabase.ldf', 
SIZE = 5MB, 
MAXSIZE = 25MB, 
FILEGROWTH = 5MB );

 

在这个例子中:

  • ON子句用于定义数据库的主数据文件(MDF)。
  • LOG ON子句用于定义数据库的日志文件(LDF)。
  • NAME指定逻辑文件名。
  • FILENAME指定物理文件路径和名称。
  • SIZE指定文件的初始大小。
  • MAXSIZE指定文件的最大大小限制。
  • FILEGROWTH指定当文件需要增长时,每次应增加的大小。

请注意,你指定的文件路径(如C:\SQLData\)必须存在,否则SQL Server将无法创建数据库文件。

在执行这些语句之前,请确保你有足够的权限来创建数据库文件,并且指定的文件路径对于SQL Server服务帐户是可访问的。

通常,你会在SQL Server Management Studio (SSMS)的查询窗口中执行这些SQL语句,或者通过其他支持SQL命令的客户端工具(如SQLCMD)来执行。

2.删除数据库

在 SQL Server 中,要删除一个数据库,你可以使用 DROP DATABASE 语句。这是一个不可逆的操作,因此在执行之前,请确保你已经备份了所有重要的数据,并且确实想要删除该数据库

DROP DATABASE 数据库名;

 其中 数据库名 是你想要删除的数据库的名称。

例如,如果你想要删除名为 MyDatabase 的数据库,你可以执行以下 SQL 语句:

DROP DATABASE MyDatabase;

 

在执行这个语句之前,请确保:

  1. 你已经连接到正确的 SQL Server 实例。
  2. 你拥有足够的权限来删除数据库。通常,这需要 ALTER ANY DATABASE 权限或 CONTROL SERVER 权限。
  3. 数据库没有被任何用户或进程使用。如果有连接,你需要先终止这些连接。
  4. 你已经备份了所有重要的数据,以防将来需要这些数据。

在 SQL Server Management Studio (SSMS) 中,你可以通过以下步骤来执行 DROP DATABASE 语句:

  1. 打开 SSMS 并连接到你的 SQL Server 实例。
  2. 在“对象资源管理器”中找到你想要删除的数据库。
  3. 右键点击该数据库,选择“删除”。
  4. 在弹出的对话框中,确认要删除的数据库名称,然后点击“确定”。

或者,你也可以在 SSMS 的查询窗口中直接输入并执行 DROP DATABASE 语句。

请务必谨慎使用 DROP DATABASE 语句,因为它会立即删除数据库及其所有对象和数据,且无法撤销。

3.数据库表的建立

在 SQL Server 中,建立表的语句通常使用 CREATE TABLE 命令。以下是一个简单的示例,展示如何在 SQL Server 中创建一个表,并定义其列和相应的数据类型:

假设我们要创建一个名为 Students 的表,该表包含 StudentID(学生ID,作为主键),FirstName(名字),LastName(姓氏),Age(年龄)和 Email(电子邮件)这几个字段。

CREATE TABLE Students (  
    StudentID INT PRIMARY KEY IDENTITY(1,1), -- 学生ID,主键,自增  
    FirstName NVARCHAR(50) NOT NULL,         -- 名字,非空  
    LastName NVARCHAR(50) NOT NULL,          -- 姓氏,非空  
    Age INT,                                  -- 年龄,可以为空  
    Email NVARCHAR(100) UNIQUE                -- 电子邮件,唯一  
);

在这个例子中:

  • StudentID 是整数类型的主键列,使用 IDENTITY(1,1) 使其自增,从1开始,每次递增1。
  • FirstName 和 LastName 是 NVARCHAR 类型的列,最大长度为50个字符,并且不允许为空(NOT NULL)。
  • Age 是整数类型的列,可以为空(没有 NOT NULL 约束)。
  • Email 是 NVARCHAR 类型的列,最大长度为100个字符,并且必须是唯一的(UNIQUE 约束)。

请注意以下几点:

  • 在 SQL Server 中,通常使用 INT 或 BIGINT 作为主键数据类型,特别是当主键是自增的时候。
  • 使用 NVARCHAR 而不是 VARCHAR 可以存储 Unicode 字符,这对于支持多语言的数据库是很有用的。
  • IDENTITY 属性用于自动生成唯一的值,这通常用于主键列。
  • UNIQUE 约束确保列中的每个值都是唯一的。

在 SQL Server Management Studio (SSMS) 中执行上述 CREATE TABLE 语句,将在连接的数据库中创建 Students 表。确保你已经连接到正确的数据库,并且有足够的权限来创建表

  1. 数据类型:定义字段可以存储的数据类型。例如,字符串类型(如CHAR、VARCHAR、TEXT等)、数值类型(如INT、FLOAT、BIGINT等)、日期和时间类型(如DATE、TIME、YEAR等)、二进制类型(如BINARY、VARBINARY等)以及Unicode数据类型(如NCHAR、NVARCHAR和NTEXT)等。
  2. 长度/大小:对于某些数据类型,如字符串或二进制类型,需要指定字段的最大长度或大小。
  3. 默认值:当插入新记录但没有为某个字段提供值时,该字段将自动采用的值。如果未设置默认值,并且字段不允许为空,那么在插入新记录时必须为该字段提供值。
  4. 非空约束(NOT NULL):规定字段在记录中不能为空。这意味着在插入或更新记录时,必须为该字段提供一个值。
  5. 唯一约束(UNIQUE):确保字段中的所有值都是唯一的。这有助于维护数据的完整性和准确性。
  6. 主键约束(PRIMARY KEY):主键是表中的一个或多个字段,其值用于唯一标识表中的每一行。主键字段的值必须是唯一的,并且不能为空。
  7. 外键约束(FOREIGN KEY):外键用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。
  8. 自动递增(AUTO_INCREMENT):某些数据库系统(如MySQL)允许为数值字段设置自动递增属性。当插入新记录时,该字段的值会自动递增,通常用于主键字段。
  9. 注释(COMMENT):为字段提供描述性信息,有助于其他开发人员理解字段的用途和含义。

这些属性在创建表时通过SQL语句的相应部分进行定义。

 4.候选键和主键的区别

候选键(候选码)和主键在关系型数据库中均扮演着重要的角色,但它们之间存在一些关键的区别。

候选键是能够唯一标识元组(即表中的每一行数据)且没有冗余的属性组合。在一个表中,可以有多个候选键,这意味着可以有多种不同的属性组合都能唯一标识表中的每一行数据。候选键的求取通常利用图示法找到入度为0的属性集合,并在此基础上进行扩展,最终找到能够遍历全图的最小属性组合。

主键则是从多个候选键中选出的一个,用于唯一标识表中的每条记录。每个关系表只能有一个主键。主键的主要用途是作为关系表中每条记录的唯一标识符,可以用来追踪、引用和修改表中的特定记录。主键的属性值在表中必须唯一,不存在重复的值,并且主键的值不能为NULL。主键可以是单个列或多个列的组合,这种多个列组合的主键也被称为复合主键。

因此,候选键和主键的主要区别包括:

  1. 数量:一个表可以有多个候选键,但只能有一个主键。
  2. 属性值:候选键的属性值可以为空值(NULL),而主键的属性值则不能为NULL。
  3. 选择:主键是从候选键中选择的一个,用于作为表中记录的唯一标识符。

总的来说,候选键和主键在关系型数据库中都是用来唯一标识表中的数据,但它们的选择、数量和属性值的约束存在区别。

数据库表的语法主要涉及到创建表(CREATE TABLE)、修改表(ALTER TABLE)、删除表(DROP TABLE)以及查询表(SELECT)等操作。

创建表 (CREATE TABLE)

CREATE TABLE table_name (  
    column1 datatype constraint,  
    column2 datatype constraint,  
    ...  
    columnN datatype constraint  
);

其中,table_name 是要创建的表的名称,column1column2, ..., columnN 是表中的列名,datatype 是相应的数据类型,constraint 是可选的列级约束(例如 NOT NULLUNIQUEPRIMARY KEYFOREIGN KEYCHECK 等)。

修改表 (ALTER TABLE)

添加列

ALTER TABLE table_name  
ADD column_name datatype constraint;

删除列

ALTER TABLE table_name  
DROP COLUMN column_name;

修改列的数据类型

ALTER TABLE table_name  
MODIFY COLUMN column_name new_datatype;

注意:不是所有的数据库系统都使用 MODIFY COLUMN 语法,例如,在SQL Server中,您可能需要使用 ALTER COLUMN

修改列的名称

通常,修改列的名称需要删除旧列并添加一个新列。不过,有些数据库系统(如PostgreSQL)提供了重命名列的语法:

ALTER TABLE table_name  
RENAME COLUMN old_column_name TO new_column_name;

添加主键

ALTER TABLE table_name  
ADD PRIMARY KEY (column_name);

删除主键

ALTER TABLE table_name  
DROP PRIMARY KEY;

添加外键约束

ALTER TABLE table_name  
ADD FOREIGN KEY (column_name)  
REFERENCES other_table(other_column);

删除表 (DROP TABLE)

DROP TABLE table_name;

这个命令会删除整个表,包括表中的所有数据,并且是不可逆的,所以执行前需要谨慎。

查询表 (SELECT)

SELECT column1, column2, ...  
FROM table_name  
WHERE condition;

SELECT 语句用于从数据库表中检索数据。FROM 子句指定要查询的表,WHERE 子句是可选的,用于指定筛选条件。

请注意,具体的SQL语法可能会根据使用的数据库系统(如MySQL、PostgreSQL、SQL Server、Oracle等)而有所不同。在执行任何数据库操作时,建议先查阅相应数据库系统的官方文档,以确保使用正确的语法和特性

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/579594.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

眼图仪参数理解和一些测量指标

参考资料: https://www.eet-china.com/mp/a35960.html 一:关于眼图仪: :::warning ●如果追溯历史,大约47年前,眼图就已经开始广泛应用。在1962年-2002的40年间,眼图的测量方法是基于采样示波器的传统方法…

3GPP相关资料收集整理

1、3GPP介绍 主页:3GPP – The Mobile Broadband Standard 3GPP(3rd Generation Partnership Project,第三代合作伙伴计划)成立于1998年12月,多个电信标准组织伙伴共同签署了《第三代伙伴计划协议》。3GPP最初的工作范围是为第三代移动通信系统制定全球适…

IDEA实现Springboot项目自动热部署

每当我们在修改代码时,往往需要重新启动项目,这样不仅浪费时间而且很麻烦,我们可以通过IDEA的热部署来提高效率 1、首先点file >> settings >> Build Excution >> Compire,选择Build project auto matically 2.…

linux kernel内存泄漏检测工具之slub debug

一、背景 slub debug 是一个debug集,聚焦于kmem_cache 分配机制的slub内存(比如kmalloc),这部分内存在内核中使用最频繁,slub debug其中有相当部分是用来处理内存踩踏,内存use after free 等异常的&#x…

虚良SEO多口子权重蜘蛛池怎么正确使用

一、蜘蛛池的工作原理 蜘蛛池的核心在于通过大量的页面和内容,提高网站的搜索引擎排名,从而获得更多的流量和曝光机会。这种策略通常被用于网站推广和SEO优化。通过将网站链接发布到蜘蛛池中,可以增加网站的曝光率,吸引更多的搜索…

数据结构与算法--稀疏数组

1.引入 比如在编写五子棋时要实现存盘退出和继续上盘的功能。 如果使用二维数组来记录,每行每列,白子对应2,黑子对应1,默认值对应0.然后这里黑子对应二维数组a[1][2]。白子对应二维数组a[2][3]。 如果棋子很少,那么这…

AtCoder Regular Contest 176 C. Max Permutation(计数 分类讨论)

题目 思路来源 乱搞ac 题解 1. 如果有边的权值是1,意味着有两个点的权值都是1,无解 2. 如果一个点i被多个max条件控制,它的值不能超过这些max里最小的那个,记做up[i] 3. 如果同一个权值w对应的边不少于2条,这些边…

Spring Task学习记录

介绍 cron表达式 cron表达式在线生成器 链接: link 入门案例 Component Slf4j public class MyTask {/*** 定时任务 每隔5秒触发1次*/Scheduled(cron "0/5 * * * * ?")public void executeTask(){log.info("定时任务开始执行:{}", new Date…

AtCoder Beginner Contest 173 F - Intervals on Tree(计数 树的性质 贡献)

题目 思路来源 洛谷题解AT_abc173_f Intervals on Tree 题解 - 洛谷专栏 题解 一棵树,考虑加边的过程,加一条边减少一个连通块 那么,逆向这个过程,没删一条边,就多一个连通块 树:点的个数边的个数1 森…

后端端口也可以直接在浏览器访问

比如在浏览器输入http://localhost:8078/hello/helloword访问的是后端的 RestController RequestMapping("/hello") public class HelloWord {RequestMapping("/helloword")public String helloWord(){return "hello word";} }浏览器将会返回

JavaEE——介绍 HTTPServlet 三部分使用与 cookie 和 session 的阐述

文章目录 一、HTTPServlet介绍其中的关键 三个方法 二、HTTPServletRequest(处理请求)1.分块介绍方法作用get 为前缀的方法字段中 含有 getParameter 字段 的方法(前后端交互):字段中 含有 getHeader 字段 的方法: 2.解释前后端的交互过程3.使用 json 格…

科技感十足特效源码

源码介绍 科技感十足特效源码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面 源码截图 源码下载 科技感十足特效源码

Python_AI库 Matplotlib的应用简例:绘制与保存折线图

本文默认读者已具备以下技能: 熟悉Python基础语法,以自行阅读python代码块熟悉Vscode或其它编辑工具的应用 在数据可视化领域,Matplotlib无疑是一个强大的工具。它允许我们创建各种静态、动态、交互式的可视化图形,帮助我们更好…

pyaibote--安卓自动化环境配置与基础的使用方法

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 pyaibote介绍 pyaibote是一个全新,强大的办公自动化库。 支持找图,识别像素等操作。 比appium快十倍。 文章介绍 有大佬给我提到这个库后,我来查看。然后发现这个库太新了&am…

Coursera: An Introduction to American Law 学习笔记 Week 04: Constitutional Law

An Introduction to American Law 本文是 https://www.coursera.org/programs/career-training-for-nevadans-k7yhc/learn/american-law 这门课的学习笔记。 文章目录 An Introduction to American LawInstructors Week 04: Constitutional LawKey Constitutional Law TermsSup…

redission原理笔记

加锁成功的线程,将UUID和线程id和key绑定, 加锁成功后,内部有一个看门狗机制,每隔十秒看下当前线程是否还持有锁,延长生存时间。 没有获取锁的就一直自旋等待,直到超时。 如果redis是主从同步的&#xff0…

Android Studio gradle 默认sourceSets配置

一. AS默认的sourceSets配置 sourceSets在Android插件中如何使用的:android {sourceSets {main {manifest.srcFile AndroidManifest.xmljava.srcDirs [src]resources.srcDirs [src]aidl.srcDirs [src]renderscript.srcDirs [src]res.srcDirs [res]assets.srcD…

Anti Rookit -- 检测隐藏进程

Anti Rookit 一:检测隐藏进程 引言 检测隐藏进程除了众所周知的枚举进程ID之外,还有枚举句柄表的方式。不过今天给大家带来的是第三种方法。 探究 应用层通过接口 C r e a t e P r o c e s s \textcolor{cornflowerblue}{CreateProcess} CreateProcess…

现代信号处理7_最小二乘(CSDN_20240428)

最小二乘法最早由高斯在18世纪提出,几百年以来,这种方法一直被广泛应用。 最小二乘简介 这里是研究最小二乘的起点。随机变量只能存在与理论计算中,我们在工程实践中对随机变量的认识与理论计算中得到的关于随机变量的各种性质相比&#xff…

Penpad 再获 Animoca Brands 投资,全新生态历程

Penpad是Scroll生态的LaunchPad & Yield Aggregator平台,该平台近日在融资上取得了系列进展。据悉,Penpad在前不久率先获得了来自于Gate Labs以及Scroll联合创始人Sandy Peng的融资,并且在近日,其又获得了来自于知名加密投资机…
最新文章