SQL server學習數據庫的基本知識、基本操作和基本語法

溫故而知新

閱讀目錄

基本知識

基本操作

基本語法

基本知識

數據庫到底是有什麼作用?看下圖應該就明白了。

就是應用程序發送請求操作時,到服務器數據庫中查詢數據,然後再返回給應用程序。

數據庫起到的作用是存儲數據、檢索數據、生成新的數據,相對應的要求是:統一、安全、性能。

數據庫可以存儲大量數據,方便檢索和訪問,能保持數據信息的一致、完整,共享和安全,通過組合分析,產生新的有用信息。

數據庫發展史

萬物生長,如今使用的數據庫也不是一蹴而就,也是慢慢發展而來。可分爲四個階段:

①萌芽階段—文件系統,只是使用磁盤文件來存儲數據

②初級階段—第一代數據庫Access,是網狀模型和層次模型數據庫

③中級階段—第二代數據庫SQL server、Mysql,是關係型數據庫和結構化查詢語言

④高級階段—新一代數據庫Oracle,是“關係-對象”型數據庫

當下最流行的數據庫是Oracle、SQL server、DB2

Oracle是“關係-對象”型數據庫,它的特點是產品免費、服務收費

SQL server是關係型數據庫,多版本,易用性好

DB2支持多操作系統、多種類型的硬件和設備

數據庫名詞

DBA-----數據庫管理人員

DB-------數據庫

DBMS--數據庫管理系統

系統數據庫:master、model、tempdb、msdb,不能隨意更改

數據文件爲.mdf或.ndf

日誌文件爲.ldf

數據的默認路徑爲:C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data

SQL組成

DML(數據操作語言)

  ——查詢、插入、刪除和修改數據庫中的數據;

  ——SELECT、INSERT、 UPDATE 、DELETE等;

DCL(數據控制語言)

  ——用來控制存取許可、存取權限等;

  ——GRANT、REVOKE 等;

DDL(數據定義語言)

  ——用來建立數據庫、數據庫對象和定義其列

  ——CREATE TABLE 、DROP TABLE 等

TCL  (事務控制語句)

        變量說明、流程控制、功能函數

  ——定義變量、判斷、分支、循環結構等

  ——日期函數、數學函數、字符函數、系統函數等

數據庫基本操作

登錄數據庫

在安裝成功後,在開始菜單中會看到如下所示文件夾:

點擊SQL server management studio,即可出現如下登錄界面:

數據庫遠程連接設置

第一步,打開外圍配置器設置

第二步,進行相應設置

第三步,進行連接操作

數據庫的分離操作

分離是指默認情況下數據庫在聯機狀態下我們不能對數據庫文件進行任何複製刪除等操作,如果將數據庫分離的話就可以對數據文件進行復制、剪切、刪除等操作了。一般想直接備份數據文件,就先分離數據庫,之後把數據文件複製到別的地方,再把數據文件附加回去就可以了。

操作如下所示:

先將數據庫進行分離操作:

完成上述操作,數據庫便分離成功,然後就可以做相應的複製等操作了。

分離也可以使用代碼實現,如下

1

sp_detach_db demo

再將分離的數據庫附加到工作面板:

附加也可以使用代碼實現,如下:

sp_attach_db demo

數據庫的脫機、聯機操作

脫機與聯機是相對操作,先要有脫機才能執行聯機操作,與分離不同的是,脫機後的數據庫只是不能被訪問了,但還在工作面板中,但分離後的數據庫,是不存在工作面板中的。當要再想使用該數據庫,脫機狀態的數據庫只需要聯機即可,分離的數據庫需要附加纔可以。

脫機操作如下:

脫機也可使用代碼實現,代碼如下:

alter database demo set offline

聯機操作如下:

聯機也可使用代碼實現,代碼如下:

alter database demo set online

數據庫收縮操作

收縮是把數據庫以及日誌的內存收縮

操作如下

收縮數據庫操作:

收縮日誌文件操作:

收縮文件也可使用如下命令:

DBCC ShrinkFile('數據庫名',  targetsize);            /* 收縮數據庫文件 */
DBCC ShrinkFile('數據庫名_log',  targetsize);        /* 收縮日誌文件 */

需要注意的是:

Targetsize:單位爲兆,必須爲整數,DBCC SHRINKFILE 嘗試將文件收縮到指定大小。

DBCC SHRINKFILE 不會將文件收縮到小於“實際使用的空間”大小,例如“分配空間”爲10M,“實際使用空間”爲6M,當制定targetsize爲1時,則將該文件收縮到6M,不會將文件收縮到1M。

收縮數據庫可使用如下命令:

DBCC SHRINKDATABASE(數據庫名,百分比)

此處的百分比:即“收縮後文件中的最大可用空間”,取值範圍“大於等於0, 小於100%”,實際使用中設爲0即可。

數據庫的備份、還原操作

備份操作是爲了保證數據的完整性以及避免異常操作而導致數據無法挽回的操作,個人覺得是非常非常有必要的。

