SQL Server【一】简介和基本概念和命令

数据结构和数据库的区别

数据库是应用软件级别研究数据的存储和操作(主要针对磁盘上的数据)
数据结构是在系统软件级别研究数据的存储和操作(主要是针对内存中的数据)

对硬盘数操作是数据库的强项,是数据库研究的核心问题。

什么是连接

客户端和数据库其实是分离的,客户端只是我们管理数据发送命令显示数据的工具,实际上的数据库和这个客户端没有什么关系。

客户端通过连接访问数据库,如果没有开启数据库服务就无法进行访问。

命令通过客户端发送给数据库执行。有些命令可以一起执行,有些命令无法一起执行。

数据库创建和删除

  • .mdf数据文件
  • .ldf日志文件
    系统数据库不要进行修改
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

数据库附加和分离

右击数据库->任务->分离(解除SSMS和数据库之间连接)
在这里插入图片描述
然后将数据库文件移动,再在其他机器附加.mdf文件
右键数据库->附加

需要注意的是有可能附加失败,弹出:附加操作系统错误5什么的,需要修改文件的权限:
在这里插入图片描述如图,添加完全控制。

SQL Server创建登录用户

注意只有管理员才能创建其他用户,注意创建账号的时候去掉强制密码过期

关系型数据库基本概念

  • 字段:列、属性,用来模拟许多事物的某一个静态特征
  • 记录:行、元组,用来模拟一个事物的许多静态特征,表示事物本身
  • 表:记录的组合,用来模拟同类事物的集合
  • 主键:唯一标识事务
  • 外键:表示该元素和另一个表中元素的关系(一般是多对一的多中含有外键,就是说如果一个表A的某个属性是另一个表B中的属性,且表A中许多记录的属性都是相同的,则应该在表A中添加主键。因为如果我们在表B中添加主键,那么每个表B中的记录都对应多个表A的记录,无法在一个格子中添加,即B->A不是函数

在这里插入图片描述

创建表

创建表之前需要创建库
nvarchar 表示国家化编码可以变化的字符串(支持汉字)
允许NULL值表示是否允许这个属性不填
在这里插入图片描述
dbo表示当前用户是管理员身份

含有外键的表叫做外键表

添加外键

使用图形界面

对某一列选择关系
在这里插入图片描述在这里插入图片描述

使用命令

新建查询,选择对应的数据库
在这里插入图片描述注释使用 --,需要注意的是每条语句后面都应该加上逗号,最后一条语句后面可以加上逗号也可以不加上(Oracel不能在最后一条语句后面加上逗号)

create table dept
(dept_id int primary key,dept_name nvarchar(100) not null,dept_address nvarchar(100)
)create table emp
(emp_id int constraint pk_emp_id primary key,emp_name nvarchar(20) not null, --nvar表示国际化支持汉字可以变化的字符串emp_sex nchar(1),dept_id int constraint fk_dept_id foreign key references dept(dept_id)
)

点击感叹号后执行,然后刷新数据库中的表,就可以看到新建的表。

约束

对一个表中属性操作的限制叫做约束

分类:

  • 主键约束:不允许重复数据,避免数据冗余(实体完整性
  • 外键约束:通过外键约束从语法上保证本事物所关联的其他事物一定是存在的(引用完整性),事物和事物之间的关系是通过外键来体现的
  • check约束:保证事物属性的取值在合法的范围内
create table student
(std_id int primary key,std_sal int check(std_sal>=1000 and std_sal<=8000)
)insert into student values (1, 1000)
insert into student values (2, 10000)
  • default约束:保证事物的属性一定会有一个值
create table student
(std_id int primary key,std_sal int check(std_sal>=1000 and std_sal<=8000),std_sex nchar(1) default ('男') --()可以省略,在数据库中字符串必须用''括起来--数据库中的单引号用来表示字符串--数据库中的双引号用来表示事物的名称
)insert into student(std_id, std_sal) values (1, 1000)
insert into student values (2, 10000, '女')

如果在前面省略了插入字段的集合,则在后面必须给所有属性赋值
允许为空和default之间:可以认为允许为空为defaultNull

insert如果没有给所有的字段赋值,则必须在表后面加上所赋值字段的集合,无论没有赋值的字段是为空还是有default值

  • 唯一约束:保证事物属性的取值不允许重复,但允许为空
create table student1
(std_id int primary key,std_sal int check(std_sal>=1000 and std_sal<=8000),std_sex nchar(1) default ('男'),std_name nvarchar(200)  unique
)insert into student1 values (1, 6000, '男', '张三')
insert into student1 values (2, 2000, '女', null) --唯一键可以为空,但是主键不允许为空

uniquenot null可以组合使用,这样也不能为空了

create table student1
(std_id int primary key,std_sal int check(std_sal>=1000 and std_sal<=8000),std_sex nchar(1) default ('男'),std_name nvarchar(200)  unique not null
)

虽然允许其中一个为空,但是不能有多个空但是Orecal里面允许多个字段为空

  • not null约束:要求用户必须为该属性赋一个值,否则语法出错。默认允许为空,如果不写not null 则不允许为空

唯一约束和主键约束之间的关系

create table student
(std_id int primary key identity,	--添加一个没有实际意义的字段当作主键,即代理主键-- identity 表示插入元素的时候不需要录入,自动增长--只有主键能够作为外键std_name nvarchar(50) unique not null,	--不要使用业务逻辑当作主键-- 原因1:当使用具有实际意义的字段当作主键的时候,这个字段的元素有可能会改变-- 原因2:查找元素的时候一般按照主键进行查询,使用整型数字更好,效率更高-- 原因3:拥有实际意义的字段一般比较长,浪费储存空间std_email nvarchar(50) not null,-- 默认允许为空,如果不写not null 则不允许为空std_address nvarchar(50)
)

表和约束之间的区别:

通过表来解决事物的存储
通过约束来解决事物取值的有效性和合法性的问题
建表的过程就是指定事物属性以及事物属性各种约束的过程

关系

一对一
一对多
多对多

通过设置不同的外键来表示表和表的不同关系

一对一

  • 关联的实体共享一个主键
  • 其中一个实体通过外键关联到另外一个实体的主键,需要在外键列添加唯一约束
  • 通过外键表表示实体之间的关系

一对多(A表和B表)

B表添加外键关联到A的主键,不需要在外键列添加唯一约束。即在多的一方添加外键。本质上要满足函数关系

多对多(A表和B表)

多对多必须通过单独的一张表来表示

create table cls
-- 表示class,表名不要写复数,写单数
(cls_id int primary key,cls_num int not null,cls_name nvarchar(10)
)create table teacher
(teacher_id int primary key,teacher_name nvarchar(10) not null
)create table cls_teacher_mapping
-- 用来模拟班级和教师的多对多关系
(rela_cls int constraint fk_cls foreign key references cls(cls_id),rela_teacher int constraint fk_teacher foreign key references teacher(teacher_id),rela_course nvarchar(10),constraint pk_cls_teacher primary key (rela_cls,rela_teacher),--主键只允许有一个,外键可以有多个
)insert into cls values (1, 20, 'one')
insert into cls values (2, 30, 'two')
insert into cls values (3, 40, 'three')insert into teacher values (1001, 'a')
insert into teacher values (1002, 'b')
insert into teacher values (1003, 'c')
insert into teacher values (1004, 'd')insert into cls_teacher_mapping values (1, 1001, 'C')
insert into cls_teacher_mapping values (2, 1002, 'C++')
insert into cls_teacher_mapping values (3, 1001, 'C')
insert into cls_teacher_mapping values (2, 1003, 'Python')

在这里插入图片描述

主键

主键:能够唯一标识事物的一个字段或者多个字段的组合

主键的特征

  • 主键通常都是整数(不建议使用字符串当作主键,除非是用于集群式服务的时候)。
    集群式服务:用户的一个请求可能需要使用不同主机的数据库才能够完成一个服务
  • 主键的值通常不允许修改,除非本记录被删除(如果该主键作为其他表的外键的时候如果修改可能导致数据丢失)
  • 主键一般定义为表名_id,或者表名Id
  • 要用代理主键,不要使用业余主键。即不要使用有业务含义的字段当作主键

外键

外键:如果一个表中的若干个字段是来自若干个表的主键或者唯一键,则这若干个字段就是外键

注意:外键通常是来自另外表的主键而不是唯一键,因为唯一键可能为Null或者被修改

外键不一定来自其他表,也可能来自本表的主键。例如,员工表里面上司字段就是员工表的主键

含有外键的表叫做外键表,外键字段来自的那张表叫做主键表

主键表和外键表的删除问题

应该先删除外键表。先删除主键表,则使得外键表的数据引用失败。如果坚持删除,应该先删除关系。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux下网络socket编程——实现服务器(select)与多个客户端通信

一、关于socket通信 服务器端工作流程&#xff1a; 调用 socket() 函数创建套接字 用 bind() 函数将创建的套接字与服务端IP地址绑定调用listen()函数监听socket() 函数创建的套接字&#xff0c;等待客户端连接 当客户端请求到来之后调用 accept()函数接受连接请求&#xff0c…

SQL Server【四】

identity 主键自动增长&#xff0c;用户不需要为identity修饰的主键赋值 create table student (std_id int primary key identity(10,5),--(10,5)可以省略&#xff0c;默认为(1,1)std_name nvarchar(200) not null ) select * from student insert into student values (张三…

计算机网络【4】传输层

概述 传输层是只有主机才有的层次 传输层的功能&#xff1a; 传输层提供进程和进程之间的逻辑通信&#xff08;网络层提供主机与主机之间的逻辑通信&#xff09;复用和分用传输层对收到的报文进行差错检测 传输层有两个协议&#xff1a; 面向连接的传输层控制协议TCP&…

计算机网络【0】概述

计算机网络概念和功能 概念 是一个将分散的、具有独立功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。 计算机网络是互连的、自治&#xff08;无主从关系&#xff09;的计算机集合。 功能 数据通信&am…

计算机网络【1】物理层

物理层解决如何在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是指具体的传输媒体。 确定与传输媒体接口有关的特性 机械特性&#xff1a;定义物理连接的特性&#xff0c;如规格、接口形状、引线数目、引脚数目、排列电气特性&#xff1a;规定传输二进制位时的电…

计算机网路【2】数据链路层

结点&#xff1a;主机、路由器 链路&#xff1a;两个节点的物理通道 数据链路&#xff1a;逻辑通道&#xff0c;把实现 控制数据传输协议的硬件和软件加到链路上就构成数据链路 帧&#xff1a;链路层的协议数据单元&#xff0c;封装网络层数据报 数据链路层在物理层提供服务的…

计算机网络【5】应用层

应用层对应用程序的通信提供服务 应用层协议定义&#xff1a; 应用层的功能&#xff1a; 文件传输、访问和管理电子邮件虚拟终端查询服务和远程作业登录 重要协议&#xff1a;FTP、SMTP、POP3、HTTP、DNS 网络应用模型 客户/服务器模型&#xff08;Client/Server&#x…

操作系统【八】文件管理

文件&#xff1a;一组有意义的信息/数据集合 文件的属性&#xff1a; 文件名&#xff1a;由创建文件的用户决定文件名&#xff0c;主要是为了方便用户找到文件。同一个目录下不允许有重名文件标识符&#xff1a;一个系统内的个文件标识符唯一&#xff0c;对用户来说毫无可读性…

数据库原理及应用【六】数据库设计

数据依赖 函数依赖FD&#xff1a;一个属性或者一组属性的值可以决定另一个属性的值 多值依赖MVD&#xff1a;一个属性或者一组属性的值可以决定另一个属性的值的集合。FD是MVD的特例 符号表示&#xff1a;Name->->Course&#xff0c;课程多值依赖于姓名 连接依赖&#x…

数据库原理及应用【二】数据模型

层次模型 tree Record and fieldParent-Child relationship(PCR) 每个记录类型只有一个父节点 无法表达多对多信息 采用虚记录解决多对多 网状数据模型 系&#xff1a;主记录->属记录 主记录和属记录都可以有好多个 关系模型 表&#xff1a;table/relation 拥有更高的…

数据可视化【二】HTML+CSS+SVG+D3

HTML、CSS和SVG学习实现代码&#xff1a;https://vizhub.com/Edward-Elric233/89185eb96bc64a9d81777873a0ccd0b9 index.html <!DOCTYPE html> <html><head><title>Shapes with SVG and CSS</title><link rel"stylesheet" href&qu…

数据可视化【三】基本概念

Visualization is suitable when there is a need to augment human capabilities rather than replace people with computational decision-making methods. 当可以信赖的智能化的解决方案存在的时候&#xff0c;可视化是不必要的。 当不知道需要分析的问题是什么的时候&…

数据可视化【四】Bar Chart

Make a Bar Chart Representing a data table in JavaScriptCreating rectangles for each rowUsing linear and band scalesThe margin conventionAdding axes 以下学习内容参考博客&#xff1a;传送门 select()选择所有指定元素的第一个 selectAll()选择指定元素的全部 上…

数据库原理及应用【三】DBMS+SQL

DBMS Query LanguagesInterface and maintaining tools(GUI)APIsClass Library QL 不是图灵完备的&#xff0c;不是一种编程语言。 QL SQL是一种非过程化的查询语言。 DDL数据定义语言&#xff1a;表&#xff0c;视图QL 查询语言DML 数据操纵语言DCL 数据控制语言 Base t…

数据可视化【五】 Scatter Plot

Scatter Plot vizhub上实现的代码&#xff1a; https://vizhub.com/Edward-Elric233/53807a1b35d94329b3689081cd2ea945 https://vizhub.com/Edward-Elric233/b9647d50899a4a0e8e917f913cd0a53a https://vizhub.com/Edward-Elric233/8c6b50cd81a04f048f490f48e4fe6264 由前…

数据可视化【六】Line Chart Area Chart

Line Chart vizhub代码&#xff1a; https://vizhub.com/Edward-Elric233/094396fc7a164c828a4a8c2e13045308 实现效果&#xff1a; 这里先使用d3.line()设置每个点的x坐标和y坐标&#xff0c;然后再用这个东西设置path的d属性&#xff0c;就可以得到曲线。 const lineGen…

数据可视化【七】 更新模式

Enter 以下面这个简单的代码进行分析 const svg d3.select(svg); // svg.style(background-color, red); testconst height svg.attr(height); // equals paresFloat() const width svg.attr(width);const makeFruit type >( {type} ); //这种写法好像能够直接得到一个…

数据可视化【八】根据数据类型选择可视化方式

Marks:Rows PointsLinesAreas Channels:Columns PositionColorShape

数据可视化【九】单向数据流交互

我们使用一下上上篇博客的代码。 例如我们想要当鼠标点击水果的时候会出现黑色的框&#xff0c;再点击一下黑色的框就会消失。 首先&#xff0c;我们应该给组件添加点击事件&#xff1a; fruitBowl.js gruopAll.on(click, d > onClick(d.id));这个on函数第一个参数是事件…

数据库原理及应用【四】数据库管理系统

查询优化 数据库管理系统中非常重要的一部分。 代数优化 按照一定的规则将语句变化成关系代数以后进行优化 操作优化 对代数优化后的查询树使用比较好的方法进行查询。 主要是对连接运算进行优化 嵌套循环归并扫描索引优化哈希连接 恢复机制 备份&#xff08;完整备份差…