數(shù)據(jù)庫(kù)分系統(tǒng)數(shù)據(jù)庫(kù)和用戶(hù)數(shù)據(jù)庫(kù)
用戶(hù)數(shù)據(jù)庫(kù)文件組成
數(shù)據(jù)庫(kù)物理文件的組成:數(shù)據(jù)庫(kù)文件(.mdf主數(shù)據(jù)文件或.ndf次要數(shù)據(jù)文件)+日志文件(.ldf)
一個(gè)數(shù)據(jù)庫(kù)必須嚎卫、且只能包含一個(gè)mdf,但可以有多個(gè)ndf和ldf(至少一個(gè))
創(chuàng)建數(shù)據(jù)庫(kù)
1)創(chuàng)建一個(gè)主數(shù)據(jù)文件和一個(gè)日志文件
use master --打開(kāi)master數(shù)據(jù)庫(kù)碍讨,一般的創(chuàng)建語(yǔ)句都在master中執(zhí)行
go
if exists (select * from sysdatabases where name='dbname')
drop database dbname
go
--創(chuàng)建數(shù)據(jù)庫(kù)
CREATE DATABASE dbname
ON PRIMARY
(
name="dbname_data", --主數(shù)據(jù)文件的邏輯名
filename="F:\DB\dbname_data.mdf", --數(shù)據(jù)庫(kù)物理文件名(絕對(duì)路徑,先創(chuàng)建DB文件夾)
size=3MB, --主數(shù)據(jù)文件的初始大小
maxsize=100MB, --主數(shù)據(jù)文件的最大大小蒙秒,不寫(xiě)就是沒(méi)有限制
filegrowth=1MB --數(shù)據(jù)文件增量為MB
)
--創(chuàng)建日志文件
log on
(
name="dbname_log",
filename="F:\DB\dbname_log.ldf", --日志文件儲(chǔ)存位置
size=1MB, --日志文件的初始大小
filegrowth=10% --增長(zhǎng)率為%
)
2)創(chuàng)建多個(gè)數(shù)據(jù)文件和日志文件
use master
go
if exists (select * from sysdatabases where name='dbname')
drop database dbname
go
--創(chuàng)建數(shù)據(jù)庫(kù)
CREATE DATABASE dbname
ON PRIMARY
(
name="dbname_data", --主數(shù)據(jù)文件的邏輯名
filename="F:\DB\dbname_data.mdf", --數(shù)據(jù)庫(kù)物理文件名(絕對(duì)路徑勃黍,先創(chuàng)建DB文件夾)
size=3MB, --主數(shù)據(jù)文件的初始大小
maxsize=100MB, --主數(shù)據(jù)文件的最大大小,不寫(xiě)就是沒(méi)有限制
filegrowth=1MB --數(shù)據(jù)文件增量為MB
),
(
name="dbname_data1", --次要數(shù)據(jù)文件的邏輯名,不能與主數(shù)據(jù)文件相同
filename="F:\DB\dbname_data1.ndf",
size=3MB, --次要數(shù)據(jù)文件的初始大小
filegrowth=1MB --數(shù)據(jù)文件增量為MB
)
--創(chuàng)建日志文件
log on
(
name="dbname_log",
filename="F:\DB\dbname_log.ldf", --日志文件儲(chǔ)存位置
size=1MB, --日志文件的初始大小
filegrowth=10% --增長(zhǎng)率為%
),
(
name="dbname_log1",
filename="F:\DB\dbname_log1.ldf", --日志文件儲(chǔ)存位置
size=1MB, --日志文件的初始大小
filegrowth=10% --增長(zhǎng)率為%
)
刪除數(shù)據(jù)庫(kù)(判斷相關(guān)數(shù)據(jù)庫(kù)是否存在晕讲,存在則刪除)
if exists (select * from sysdatabases where name='dbname')
drop database dbname
注:drop刪除后數(shù)據(jù)庫(kù)將不可恢復(fù)覆获,須謹(jǐn)慎使用马澈!
分離與附加數(shù)據(jù)庫(kù)
1)分離數(shù)據(jù)庫(kù)的必要性及語(yǔ)法
當(dāng)數(shù)據(jù)庫(kù)服務(wù)運(yùn)行中,通常情況下無(wú)法直接移動(dòng)和復(fù)制數(shù)據(jù)庫(kù)文件
所謂分離數(shù)據(jù)庫(kù)就是將正在使用的數(shù)據(jù)庫(kù)文件解除服務(wù)的限制
exec sp_detach_db @dbname=數(shù)據(jù)庫(kù)名稱(chēng)
2)附加數(shù)據(jù)庫(kù)的必要性及語(yǔ)法
附加數(shù)據(jù)庫(kù)就是將指定位置的數(shù)據(jù)庫(kù)文件加入到數(shù)據(jù)庫(kù)服務(wù)中并運(yùn)行
數(shù)據(jù)庫(kù)只有附加后弄息,用戶(hù)才能通過(guò)DBMS操作數(shù)據(jù)
exec sp_attach_db @dbname=數(shù)據(jù)庫(kù)名稱(chēng),
@filename1='數(shù)據(jù)庫(kù)主文件物理文件路徑',
@filename2='數(shù)據(jù)庫(kù)日志文件物理文件路徑'
常用SQLServer數(shù)據(jù)類(lèi)型
- 文本類(lèi)型
數(shù)據(jù)類(lèi)型 | 描述 |
---|---|
char(n) | 固定長(zhǎng)度的字符串痊班。最多 8,000 個(gè)字符。 |
varchar(n) | 可變長(zhǎng)度的字符串摹量。最多 8,000 個(gè)字符辩块。 |
text | 可變長(zhǎng)度的字符串。最多 2GB 字符數(shù)據(jù)荆永。 |
char(n) | 固定長(zhǎng)度的 Unicode 數(shù)據(jù)废亭。最多 4,000 個(gè)字符。 |
nvarchar(n) | 可變長(zhǎng)度的 Unicode 數(shù)據(jù)具钥。最多 4,000 個(gè)字符豆村。 |
ntext | 可變長(zhǎng)度的 Unicode 數(shù)據(jù)。最多 2GB 字符數(shù)據(jù)骂删。 |
- 整數(shù)類(lèi)型
數(shù)據(jù)類(lèi)型 | 描述 |
---|---|
tinyint | 占用1個(gè)字節(jié)掌动,0到255之間的整數(shù)。 |
smallint | 占用2個(gè)字節(jié)宁玫,-215到215-1之間的整數(shù)粗恢。 |
int | 占用4個(gè)字節(jié),-231到231-1之間的整數(shù)欧瘪。 |
bigint | 占用8個(gè)字節(jié)眷射,-263到263-1之間的整數(shù)。 |
- 精準(zhǔn)數(shù)據(jù)類(lèi)型
數(shù)據(jù)類(lèi)型 | 描述 |
---|---|
decimal | -1038到1038-1之間的固定精度和小數(shù)位的數(shù)字 |
numeric | 功能等同于decimal |
寫(xiě)法:decimal(整數(shù),小數(shù))和numeric(整數(shù),小數(shù))
默認(rèn):如果不指定位數(shù)佛掖,默認(rèn)18位整數(shù)妖碉,0位小數(shù)
- 日期類(lèi)型
數(shù)據(jù)類(lèi)型 | 描述 |
---|---|
datetime | 允許的范圍1753-1-1至9999-1-1 |
smalldatetime | 允許的范圍1900-1-1至2079-6-6 |
時(shí)間精度不同:datetime精度到3/100秒;smalldatetime精度到1分鐘
格式說(shuō)明:2013-08-20或08/20/2013或08202013或Aug 20,2013
注意問(wèn)題:日期在使用的時(shí)候需要使用單引號(hào)(‘ ’)括起來(lái)
創(chuàng)建數(shù)據(jù)表
--創(chuàng)建學(xué)員信息表
use dbname
go
if exists(select * from sysobjects where name='Students')
drop table Students
go
create table Students
(
StudentId int identity(10000,1),--學(xué)號(hào)
StudentName varchar(20) not null,--姓名
Gender char(2) not null,--性別
Birthday datetime not null,--出生日期
StudentIdNo numeric(18,0) not null,--身份證號(hào)碼
Age int not null,--年齡
PhoneNumber varchar(20),--手機(jī)號(hào)碼
StudentAddress varchar(255),--家庭地址
ClassId int not null --班級(jí)外鍵
)
go
if exists(select * from sysobjects where name='StudentClass')
drop table StudentClass
go
--創(chuàng)建班級(jí)表
create table StudentClass
(
ClassId int primary key,
ClassName varchar(20) not null
)
go
if exists(select * from sysobjects where name='ScoreList')
drop table ScoreList
go
--創(chuàng)建成績(jī)表
create table ScoreList
(
id int identity(1,1) primary key,
StudentId int not null,
CSharp int,
SQLServerDB int,
UpdateTime smalldatetime not null
)
go
if exists(select * from sysobjects where name='Admin')
drop table Admin
go
--創(chuàng)建管理員用戶(hù)表
create table Admin
(
LoginId int identity(1000,1) primary key,
LoginPwd varchar(32) not null,
AdminName varchar(20) not null
)
go
數(shù)據(jù)的基本操作
1)插入實(shí)體
use dbname
go
insert into Students(StudentName, Gender, Birthday, StudentIdNo, Age, PhoneNumber,
StudentAddress, ClassId)
values('張三','男','2000-01-01',165412200001014523,19,'13729545871','廣東東莞',1)
2)查詢(xún)實(shí)體
select * from Students
select StudentId,StudentName from Students where Age<>18
T-SQL中常用運(yùn)算符:=芥被、>欧宜、<、>=拴魄、<=冗茸、<>(不等于)、匹中!
3)更新實(shí)體
use dbname
go
update Students set Gender='女',StudentAddress='廣東深圳' where StudentId=10001
4)刪除實(shí)體
delete from Students where StudentId=10001
truncate table Students
注意:使用delete刪除語(yǔ)句時(shí)夏漱,一定要注意where條件的配合使用;delete刪除數(shù)據(jù)時(shí)职员,要求該記錄不能被外鍵引用(刪除后標(biāo)識(shí)列繼續(xù)增長(zhǎng))麻蹋;truncate刪除數(shù)據(jù)時(shí),要求刪除的表不能有外鍵約束(刪除后重新添加數(shù)據(jù)焊切,刪除后標(biāo)識(shí)列重新編排)扮授。
truncate比delete執(zhí)行速度快芳室,而且使用的系統(tǒng)資源和事務(wù)日志資源更少。