数据库的结构
物理结构
数据库文件分为数据文件和日志文件,二者统称为物理文件或磁盘文件
数据文件:顾名思义就是存储数据的文件,这些文件用来存储数据库对象的定义和实例数据
日志文件:日志文件同样也就是存储日志,他的作用是用来恢复数据库的冗余数据。
逻辑结构:
数据库的创建
语法:
create table <databaseName>
on 指定数据库中的数据文件
(
name = <logicalFileName>, 数据库文件名
filename = 'osFileName', 数据文件的物理文件名
size = <size>, 文件的初始大小(默认MB)
maxsize = <maxSize>, 文件最大可扩展的容量
filegrowth = <growthIncrement> 每次扩展的大小
)
log on 指定数据库的日志文件,如果没有指定,系统将自动创建单个的日志文件
(
name = <logicalFileName>, 跟上面一样
filename = 'osFileName',
size = <size>,
maxsize = <maxSize>,
filegrowth = <growthIncrement>
)
<databaseName> 数据库名字约束:
长度可以从1到30,第一个字符必须是字母,或下划线_,或字符@
在首字符后的字符可以是字母,数字,或者前面规则中提到的字符
名称中不能有空格(为了可读性,连接的字母单词首字母一般大写)
这里的数据库创建属于简单数据库创建,复杂数据库创建看书(数据库系统原理与设计第3版 214页)
基本表的定义
sql中的基本数据类型 (1B = 2^8)
- 整形:int(4B),smallint(2B),tinyint(1B)
- 浮点型:float,real(4B),decimal(p,n),numeric(p,n)
- 字符型:char(n),varchar(n),text
- 二进制型:binary(n),varbinary(n),image
- 逻辑型bit,只能取0和1,不允许为空
- 货币型:money(8B,4位小数),small money(4B,2位小数)
- 时间型:datatime(4B,从 1753-01-01)smalldatetime(4B,从1900-01-01)
其中image为图片存储类型,text存放大文本数据
创建基本表
语法:
create table <tableName>
(
<columnName> <datatype> [default<defaultValue>] [null | not null ] {unique | primary key},
constraint <constraintName1> primary key (<columnName>), 主键
foreign key (<columnName>) references <tableName> (<columnName>) 外键
)
default :设置缺失值,可选项
null :可以为空,可选项
unique :建立唯一约束
基本表的修改
增加列
alter table <tableName>
add <columnName><dataType>
增加约束
alter table <tableName>
add constraint <constraintName>
删除约束
alter table <tableName>
drop constraint <constraintName>
修改数据列类型
alter table <tableName>
alter column <columnName> <newDataType>
删除表
drop table <tableName>
索引
如果数据是有序的,那么检索速度就会加快,对基础表的排序一般有2种方案,一是对数据的记录进行物理上的排序,这边很难做到,二是不改变物理排序,通过建立索引来实现数据的记录的重新排序,称为逻辑排序
建立索引后,系统存取数据会自动选择合适的索引作为存储路径,索引的建立可以从不同角度加快查询的速度,但是如果索引建立的较多,会对数据库的维护带来较大的开销。
索引的建立
create [unique] [clustered | nonclustered] index <indexName> on <tableName> |
(<columnName>, [ASC | DESC ]) 【on <filegroupName】
- unique:建立唯一索引
- clustered | nonclustered :建立聚集索引或非聚集索引 (默认为非聚集索引)
- ASC|DESC : 升序还是降序 (默认是升序)
- on <filegroupName> 建立在那个逻辑设备(组)上,默认是主逻辑设备
索引的删除
drop index <indexName> on <tableName>
sql 数据更新语言
语法:
insert into <tableName> [<columnName1>,<columnName2>,<columnName3>,...]
values(<values1>,<values2>,<values3>,....)
- 在插入语句中可以不指定列名,但是值的顺序必须与建表的顺序相同
插入多个元组(书上223页)
删除元组:
delete from <tableName> [where <predicate>]
<predicate>:条件
修改数据
语法:
updata <tableName>
set <columnNam1>.=<expr1> , <columnNam2>.=<expr2> , .....
[from <tableName>]
[where <predicate>]
书上实例(224页)