數據庫的備份分爲如下幾種:

完全備份: 備份全部選中的文件夾,並不依賴文件的存檔屬性來確定備份那些文件。(在備份過程中,任何現有的標記都被清除,每個文件都被標記爲已備份,換言之,清除存檔屬性)。完全備份也叫完整備份。

差異備份: 差異備份是針對完全備份:備份上一次的完全備份後發生變化的所有文件。(差異備份過程中,只備份有標記的那些選中的文件和文件夾。它不清除標記,即:備份後不標記爲已備份文件,換言之,不清除存檔屬性)。

事務日誌備份: 在特定事務日誌備份之前執行的完整數據庫備份和上次差異備份(如果有)。在完整數據庫備份之後執行的所有事務日誌備份或在特定事務日誌備份之前執行的差異備份(如果您還原了差異備份)。如果你設置了恢復模式爲【簡單】,你將無法使用【事務日誌】備份。SQL Server 2000 和 SQL Server 2005: 創建事務日誌備份,您必須使用完整恢復或大容量日誌記錄恢復模型。

備份操作如下,此處選擇的是完整備份:

還原數據庫操作

權限設置

權限設置就是設置登錄名和用戶名操作。

登錄名與用戶名的區別:

1.登錄名是指可以使用新建的登錄名和密碼登錄數據庫這個程序軟件,但不能打開或展開用戶自己創建的數據庫;

2.用戶名是在登錄名基礎上,爲用戶自己創建的數據庫新加的可查看用戶,但要進行增查改刪操作仍然需要爲該用戶添加使用權限。用戶名可以與登錄名相同,也可以不同。一個數據庫可以擁有多個用戶,一個用戶也可以訪問多個數據庫。

先以sa爲登錄名登錄做如下操作:

創建登錄名:

使用剛創建的登錄名登錄,去使用由sa用戶創建的數據庫,發現不可用:

創建用戶,分配權限

添加好後就可以對sa創建的數據庫進行操作了

基本語法

說了這麼多,再來看數據庫語法怎麼操作,數據庫四大操作,就是增刪改查。在做這些操作的時候,首先得要有個數據庫,有張表,這樣纔可以操作。把問題簡單化,想成平時的檔案室。數據庫就是檔案室,可以存放很多檔案,表就是檔案袋中的文件。

創建數據庫

建數據庫和建表操作可手動創建,也可以使用代碼創建,先看手動創建:

手動創建數據庫操作如下:

完成上述兩步就已經創建好一個數據庫了。

在使用代碼操作的時候,需要先做如下所示操作,並連接:

使用代碼創建數據庫,實現如下:

create database demo
use demo

還有一種創建數據庫語法,就是指定數據庫文件參數和日誌文件參數,語法如下:

複製代碼

create  database  數據庫名
on [primary]
 (
  <數據文件參數> [,…n]  [<文件組參數>]
 )
 [log on] 
 (
  <日誌文件參數> [,…n]
 )

複製代碼

舉例如下:

複製代碼

CREATE DATABASE stuDB
   ON  PRIMARY  --默認就屬於PRIMARY主文件組,可省略
(
 NAME='stuDB_data',  --主數據文件的邏輯名
 FILENAME='D:\project\stuDB_data.mdf',  --主數據文件的物理名
 SIZE=5mb,  --主數據文件初始大小
 MAXSIZE=100mb,  --主數據文件增長的最大值
 FILEGROWTH=15%   --主數據文件的增長率
)
LOG ON
(
  NAME='stuDB_log',
  FILENAME='D:\project\stuDB_log.ldf',
  SIZE=2mb,
  FILEGROWTH=1MB
)
GO 

複製代碼

若一次性要創建多個數據庫或多個日誌文件,在小括號外加個,號即可

創建表

手動創建表,操作如下:

 

保存輸入表名即可

使用代碼創建表如下:

 

代碼爲:

複製代碼

create table demo
(
nname nchar(10),
age tinyint,
sex int
)

複製代碼

數據庫和表已經創建好了

首先來看增

1、插入一條數據:

方法一:安照列名依次給出數據值,不能交換順序,數據類型不能出錯

insert into demo
values
('zhang',25,1)

方法二:

insert into demo
(nname,age,sex)
values
('san',18,0)

方法三:交換順序,數值按照列名給就行

insert into demo
(nname,sex,age)
values
('san',1,22)

方法四:沒給數值的列顯示null

insert into demo
(nname)
values
('li')

2、插入多條數據:

使用select,union是指連接的意思

insert into demo(nname,age,sex)若不寫列名,則默認插入所有列數據
select 'wang',28,0 union
select 'wu',30,1

3、插入一列

alter table demo
add sex int

4、複製demo表中數據到demo1表中:

insert into demo1(nname,nage,asex)
select nname,age,sex
from demo

注意事項

1:每次插入一行數據,不可能只插入半行或者幾列數據,因此,插入的數據是否有效將按照整行的完整性的要求來檢驗;

2:每個數據值的數據類型、精度和小數位數必須與相應的列匹配;

