sql server 数据库的学习

news/2024/5/18 12:16:39

前言:

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.mrgr.cn/p/21008757

相关文章

整合文本和知识图谱嵌入提升RAG的性能

我们以前的文章中介绍过将知识图谱与RAG结合的示例,在本篇文章中我们将文本和知识图谱结合,来提升我们RAG的性能https://avoid.overfit.cn/post/5782ca7c4695427b8c0299ad0887c564

[题解]ABC337E Bad Juice

ABC337E Bad Juice 一开始的想法如下:就是利用二分法,对于一个区间\([l,r]\),分成\([l,mid-1],[mid,r-1]\)两部分,各找两个朋友喝,右边还空出一个\(r\),如果前面两个朋友都没中毒,那说明\(r\)这瓶有毒。 但仔细一想,我们发现\([1,n)\)的瓶子中任意一个我们分出的区间\(…

Unity 热更--AssetBundle学习笔记 1.0【AB包资源加载工具类的实现】

本文介绍AB包资源加载的6种方式,封装实现成单例工具类,方便在开发中进行调用。工具类封装 通过上文中对AB包加载API的了解和简单使用,对AB包资源加载的几种方法进行封装,将其写入单例类中,如代码展示。 确保每个AB资源包只加载一次: 在LoadAssetBundleManager 单例工具类…

pycnblog的使用

功能一键拖拽上传 默认“未发布”,可选择直接发布 重复上传,提示是否更新博客环境 python3是需要python环境的,python的安装自己去百度一下 pycnblog的使用git clone git@github.com:dongfanger/pycnblog.gitpip install pyyaml注意 博客园6.21更新,MetaWeblog现在不支持密…

C语言 | Leetcode C语言题解之第55题跳跃游戏

题目&#xff1a; 题解&#xff1a; #define max(a, b) (((a) > (b)) ? (a) : (b))bool canJump(int* nums, int numsSize){int cover 0;int i;// 只可能获取cover范围中的步数&#xff0c;所以i<coverfor(i 0; i < cover; i) {// 更新cover为从i出发能到达的最大…

Scala应用 —— JDBC的创建

文章目录 Scala应用 —— JDBC的创建前言一、JDBC的创建过程1.初始化连接1.1 配置驱动1.2 创建连接对象 2. 初始化执行器2.1 创建执行器对象2.2 初始化执行器参数 3. 执行操作并返回结果 二、Scala JDBC的基本设计思路1. 操作步骤设计2. 解决结果差异化3.实现jdbc方法并输出结果…

pyqt 按钮常用格式Qss设置

pyqt 按钮常用格式Qss设置 QSS介绍按钮常用的QSS设置效果代码 QSS介绍 Qt Style Sheets (QSS) 是 Qt 框架中用于定制应用程序界面样式的一种语言。它类似于网页开发中的 CSS&#xff08;Cascading Style Sheets&#xff09;&#xff0c;但专门为 Qt 应用程序设计。使用 QSS&am…

面试:JVM垃圾回收

一、三种垃圾回收算法 1、标记清除&#xff08;已废弃&#xff09; 找到根对象&#xff08;局部变量正在引用的对象、静态变量正在引用的对象&#xff09;&#xff1b;沿着根对象的引用链&#xff0c;查看当前的对象是否被根对象所引用&#xff0c;若被引用&#xff0c;则加上…

自动化测试 selenium基础

前言 我们都知道测试开发工程师的任务是根据用户需求测试用例的同时,害的开发自动化工具来减轻测试压力且提高测试的效率以及质量,这一节我们就来简单谈谈开发简单的自动化工具基础 什么是自动化测试呢?就是将我们需要做的测试交给机器去做,也就是使用代码来模拟人对于机器的行…

.Net 8.0 下的新RPC,IceRPC之使用Dev Containers进行 .NET QUIC 精简开发

作者引言很高兴啊,我们来到了IceRPC之使用Dev Containers进行 .NET QUIC 精简开发,主要是一篇指引,如何使用开发容器做为开发环境,进行开发IceRPC,可适用于任务应用的开发使用 Dev Containers 进行 .NET QUIC 精简开发主要是引导大家,如何使用开发容器Development Contain…

Django整合多种认证方式

承接上一篇&#xff1a;Django知识点总结-CSDN博客 目录 25.使用 Django REST framework实现用户认证和授权 26.通过djangorestframework-simplejwt使用JWT(JSON Web Token) 27.使用django-auth-ldap进行用户认证 28. 使用django-cas-ng实现集中认证及实现单点登录 29. …

全网最全的nginx服务器部署-命令行_network

选用的服务器 我选用的阿文云服务器,地址是香港,优点是价格十分便宜登录 | 阿文云计算 (xn--kcr903c616a.cn)ssh登录服务器 我用的是ubuntu的里面的ssh去登录,用的虚拟机ssh -l root [你的服务器地址]ssh -l root 38.55.232.150命令的配置 安装依赖 yum install -y gcc-c+…

JDK8和JDK17共存以及切换的方法

1、先安装"jdk-8u381-windows-x64.exe",再安装"jdk-17_windows-x64_bin.exe" 2、"系统属性"-"高级"-"环境变量"-"系统变量"-"Path"-"编辑",删除以下2条 C:\Program Files\Common Files\Ora…

NLP(10)--TFIDF优劣势及其应用Demo

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 TF*IDF&#xff1a; 优势&#xff1a; 可解释性好 可以清晰地看到关键词 即使预测结果出错&#xff0c;也很容易找到原因 计算速度快 分词本身占耗时最多&#xff0c;其余为简单统计计算 对标注数据依赖小 可以使用无标注语…

PC通过串口发送指令控制LED+串口中断

如何让单片机接收数据&#xff1f; 首先要打开SCON中的串行接收控制位REN。当REN1时为允许接收状态&#xff0c;可以接收信息。 因此令SCON 0x50&#xff1b; 怎么知道收到数据&#xff1f; 利用RI接收中断请求标志位。当串行接收到第8位结束时由内部硬件自动置为RI1&#…

全网最全的nginx服务器部署-命令行

选用的服务器 我选用的阿文云服务器,地址是香港,优点是价格十分便宜登录 | 阿文云计算 (xn--kcr903c616a.cn)ssh登录服务器 我用的是ubuntu的里面的ssh去登录,用的虚拟机ssh -l root [你的服务器地址]ssh -l root 38.55.232.150命令的配置 安装依赖 yum install -y gcc-c+…

centos7修改redis密码

检查Redis配置文件 首先,我们需要确保Redis的配置文件中包含了设置密码的选项。打开Redis的配置文件/etc/redis.conf,查找以下行并确保取消注释(去掉行首的#): requirepass your_password 启动Redis服务 使用以下命令启动Redis服务: systemctl start redis 如果Redis已经…

hgame2023 vm

vm逆向 hgame2023 vm 简单翻阅一下发现,sub_140001000里面是vm_init,sub_1400010B0是主要的vm部分查看vm_init部分,发现只知道cpu结构的大小以及初始值和24-32字节的结构,前24字节的结构未知,暂时还无法构建cpu的结构,需要更多的信息。分析下面两图的函数可以得知,opcod…

【IO操作】标准IO和文件IO

一.标准IO和文件IO的区别 &#xff08;1&#xff09;一般标准IO指的是C语言的IO操作&#xff0c;文件IO一般指的是Linux系统调用的IO操作。标准O因为是C语言提供的标准库&#xff0c;所以可以在其他操作系统平台编译后可以执行&#xff0c;但是文件IO只能在Linux下使用&#x…