数据库分系统数据库和用户数据库
用户数据库文件组成
数据库物理文件的组成:数据库文件(.mdf主数据文件或.ndf次要数据文件)+日志文件(.ldf)
一个数据库必须、且只能包含一个mdf,但可以有多个ndf和ldf(至少一个)
创建数据库
1)创建一个主数据文件和一个日志文件
use master --打开master数据库,一般的创建语句都在master中执行
go
if exists (select * from sysdatabases where name='dbname')
drop database dbname
go
--创建数据库
CREATE DATABASE dbname
ON PRIMARY
(
name="dbname_data", --主数据文件的逻辑名
filename="F:\DB\dbname_data.mdf", --数据库物理文件名(绝对路径,先创建DB文件夹)
size=3MB, --主数据文件的初始大小
maxsize=100MB, --主数据文件的最大大小,不写就是没有限制
filegrowth=1MB --数据文件增量为MB
)
--创建日志文件
log on
(
name="dbname_log",
filename="F:\DB\dbname_log.ldf", --日志文件储存位置
size=1MB, --日志文件的初始大小
filegrowth=10% --增长率为%
)
2)创建多个数据文件和日志文件
use master
go
if exists (select * from sysdatabases where name='dbname')
drop database dbname
go
--创建数据库
CREATE DATABASE dbname
ON PRIMARY
(
name="dbname_data", --主数据文件的逻辑名
filename="F:\DB\dbname_data.mdf", --数据库物理文件名(绝对路径,先创建DB文件夹)
size=3MB, --主数据文件的初始大小
maxsize=100MB, --主数据文件的最大大小,不写就是没有限制
filegrowth=1MB --数据文件增量为MB
),
(
name="dbname_data1", --次要数据文件的逻辑名,不能与主数据文件相同
filename="F:\DB\dbname_data1.ndf",
size=3MB, --次要数据文件的初始大小
filegrowth=1MB --数据文件增量为MB
)
--创建日志文件
log on
(
name="dbname_log",
filename="F:\DB\dbname_log.ldf", --日志文件储存位置
size=1MB, --日志文件的初始大小
filegrowth=10% --增长率为%
),
(
name="dbname_log1",
filename="F:\DB\dbname_log1.ldf", --日志文件储存位置
size=1MB, --日志文件的初始大小
filegrowth=10% --增长率为%
)
删除数据库(判断相关数据库是否存在,存在则删除)
if exists (select * from sysdatabases where name='dbname')
drop database dbname
注:drop删除后数据库将不可恢复,须谨慎使用!
分离与附加数据库
1)分离数据库的必要性及语法
当数据库服务运行中,通常情况下无法直接移动和复制数据库文件
所谓分离数据库就是将正在使用的数据库文件解除服务的限制
exec sp_detach_db @dbname=数据库名称
2)附加数据库的必要性及语法
附加数据库就是将指定位置的数据库文件加入到数据库服务中并运行
数据库只有附加后,用户才能通过DBMS操作数据
exec sp_attach_db @dbname=数据库名称,
@filename1='数据库主文件物理文件路径',
@filename2='数据库日志文件物理文件路径'
常用SQLServer数据类型
- 文本类型
数据类型 | 描述 |
---|---|
char(n) | 固定长度的字符串。最多 8,000 个字符。 |
varchar(n) | 可变长度的字符串。最多 8,000 个字符。 |
text | 可变长度的字符串。最多 2GB 字符数据。 |
char(n) | 固定长度的 Unicode 数据。最多 4,000 个字符。 |
nvarchar(n) | 可变长度的 Unicode 数据。最多 4,000 个字符。 |
ntext | 可变长度的 Unicode 数据。最多 2GB 字符数据。 |
- 整数类型
数据类型 | 描述 |
---|---|
tinyint | 占用1个字节,0到255之间的整数。 |
smallint | 占用2个字节,-215到215-1之间的整数。 |
int | 占用4个字节,-231到231-1之间的整数。 |
bigint | 占用8个字节,-263到263-1之间的整数。 |
- 精准数据类型
数据类型 | 描述 |
---|---|
decimal | -1038到1038-1之间的固定精度和小数位的数字 |
numeric | 功能等同于decimal |
写法:decimal(整数,小数)和numeric(整数,小数)
默认:如果不指定位数,默认18位整数,0位小数
- 日期类型
数据类型 | 描述 |
---|---|
datetime | 允许的范围1753-1-1至9999-1-1 |
smalldatetime | 允许的范围1900-1-1至2079-6-6 |
时间精度不同:datetime精度到3/100秒;smalldatetime精度到1分钟
格式说明:2013-08-20或08/20/2013或08202013或Aug 20,2013
注意问题:日期在使用的时候需要使用单引号(‘ ’)括起来
创建数据表
--创建学员信息表
use dbname
go
if exists(select * from sysobjects where name='Students')
drop table Students
go
create table Students
(
StudentId int identity(10000,1),--学号
StudentName varchar(20) not null,--姓名
Gender char(2) not null,--性别
Birthday datetime not null,--出生日期
StudentIdNo numeric(18,0) not null,--身份证号码
Age int not null,--年龄
PhoneNumber varchar(20),--手机号码
StudentAddress varchar(255),--家庭地址
ClassId int not null --班级外键
)
go
if exists(select * from sysobjects where name='StudentClass')
drop table StudentClass
go
--创建班级表
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
--创建成绩表
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
--创建管理员用户表
create table Admin
(
LoginId int identity(1000,1) primary key,
LoginPwd varchar(32) not null,
AdminName varchar(20) not null
)
go
数据的基本操作
1)插入实体
use dbname
go
insert into Students(StudentName, Gender, Birthday, StudentIdNo, Age, PhoneNumber,
StudentAddress, ClassId)
values('张三','男','2000-01-01',165412200001014523,19,'13729545871','广东东莞',1)
2)查询实体
select * from Students
select StudentId,StudentName from Students where Age<>18
T-SQL中常用运算符:=、>、<、>=、<=、<>(不等于)、!
3)更新实体
use dbname
go
update Students set Gender='女',StudentAddress='广东深圳' where StudentId=10001
4)删除实体
delete from Students where StudentId=10001
truncate table Students
注意:使用delete删除语句时,一定要注意where条件的配合使用;delete删除数据时,要求该记录不能被外键引用(删除后标识列继续增长);truncate删除数据时,要求删除的表不能有外键约束(删除后重新添加数据,删除后标识列重新编排)。
truncate比delete执行速度快,而且使用的系统资源和事务日志资源更少。