3:不能爲標識列指定值,因爲它的數字是自動增長的;

4:如果在設計表的時候就指定了某列不允許爲空,則必須插入數據;

5:插入的數據項,要求符合檢查約束的要求

6:具有缺省值的列,可以使用default(缺省)關鍵字來代替插入的數值

其次來看刪

刪除某一行:

delete from demo
where nname='li'

刪除某一列:

alter table demo
drop column sex

刪除整張表:

delete from demo --不加where條件就是刪除整個表

清空整張表:

truncate table demo

注意:刪除整張表操作和清空整張表操作對比

  刪除是刪除了所有,包括表結構

  清空只是清空了表中數據,但表結構還在,清空速度快些

刪除數據庫

drop database new

還可以先查詢是否有該數據庫,再做刪除操作,代碼如下:

if exists(select * from sys.databases where name='new')
drop database new

做了一個if判斷,sys.databases是指整個系統數據庫,刪除數據庫的前提條件是,要刪除的這個數據庫沒有被使用

然後來看改

改某一列數據

update demo
set
age='28'
where nname='zhang'

set是設置要改的數據

改多列數據:

複製代碼

update demo
set
nname='zhao',
age='13',
sex='0'
where nname='li'

複製代碼

最後就是查詢

查詢表中所有數據,*代表所有列:

select * 
from demo

查詢表中某一行所有數據:

select * 
from demo
where nname='li'

查詢表中某一行某一列的數據:

select age
from demo
where nname='li'

查詢出來的結果列用as取別名:

select age as '年齡'
from demo
where nname='li'

查詢出來的結果列用=取別名:

select wname = nname
from demo

注意:wname是新列名,nname是表中已存在的列名

添加約束

約束目的:保證數據的完整性和有效性

約束分爲如下幾種:

1.主鍵約束:唯一非空(特點) primary key PK_

  一個表裏面只能存在一個主鍵

  允許存在把兩列作爲一個主鍵

2.默認約束:默認值 default key DK_

  當不填數據時默認採用設定好的值

3.唯一約束:數據不重複,允許一行數據爲空 Unique Key 唯一允許一個爲空

4.檢查約束:用來檢查填入的數據是否滿足要求 Check Key

5.非空約束:不能爲空 not null

6.外鍵約束:外鍵指的是,表A中的id爲主鍵,但在表B中id不是主鍵,表A的id就是表B的id外鍵。

外鍵語法:

alter table 表名
add constraint FK_字段名--"FK"爲外鍵的縮寫
foreign key (字段名) references 關聯的表名(關聯的字段名) --注意'關聯的表名'和'關聯的字段名'

添加約束有三種方式,分別是建表中(在列名中添加和不在列名中添加),建表後

方法一:建表中在列名中添約束,語法爲:列名 數據類型 約束條件,代碼如下:

複製代碼

create table dome5
(
 sid  smallint primary key,
 sname nchar(10) not null default 'zhangsan',
 saddre nvarchar(20),
 sage tinyint unique key,
 semail  char(20) check (semail like '%@%.%'),
 createtime datetime  default getdate()
)

複製代碼

方法二:建表中不在列名中添加約束,語法爲:constraint    約束名    約束語法,代碼如下:

複製代碼

create table stdent2
(
    sid int,
    sname nchar(15) not null default 'zhangsan',
    saddress nvarchar(30),
    sage tinyint,
    semail char(20),
    stime datetime default getdate(),

    constraint PK_sid primary key(sid),
    constraint CK_sage check (sage>10),
    constraint CK_semail check (semail like '%@%.%')
)

複製代碼

需要注意的是:默認約束只能在 列名  數據類型   後面添加,意思就是默認約束要使用在方法一添加

方法三:建完表後再添加約束,代碼如下:

alter table stu
add constraint ck_ssex check (ssex=0 or ssex=1)

alter是修改表結構

數據類型

數據類型如下表所示:

分類

備註和說明

數據類型

說明

二進制數據類型

存儲非字符和文本的數據

Image

可用來存儲圖像

文本數據類型

字符數據包括任意字母、符號或數字字符的組合

Char

固定長度的非 Unicode 字符數據,效率高

Varchar

可變長度非 Unicode 數據,節省空間

Nchar

固定長度的 Unicode 數據

Nvarchar

可變長度 Unicode 數據

Text

存儲長文本信息

Ntext

存儲可變長度的長文本

日期和時間

日期和時間在單引號內輸入

Datetime

日期和時間

數字數據

該數據僅包含數字,包括正數、負數以及分數

Bigint、int、smallint、tinyint

整數

float、real

數字

貨幣數據類型

用於十進制貨幣值

Money

 

數值類型

例:stuid numeric(18,0),代表18位數字,小數位數爲0,屬於浮點類型

numeric (18,0)

 

標識列

identity(起始值,遞增量)

identity(1,1)

自動遞增

Bit數據類型

表示是/否的數據

Bit

存儲布爾數據類型

 

轉載:http://www.cnblogs.com/hong-fithing/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章