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.pswp.cn/news/383637.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383637.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383637.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL Server【二】單表查詢

查詢 計算列 select * from emp; -- *通配符&#xff0c;表示所有的字段 -- from emp 從emp表查詢select empno, ename from emp; select ename as "員工姓名", sal*12 as "年薪" from emp;-- as可以省略&#xff0c;用于設置字段名 -- 注意用雙引號將字…

SQL Server【三】連接查詢

將兩個表或者兩個以上的表以一定的連接條件連接起來&#xff0c;從中檢索出滿足條件的數據。 內連接 使用inner join&#xff0c;inner可以省略 -- 查詢員工的姓名和部門名稱 select "E".ename as "員工姓名", "D".dname as "部門名稱&q…

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 (張三…

TCP服務器/客戶端實例(C/C )

1.1、Linux下的TCP服務器&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h>void error_handling(char *mess…

pip代理解決pip下載失敗問題

在用pip下載各種庫的時候發現速度實在是太慢了&#xff0c;還會有各種奇奇怪怪的問題&#xff0c;動不動就玄學失敗。 在網上找來找去找到知乎上一位大佬的回答&#xff1a;傳送門&#xff0c;用了豆瓣的代理。哇咔咔&#xff0c;媽媽再也不用擔心我下載失敗了。 代理&#x…

實現Linux select IO復用C/S服務器代碼

服務器端#include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<string.h> #include<sys/socket.h> #include<sys/stat.h> #include<arpa/inet.h> #include <sys/select.h>#define MAXBUF 256 #define MAXLISTEN…

Bellman-Ford算法和SPFA算法

Belloman-Ford算法 算法介紹 Dijkstra可以解決單源無負邊最短路徑問題。但是當遇到含有負邊的單源最短路徑問題就需要使用Bellman-Ford算法來解決。Bellman-Ford算法還可以檢測出負環。 算法步驟 源點s,數組d[u]d[u]d[u]表示s到u的最短距離初始化&#xff1a;d[s]0d[s]0d[s…

C語言實現單鏈表操作

SLIST_H #ifndef __SLIST_H__ #define __SLIST_H__ #include<cstdio> #include<malloc.h> #include<assert.h> typedef int ElemType; typedef struct Node { //定義單鏈表中的結點信息 ElemType data; //結點的數據域 struct Node *next; //結點的指針…

計算機網絡【4】傳輸層

概述 傳輸層是只有主機才有的層次 傳輸層的功能&#xff1a; 傳輸層提供進程和進程之間的邏輯通信&#xff08;網絡層提供主機與主機之間的邏輯通信&#xff09;復用和分用傳輸層對收到的報文進行差錯檢測 傳輸層有兩個協議&#xff1a; 面向連接的傳輸層控制協議TCP&…

Plotly繪圖

在做Python數據分析實驗的時候發現使用Plotly庫繪圖比較漂亮&#xff0c;在網上找到了一個比較好的教程&#xff0c;這里記錄一下&#xff0c;方便以后查找。 傳送門

計算機網絡【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…

數據可視化【一】JavaScript學習

本博客是我學習Curran Kelleher老師數據可視化課程的筆記&#xff0c;感興趣的小伙伴可以點擊這里學習。 three cores of data visualization: analysisdesignconstruction 推薦書籍《visualization analysis & design》 使用https://vizhub.com/進行編程學習&#xff…

數據庫原理及應用【二】數據模型

層次模型 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…