数据库定义语言
DDL(Data Description Language)
,是用于描述数据库中要存储的现实世界实体的语言。一个数据库模式包含该数据库中所有实体的描述定义。这些定义包括结构定义、操作方法定义等。
DDL
描述的模式,必须由计算机软件进行编译,转换为便于计算机存储、查询和操纵的格式,完成这个转换工作的程序称为模式编译器。
基本对象
|
操
作
| ||
创建
|
修改
|
删除
| |
数据库
|
create database
|
|
drop database
|
表
|
create table
|
alter table
|
drop table
|
视图
|
create view
|
|
drop view
|
索引
|
reate index
|
|
drop index
|
一、
数据库
1 创建数据库语法:
1 创建数据库语法:
create
database
数据库名
on [primary]
{
<
数据库文件参数
>
}
[log on]
{
<
日志文件参数
>
}
文件的具体参数的语法:
[name=
逻辑文件名
]
[filename=
物理文件名
]
[size=
初始容量
]
[maxsize=
最大容量
| unlimited]
[filegrowth=
增长量
]
各参数说明如下:
1 primary
:指定主文件组中的文件。
2 log on
:指明事务日志文件的明确定义。
3 name
:指定数据库的逻辑名称,这是在
sql servler
系统中中使用的名称。
4 filename
:指定数据库文件
.mdf
或
.ndf
的名称和路径。
5 size
:数据库初始容量。
6 maxsize
:数据库最大容量。
7 filegrowth
:指定文件每次增加容量的大小,当指定为
0
时,表示文件不增长。可以按百分比增长、数值增长。
示例
1
:一个数据库文件和一个日志文件
use
master
execute xp_cmdshell ' mkdir d:stu ' ,no_output
go
/**/ /*建立数据库stuDB*/
if exists ( select * from sysdatabases where name = ' stuDB ' )
drop database stuDB
create database stuDB
on primary
(
name = ' stuDB_data ' ,
filename = ' d:stustuDB_data.mdf ' ,
size = 3mb,
maxsize = 100mb,
filegrowth = 2 %
)
log on
(
name = ' stuDB_log ' ,
filename = ' d:stustuDB_log.ldf ' ,
size = 1mb,
maxsize = 50mb,
filegrowth = 1
)
execute xp_cmdshell ' mkdir d:stu ' ,no_output
go
/**/ /*建立数据库stuDB*/
if exists ( select * from sysdatabases where name = ' stuDB ' )
drop database stuDB
create database stuDB
on primary
(
name = ' stuDB_data ' ,
filename = ' d:stustuDB_data.mdf ' ,
size = 3mb,
maxsize = 100mb,
filegrowth = 2 %
)
log on
(
name = ' stuDB_log ' ,
filename = ' d:stustuDB_log.ldf ' ,
size = 1mb,
maxsize = 50mb,
filegrowth = 1
)
示例
2
:多个数据库文件和多个日志文件
use
master
execute xp_cmdshell ' mkdir d:shop ' ,no_output
go
-- 建立数据库shopDB--
if exists ( select * from sysdatabases where name = ' shopDB ' )
drop database shopDB
create database shopDB
on primary
(
/**/ /*--主数据库文件的具体描述--*/
name = ' shopDB_data1 ' ,
filename = ' d:shopshopDB_data1.mdf ' ,
size = 6mb,
maxsize = 800mb,
filegrowth = 15 %
), /**/ /*--一定要加逗号--*/
(
/**/ /*--次要数据库文件的具体描述--*/
name = ' shopDB_data2 ' ,
filename = ' d:shopshopDB_data2.ndf ' ,
size = 6mb,
maxsize = 800mb,
filegrowth = 1
)
log on
(
/**/ /*--日志文件的具体描述--*/
name = ' shopDB_log1 ' ,
filename = ' d:shopshopDB_log1.ldf ' ,
size = 2mb,
filegrowth = 1mb
)
log on
(
/**/ /*--日志文件的具体描述--*/
name = ' shopDB_log2 ' ,
filename = ' d:shopshopDB_log2.ldf ' ,
size = 2mb,
filegrowth = 1mb
)
go
execute xp_cmdshell ' mkdir d:shop ' ,no_output
go
-- 建立数据库shopDB--
if exists ( select * from sysdatabases where name = ' shopDB ' )
drop database shopDB
create database shopDB
on primary
(
/**/ /*--主数据库文件的具体描述--*/
name = ' shopDB_data1 ' ,
filename = ' d:shopshopDB_data1.mdf ' ,
size = 6mb,
maxsize = 800mb,
filegrowth = 15 %
), /**/ /*--一定要加逗号--*/
(
/**/ /*--次要数据库文件的具体描述--*/
name = ' shopDB_data2 ' ,
filename = ' d:shopshopDB_data2.ndf ' ,
size = 6mb,
maxsize = 800mb,
filegrowth = 1
)
log on
(
/**/ /*--日志文件的具体描述--*/
name = ' shopDB_log1 ' ,
filename = ' d:shopshopDB_log1.ldf ' ,
size = 2mb,
filegrowth = 1mb
)
log on
(
/**/ /*--日志文件的具体描述--*/
name = ' shopDB_log2 ' ,
filename = ' d:shopshopDB_log2.ldf ' ,
size = 2mb,
filegrowth = 1mb
)
go
2
删除数据库
语法:
drop database
数据库名
如:
user
master
--
设置当前数据库为master,以便访问sysdatabases表--
go
if exists ( select * from sysdatabases where name = ' stuDB ' )
drop database stuDB
go
if exists ( select * from sysdatabases where name = ' stuDB ' )
drop database stuDB
二、
表
1
创建表
语法:
create table
表名
(
字段名
1,
数据类型
,
列的特征
,
字段名
1,
数据类型
,
列的特征
,
...
)
示例
:
创建表
stuInfo
use
stuDB
go
if exists ( select * from sysobjects where name = stuInfo ' )
drop table stuInfo '
create table stuInfo
(
stuName varchar ( 20 ) not null ,
stuNo char ( 6 ) not null ,
stuAge int not null ,
stuId numeric( 18 , 0 ),
stuSeat smallint identity ( 1 , 1 ),
stuAddress text
)
go
go
if exists ( select * from sysobjects where name = stuInfo ' )
drop table stuInfo '
create table stuInfo
(
stuName varchar ( 20 ) not null ,
stuNo char ( 6 ) not null ,
stuAge int not null ,
stuId numeric( 18 , 0 ),
stuSeat smallint identity ( 1 , 1 ),
stuAddress text
)
go
2
修改表
(1)
添加字段
alter table
表名
[add
字段名
,
数据类型
,
列的特征
]
如
:
alter table stuInfo
add tel varchar(20) not null
(2)
添加约束
alter table
表名
add constraint
约束名
约束类型
具体约束说明
如
:
alter
table
stuInfo
add
constraint PK_stuNo primary key (stuNo), -- 主键约束--
constraint UQ_stuID unique (stuID), -- 唯一约束--
constraint DF_stuAddress default ( ' 地址不详 ' ) for stuAddress, -- 默认约束--
constraint CK_stuAge check (stuAge between 15 and 40 ), -- 检查约束--
constraint FK_stuNo foreign key (stuNo) references stuInfo(stuNo) -- 参照约束--
constraint PK_stuNo primary key (stuNo), -- 主键约束--
constraint UQ_stuID unique (stuID), -- 唯一约束--
constraint DF_stuAddress default ( ' 地址不详 ' ) for stuAddress, -- 默认约束--
constraint CK_stuAge check (stuAge between 15 and 40 ), -- 检查约束--
constraint FK_stuNo foreign key (stuNo) references stuInfo(stuNo) -- 参照约束--
(3)
删除约束
alter
table
表名
drop
constraint
约束名
如:
alter
table
stuInfo
drop constraint PK_stuNo
drop constraint PK_stuNo
3
删除表
drop table
表名
if
exists
(
select
*
from
sysobjects
where
name
=
'
stuInfo
'
)
drop table stuInfo
drop table stuInfo
三、
视图
1
创建视图
语法:
create view
视图名
[with encryption]
as
SQL
语句体
其中
:
with encryption:
表示对视图文本加密
/**/
/*建立视图*/
if exists ( select * from sysobjects where name = ' stuInfo_view ' )
drop view stuInfo_view
create view stuInfo_view
with encryption
as
select * from stuInfo
/**/ /*查询视图*/
select * from stuInfo_view
if exists ( select * from sysobjects where name = ' stuInfo_view ' )
drop view stuInfo_view
create view stuInfo_view
with encryption
as
select * from stuInfo
/**/ /*查询视图*/
select * from stuInfo_view
2
删除视图
drop view 视图名
drop view 视图名
drop
view
视图名
if exists ( select * from sysobjects where name = ' stuInfo_view ' )
drop view stuInfo_view
if exists ( select * from sysobjects where name = ' stuInfo_view ' )
drop view stuInfo_view
四、
索引
索引
:
是
SQL Server
编排数据的内部方法
.
索引页
:
数据库中存储索引的数据页
.
索引页存放检索数据行的关键字及该数据行的地址指针
.
索引页类似于汉语字典中按拼音或笔画排序的目录页
.
索引作用
:
提高数据库检索速度
,
改善数据库性能
.
1
创建索引:
语法:
create
[unique][clustered|nonclustered] index
索引名
on
表名
(
列名
[asc|desc])
[with fillfactor=x]
其中
:
unique:
指定唯一索引
clustered nonclustered:
指定是聚集还是非聚集索引
,
一个表只能创建一个聚集索引
,
但可以有多个非聚集索引
,
设置某列为主键
,
则此列默认为聚集索引
.
fillfactor:
填充因子
,
指定一个
-100
的值
,
该值指示索引页填满的空间所占的百分比
.
use stuDB
go
if exists ( select name from sysindexes where name = ' stuInfo_index ' )
drop index stuInfo.stuInfo_index
create nonclustered index stuInfo_index
on stuInfo(stuNo desc )
with fillfactor = 30
go
select * from stuInfo
stuInfo_index where stuAge > 18
2
删除索引
drop
index
表名
.
索引名
if
exists
(
select
name form sysindexes
where
name
=
'
stuInfo_index
'
)
drop index stuInfo.stuInfo_index
drop index stuInfo.stuInfo_index