Sql语言复习
一、创建数据库
-
创建和打开数据库
注意一点:在新建数据库的时候,一般放置数据文件与日志文件的位置,需要提前建立文件夹,不然会报错。
一般主数据文件,我们以.mdf结尾,次数据文件用.ndf结尾。对于日志文件,我们一般以.ldf结尾。
create database UserDB
on primary
(name=userdb_dat,filename='d:\magmisdata\magdbdat1.mdf',
size=10,maxsize=50,filegrowth=5)
log on
( name=userdb_log,filename='d:\magmisdata\magdblog1.ldf',
size=10,maxsize=50,filegrowth=5)
打开数据库:
use database UserDB
CREATE DATABASE UserBD1
ON PRIMARY
(name=user1,filename='d:\dbfile\user1.mdf',size=20,maxsize=200,filegrowth=5
),
(name=user2,filename='d:\dbfile\user2.ndf',size=20,maxsize=200,filegrowth=10%
),
(name=user3,filename='d:\dbfile\user3.ndf',size=20,maxsize=200,filegrowth=5
)
log on
(name=use1log,filename='d:\dbfile\user1.ldf',size=20,maxsize=200
),
(name=user2log,filename='d:\dbfile\user2.ldf',size=20,maxsize=200
)
增加和删除数据文件和日志文件
缩小分配给数据文件或日志文件的空间
扩大分配给数据文件或日志文件的空间
创建文件组
改变默认文件组
改变数据库名称
注意:在利用文件组的时候需要先增加文件组,然后在把增加的文件放到文件组里面去。
而且 name 记录的是 数据文件的逻辑名称,不是物理名称。
alter database UserBD1
add filegroup userdbFG
alter database UserBD1
add file
(name=add_user2,filename='d:\dbfile\adddat2.ndf',size=5,maxsize=200,filegrowth=10%)
to filegroup userdbFG
注意:如果把下面的modify换成 remove的话,就可以删除某一个数据文件或者日志文件
当我们增加日志文件的话,我们使用命令 add log file (文件参数)
alter database UserBD1
modify file
(name=add_user2,size=10)
下面是缩小数据文件或数据库命令,
use UserBD1
dbcc shrinkfile(add_user2,5)
dbcc shrinkdatabase(UserBD1,100)
删除数据库
drop database UserBD1
二、数据库表
1、创建数据库表
注意: identity(10,5) 表示初始值为10,然后按照5的速度往上涨。默认为自增1.
对于表名,一般#开头的表示临时表,它是存在于内存空间中的,随之数据库的关闭,自动关闭,不会保存到硬盘中。
建立表格
use UserBD1
create table mag_dept
(
DepId int identity primary key,
DepName varchar(50) NOT NULL,
DepManager varchar(50) ,
DepTel varchar(24),
)
create table mag_emp
(
EmpId int identity,
EmpName varchar(30) NOT NULL,
SexInfo char(2),
EmpAge tinyint,
DepId int,
EmpRole varchar(20),
PermitStr varchar(100)
)
create table mag_info
(
MagId char(9),
MagName varchar(50) NOT NULL,
DesignerName varchar(30),
DesFinishDate datetime,
PubDate datetime,
DepId int
)
create table mag_doc
(
DocId int identity,
DocTitle varchar(180),
AuthorName varchar(30),
DocText text,
WordsSum int,
EditorName varchar(50),
EditFinishDate datetime,
ColumnName varchar(50),
DepId int,
MagId char(9)
)
2、数据类型
字符型 char varchar
日期时间类型 datetime smalldatetime
数值类型 int samllint tinyint float real decimal numeric money samllmoney
二进制类型 binary varbinary
位型 bit
文本型 text
图像型 image
时间戳型 timestamp
3、修改数据库表
添加列
alter table mag_emp
add ID char(18)
删除列
alter table mag_emp
drop column ID
修改列的属性
alter table mag_info
alter column PubDate smalldatetime
更改列名和表名
use UserTest
create table test
(
number int identity,
stu_name varchar(10),
class varchar(20)
)
use UserTest 这一句不用加,不然会报错
更改列名的写法表名.列名
Sp_rename '表名.列名' , 新的列名
sp_rename 'test.class',class_no
更改表名中间的逗号不可以省略
Sp_rename 原表名 , 新表名
sp_rename test,student
4、使用约束
-
总共有5种约束,分别是 primary key 主键约束、unique 该列不允许出现重复、
foreign key 外键约束,保证数据表间数据的一致性、check定义表中某些列的数据范围、 default 为列的数据提供默认值。
可以实现实体完整性、参照完整性、自定义完整性。
建立约束:
1)实体完整性
增加主键约束
use UserBD1
alter table mag_dept
add primary key (DepId)
联合主键的定义
use UserBD1
create table grade
(
sno varchar(10) NOT NULL ,
cno varchar(10) ,
gmark numeric(5,1) -- 表示整数有位,小数位,其中这里的逗号可有可无,但是上面的逗号不可少
primary key (sno,cno)
)
不允许重复出现
use UserBD1
alter table mag_dept
add unique (DepManager)
2)参照完整性
[constraint 约束名] foreign key (列名1[,列名2]) references 表名(列名1[,列名2])
定义外键
use UserBD1
alter table mag_emp
add foreign key(DepId) references mag_dept(DepId)
use UserTest
create table mag_dept
(
DepId int identity primary key,
DepName varchar(50) NOT NULL,
DepManager varchar(50) ,
DepTel varchar(24),
)
create table mag_emp
(
EmpId int identity,
EmpName varchar(30) NOT NULL,
SexInfo char(2),
EmpAge tinyint,
DepId int references mag_dept (DepId), //省略foreign key
EmpRole varchar(20),
PermitStr varchar(100)
)
3)用户自定义完整性
自定义数据范围约束,将年龄值固定在到1与100之间(注:这里是自主命名的,前面几个都不是自主命名)
use UserTest
alter table mag_emp
add constraint ck_age check (EmpAge between 1 and 100)
为某个属性添加默认值
use UserTest
alter table mag_emp
add default '编辑' for EmpRole
删除约束如果是自主命名的,直接删去约束名即可,如果不是,需要删除系统自动生成的约束名
注意斜杠的个数,不然容易弄错
use UserTest
alter table mag_emp
drop constraint FK__mag_emp__DepId__03317E3D
总结:建立约束总共有2种方法,其一是使用 cteate table 命令在建立表的同时一同定义。其二是利用alter table 命令针对已经建立的表添加约束。
还有就是不自主定义约束名时,需要省略 constraint 约束名。
索引分成两类:聚集索引(物理存储方式)与非聚集索引(逻辑存储方式)。
聚集索引:顺序存储结构。非聚集索引:线性结构。
Create [unique][clustered|noclustered] index 索引名 on 表名(列名1,列名2)
默认建立的是非唯一的非聚集索引。建立索引时必须先建立聚集索引,然后建立非聚集索引。
而且,当一个数据表建立主键后,自动建立了一个唯一的聚集索引。当使用了unique 约束后,自动建立一个非聚集索引。
建立与删除索引虽然标红了,但语法正确
use UserTest
create index age_index on mag_emp(EmpAge)
drop index 表名.索引名
drop index mag_emp.age_index
drop table 表名