在線生成sitemap網(wǎng)站的網(wǎng)址社群推廣平臺(tái)
目錄
一,?使用T-SQL創(chuàng)建數(shù)據(jù)庫(kù)
1,數(shù)據(jù)庫(kù)的存儲(chǔ)結(jié)構(gòu)?
2,創(chuàng)建數(shù)據(jù)庫(kù)的語(yǔ)法結(jié)構(gòu)?
1)使用T-SQL創(chuàng)建學(xué)生成績(jī)管理數(shù)據(jù)庫(kù)
二,使用T-SQL修改數(shù)據(jù)庫(kù)
?1,修改數(shù)據(jù)庫(kù)的語(yǔ)法結(jié)構(gòu)
1)修改學(xué)生成績(jī)管理數(shù)據(jù)庫(kù)
①增加文件組及次要數(shù)據(jù)文件?
?編輯?②增加日志文件
?③修改主數(shù)據(jù)文件最大容量
2)使用T-SQL備份數(shù)據(jù)庫(kù)
?3)使用T-SQL刪除數(shù)據(jù)庫(kù)
①無(wú)法刪除數(shù)據(jù)庫(kù) "xxx",因?yàn)樵摂?shù)據(jù)庫(kù)當(dāng)前正在使用
?4)重新加載數(shù)據(jù)庫(kù)
我一開(kāi)始接觸的是MySQL,之所以要學(xué)SQL server,還是因?yàn)镾QL server有MySQL所沒(méi)有的優(yōu)點(diǎn):
- 功能和特性上:?
SQL server的管理工具(?SQL Server Management Studio)功能強(qiáng)大,適合企業(yè)級(jí)應(yīng)用。支持更多的數(shù)據(jù)類型,如 XML、JSON、地理空間數(shù)據(jù)等。
? - 數(shù)據(jù)類型上:
雖然MySQL 更加輕量,適合中小型應(yīng)用,也支持 JSON,但在某些數(shù)據(jù)類型的實(shí)現(xiàn)上可能不如 SQL Server 靈活。
SQL server還有很多其它的優(yōu)點(diǎn),等之后做項(xiàng)目的時(shí)候就可以更加直觀且清晰的感覺(jué)到,因此這里先不贅述。
一,?使用T-SQL創(chuàng)建數(shù)據(jù)庫(kù)
?T-SQL全稱為transact structured query language,事務(wù)化的結(jié)構(gòu)查詢語(yǔ)言。是對(duì)標(biāo)準(zhǔn)SQL語(yǔ)言功能的擴(kuò)充。可以聲明變量,有流程控制語(yǔ)句,支持對(duì)流程的控制等。其中,事務(wù)的概念如下:
- ?事務(wù)transaction是需要一次性完成的操作集合。要么全部執(zhí)行,要么全部不執(zhí)行。
1,數(shù)據(jù)庫(kù)的存儲(chǔ)結(jié)構(gòu)?
?通常SQL server數(shù)據(jù)庫(kù)包含以下三類物理文件:
- 主要數(shù)據(jù)文件(也稱主數(shù)據(jù)文件)。擴(kuò)展名為.mdf (main data? file)。
在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)生成,用來(lái)存儲(chǔ)數(shù)據(jù)庫(kù)的啟動(dòng)信息,部分或全部數(shù)據(jù)及數(shù)據(jù)庫(kù)對(duì)象,是所有數(shù)據(jù)文件的起點(diǎn),包含指向其它數(shù)據(jù)文件的指針。每個(gè)數(shù)據(jù)庫(kù)只能有一個(gè)主要數(shù)據(jù)文件。
? - 次要數(shù)據(jù)文件。擴(kuò)展名為.ndf(個(gè)人ps:next data file)。
輔助主數(shù)據(jù)文件存儲(chǔ)數(shù)據(jù)及數(shù)據(jù)庫(kù)對(duì)象,可以在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)創(chuàng)建,也可以在創(chuàng)建數(shù)據(jù)庫(kù)后添加。當(dāng)數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)量巨大,超過(guò)了單個(gè)Windows文件的最大值或需要將重要數(shù)據(jù)與次要數(shù)據(jù)分開(kāi)存儲(chǔ)以提高數(shù)據(jù)訪問(wèn)速度和安全時(shí),用戶可以自行創(chuàng)建一個(gè)或多個(gè)次要數(shù)據(jù)文件。一個(gè)數(shù)據(jù)庫(kù)可以沒(méi)有次要數(shù)據(jù)文件,也可以同時(shí)擁有多個(gè)次要數(shù)據(jù)文件。
? - 日志文件。擴(kuò)展名為.ldf (log data? file)。
在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)生成,用于記錄系統(tǒng)操作事件的記錄文件或文件集合,這些記錄可以作為恢復(fù)數(shù)據(jù)庫(kù)的依據(jù)。當(dāng)數(shù)據(jù)庫(kù)損壞時(shí),可以使用事務(wù)日志恢復(fù)數(shù)據(jù)庫(kù)。每個(gè)數(shù)據(jù)庫(kù)至少擁有一個(gè)日志文件,而且允許擁有多個(gè)日志文件。
2,創(chuàng)建數(shù)據(jù)庫(kù)的語(yǔ)法結(jié)構(gòu)?
一開(kāi)始腦海里面得有下面這4句👇:?
--1,創(chuàng)數(shù)據(jù)庫(kù)
CREATE DATABASE 數(shù)據(jù)庫(kù)名
--2,創(chuàng)數(shù)據(jù)文件(主文件)
ON PRIMARY(),
FILEGROUP 文件組名()
--3,創(chuàng)日志文件
LOG ON()
--4,批處理分隔符,用來(lái)提交T-SQL語(yǔ)句(默認(rèn)提交次數(shù)為1,1可省略)
GO
可以看到,在主數(shù)據(jù)文件部分包含一句:FILEGROUP 文件組名(),用來(lái)創(chuàng)建文件組。而文件組中存放的文件都是次要數(shù)據(jù)文件,以.ndf為文件名后綴。
批處理分隔符的設(shè)置如下👇,沒(méi)有什么特別的要求,一般默認(rèn)設(shè)置成“GO”?。
之后再往里面填充。這里從上至下,先填充主數(shù)據(jù)文件的部分。
ON PRIMARY(
NAME=主數(shù)據(jù)文件名, -- 邏輯名
FILENAME='盤符\存儲(chǔ)路徑\主數(shù)據(jù)文件名.mdf', -- 物理名
SIZE=主數(shù)據(jù)文件的初始大小,
MAXSIZE=主數(shù)據(jù)文件的最大容量,
FILEGROWTH=主數(shù)據(jù)文件自動(dòng)增長(zhǎng)的方式(可以是百分比也可以是具體的內(nèi)存大小)
)
如果要求創(chuàng)建文件組的話,就需要在創(chuàng)建好主數(shù)據(jù)文件的結(jié)束括號(hào)后面加上逗號(hào),再寫(xiě)上創(chuàng)文件組的語(yǔ)句:創(chuàng)建文件組和創(chuàng)建主數(shù)據(jù)文件類似,如下👇
,FILEGROUP 文件組名(
NAME=次要數(shù)據(jù)文件名,
FILENAME='盤符\存儲(chǔ)路徑\次要數(shù)據(jù)文件名.ndf',
SIZE=次要數(shù)據(jù)文件的初始大小,
MAXSIZE=次要數(shù)據(jù)文件的最大容量,
FILEGROWTH=次要數(shù)據(jù)文件自動(dòng)增長(zhǎng)的方式(可以是百分比也可以是具體的內(nèi)存大小)
)
日志文件的創(chuàng)建也一樣:
LOG ON(
NAME=日志文件名,
FILENAME='盤符\存儲(chǔ)路徑\日志文件名.ldf',
SIZE=日志文件的初始大小,
MAXSIZE=日志文件的最大容量,
FILEGROWTH=日志文件自動(dòng)增長(zhǎng)的方式(可以是百分比也可以是具體的內(nèi)存大小)
)
知道該怎么創(chuàng)建數(shù)據(jù)庫(kù)及數(shù)據(jù)庫(kù)的3類物理文件之后,上題目:
1)使用T-SQL創(chuàng)建學(xué)生成績(jī)管理數(shù)據(jù)庫(kù)
- ?數(shù)據(jù)庫(kù)名:StuScore
- 主數(shù)據(jù)文件:StuScore_data,存儲(chǔ)位置'盤符\...\STUSCOREDATA',初始大小10MB,按照10%自動(dòng)增長(zhǎng),最大容量200MB
- 日志文件:StuScore_log,存儲(chǔ)位置'盤符\...\STUSCORELOG',初始大小3MB,自動(dòng)增長(zhǎng)方式為每次增長(zhǎng)1MB,最大容量60MB
首先電腦上得事先創(chuàng)建好文件夾 STUSCOREDATA和STUSCORELOG。
之后按照題目要求編寫(xiě)語(yǔ)句:?
--1,創(chuàng)數(shù)據(jù)庫(kù)
CREATE DATABASE StuScore
--2,創(chuàng)數(shù)據(jù)文件(主文件)
ON PRIMARY(
NAME=StuScore_data,
FILENAME='D:\mySqlserver\STUSCOREDATA\StuScore_data.mdf',
SIZE=10MB,
MAXSIZE=200MB,
FILEGROWTH=5%)
--3,創(chuàng)日志文件
LOG ON(
NAME=StuScore_log,
FILENAME='D:\mySqlserver\STUSCORELOG\StuScore_log.ldf',
SIZE=3MB,
MAXSIZE=60MB,
FILEGROWTH=1MB)
--4,批處理分隔符,用來(lái)提交T-SQL語(yǔ)句(默認(rèn)提交次數(shù)為1,1可省略)
GO
創(chuàng)建的主數(shù)據(jù)文件和日志文件如下:
?
?
二,使用T-SQL修改數(shù)據(jù)庫(kù)
?1,修改數(shù)據(jù)庫(kù)的語(yǔ)法結(jié)構(gòu)
通過(guò)ALTER DATABASE語(yǔ)句,可以進(jìn)行如下操作:
- 更改數(shù)據(jù)庫(kù)名稱,不能更改數(shù)據(jù)庫(kù)的存儲(chǔ)位置。
- 添加,刪除數(shù)據(jù)庫(kù)文件及文件組,
- 更改文件或文件組的屬性,如名稱,容量等。
?基本語(yǔ)法如下:
ALTER DATABASE 數(shù)據(jù)庫(kù)名
-- 重命名數(shù)據(jù)庫(kù)
MODIFY NAME<新的數(shù)據(jù)庫(kù)名>
-- 添加/修改數(shù)據(jù)文件
ADD/MODIFY FILE<filespec>
-- 刪除指定文件
REMOVE FILE<文件邏輯名>
-- 添加/修改/刪除文件組
ADD/MODIFY/REMOVE FILEGROUP<文件組名>
-- 添加日志文件
ADD LOG FILE<filespec>
其中,filespec指代如下:
<filespec> ::=
NAME=文件邏輯名,
FILENAME='盤符\存儲(chǔ)路徑\文件邏輯名.mdf/ndf/ldf', -- 文件的物理名
SIZE=文件的初始大小,
MAXSIZE=文件的最大容量,
FILEGROWTH=文件自動(dòng)增長(zhǎng)的方式(可以是百分比也可以是具體的內(nèi)存大小)
1)修改學(xué)生成績(jī)管理數(shù)據(jù)庫(kù)
①增加文件組及次要數(shù)據(jù)文件?
?要求:
- 修改數(shù)據(jù)庫(kù)StuScore
- 增加次要文件StuScore_data2,存儲(chǔ)位置'盤符\...\STUSCOREDATA',初始大小20MB,最大容量2GB,按照10%自動(dòng)增長(zhǎng),放到StuScoreGroup文件組中。
?之后按照要求編寫(xiě)語(yǔ)句:
ALTER DATABASE StuScore
ADD FILEGROUP StuScoreGroup
ALTER DATABASE StuScore
ADD FILE(
NAME=StuScore_data2,
FILENAME='D:\mySqlserver\STUSCOREDATA\StuScore_data2.ndf',
SIZE=20MB,
MAXSIZE=2GB,
FILEGROWTH=10%
) TO FILEGROUP StuScoreGroup
文件組StuScoreGroup中的次要數(shù)據(jù)文件StuScore_data2.ndf在磁盤上的存儲(chǔ)位置👇:?
?②增加日志文件
?要求:
- 日志文件名:StuScore_log2,存儲(chǔ)位置'盤符\...\STUSCORELOG',初始大小10MB,不限制最大容量(UNLIMITED,不限制),按照1MB自動(dòng)增長(zhǎng)。
?按照要求編寫(xiě)語(yǔ)句:
ALTER DATABASE StuScore
ADD LOG FILE(
NAME=StuScore_log2,
FILENAME='D:\mySqlserver\STUSCORELOG\StuScore_log2.ldf',
SIZE=10MB,
MAXSIZE=UNLIMITED,
FILEGROWTH=1MB
)
?③修改主數(shù)據(jù)文件最大容量
要求:將主數(shù)據(jù)文件StuScore_data的最大容量設(shè)置為500MB。
按照要求編寫(xiě)語(yǔ)句:
ALTER DATABASE StuScore
MODIFY FILE(
NAME=StuScore_data,
MAXSIZE=500MB
)
如下,修改成功?
2)使用T-SQL備份數(shù)據(jù)庫(kù)
BACKUP DATABASE StuScore
TO DISK = 'D:\mySqlserver\Backups\StuScore.bak'
WITH FORMAT,MEDIANAME = 'StuScoreBackup',NAME = 'Full Backup of StuScore';
?3)使用T-SQL刪除數(shù)據(jù)庫(kù)
DROP DATABASE StuScore
①無(wú)法刪除數(shù)據(jù)庫(kù) "xxx",因?yàn)樵摂?shù)據(jù)庫(kù)當(dāng)前正在使用
?如果點(diǎn)擊執(zhí)行之后提示“無(wú)法刪除數(shù)據(jù)庫(kù) "xxx",因?yàn)樵摂?shù)據(jù)庫(kù)當(dāng)前正在使用?!?#xff0c;先簡(jiǎn)單排除:
- 是否用該數(shù)據(jù)庫(kù)來(lái)新建查詢。
? - 建議退出關(guān)閉當(dāng)前的查詢,重新開(kāi)一個(gè)查詢。
我就是用上面兩種方法刪除數(shù)據(jù)庫(kù)StuScore,如果使用上述兩種方法還是無(wú)法刪除數(shù)據(jù)庫(kù),接下來(lái)就需要將數(shù)據(jù)庫(kù)設(shè)置為單用戶模式,斷開(kāi)所有連接,并刪除數(shù)據(jù)庫(kù)👇
ALTER DATABASE 需要?jiǎng)h除的數(shù)據(jù)庫(kù)名 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DROP DATABASE 要?jiǎng)h除的數(shù)據(jù)庫(kù)名;
?4)重新加載數(shù)據(jù)庫(kù)
RESTORE DATABASE StuScore
FROM DISK = 'D:\mySqlserver\Backups\StuScore.bak'
WITH NORECOVERY; -- 多個(gè)備份文件還原
SELECT NAME FROM sys.databases
?
如果兩三分鐘后,數(shù)據(jù)庫(kù)依舊顯示“正在還原”,可以輸入如下語(yǔ)句,完成還原操作:
RESTORE DATABASE StuScore WITH RECOVERY;
?
之后到磁盤下,可以看到相關(guān)的數(shù)據(jù)文件和日志文件👇?
?有問(wèn)題請(qǐng)?jiān)谠u(píng)論區(qū)留言或者是私信我,回復(fù)時(shí)間不超過(guò)1天。