数据库模式定义语言DDL(DataDefinition Language),是用于描述数据库中要存储的现实世界实体的语言。一个数据库模式包含该数据库中所有实体的描述定义。这些定义包括结构定义、操作方法定义等。
DDL描述的模式,必须由计算机软件进行编译,转换为便于计算机存储、查询和操纵的格式,完成这个转换工作的程序称为模式编译器。
模式编译器处理模式定义主要产生两种类型的数据:数据字典以及数据类型和结构定义。
数据字典和数据库内部结构信息是创建该模式所对应的数据库的依据,根据这些信息创建每个数据库对应的逻辑结构;对数据库数据的访问、查询也根据模式信息决定数据存取的方式和类型,以及数据之间的关系和对数据的完整性约束。
数据字典是模式的内部信息表示,数据字典的存储方式对不同的DBMS各不相同。
数据类型和结构的定义,是指当应用程序与数据库连接操作时,应用程序需要了解产生和提取的数据类型和结构。是为各种宿主语言提供的用户工作区的数据类型和结构定义,使用户工作区和数据库的逻辑结构相一致,减少数据的转换过程,这种数据类型和结构的定义通常用一个头文件来实现。
数据库模式的定义通常有两种方式: 交互方式定义模式和通过数据描述语言 DDL 描述文本定义模式。
数据库模式定义语言DDL(DataDefinition Language),是用于描述数据库中要存储的现实世界实体的语言。
DDL主要用于创建和删除数据库,表和索引。
一,基本的数据库操作:
1,创建(create)、修改(alter)、删除(drop)
2,数据库包括:
系统数据库
master:记录系统级的信息。
model:为用户创建数据库提供模板。
msdb:代理调度警报作业、记录操作。
tempdb:临时表、临时数据库。
用户数据库
二,详解:
1,表的创建:
建立一个“学生选课”表SC,它由学号Sno、课程号Cno,修课成绩Grade课程名Cname组成,其中(Sno, Cno)为主码。
CREATETABLE
SC(
SnoCHAR(7),
CnoCHAR(4),
Gradeint,
CnameCHAR(10), NOTNULLUNIQUE
Primarykey (Sno,Cno)
Foreignkey (Sno) Referencesstudent(Sno).
Foreignkey (Cno) ReferencesCourse (Cno)
);
基本表的创建-说明
1、建表的同时可以定义与该表有关的完整性约束,这些约束条件被存入系统的数据字典中,当用户操作表时,DBMS会自动检查该操作是否有违背完整约束条件.
2、建立约束的考虑:如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上;否则既可以定义在列级上也可以定义在表级上。
3、表名、列名是不区分大小写的。
4、对一个用户而言,表名必须唯一;一个表中,列名必须唯一。
5、表名、列名必须以字母开头,长度不超过30个字符。
常用完整性约束
1、主码约束: PRIMARY KEY
2、唯一性约束:UNIQUE
3、非空值约束:NOTNULL
4、参照完整性约束:FOREIGNKEY
常用数据类型:(不同DBMS数据类型不完全相同)
T-SQL数据类型:(SQL 程式设计语言的增强版,它是用来让应用程式与SQL Server 沟通的主要语言。T-SQL提供标准 SQL的DDL 和 DML 功能,加上延伸的函数、系统预存程序以及程式设计结构(例如 IF 和 WHILE)让程式设计更有弹性。)
2,删除基本表:
DROPTABLEtable_name
3,修改基本表——添加列:
ALTERTABLEtable_name
ADDnew_column_name datatype
[constraints]
例:向Student表增加“入学时间”(SCome),数据类型为日期型。
ALTERTABLEstudent
ADDScomeDATE
4,修改基本表——改变列的数据类型:
ALTERTABLEtable_name
ALTERCOLUMNcolumn_name new_datatype
例:将年龄的数据类型改为半字长整数。
ALTERTABLEStudent
ALTERCOLUMNSageSMALLINT
5,修改基本表——删除完整性约束
ALTERTABLEtable_name
DROPconstraint
例:删除学生姓名必须取唯一值的约束。
ALTERTABLEstudent
DROPunique(sname)
6,建立索引:
CREATEINDEXindex_nameONtable_name(column_name)
7,将某个字段设为主键:
ALTERTABLEtable_nameADDPRIMARYKEY(column_name)
8,将某个字段的主键定义取消:
ALTERTABLEtable_nameDROPPRIMARYKEY(column_name)
约束是为了数据的完整性而存在的,而数据的完整性是指数据的可靠性和准确性。
根据数据完整性大致可以分为四种:
1.实体完整性
就是说每个表代表一个实体,每个表与他所代表的实体一致,特定表的唯一实体。
实现实体完整性的的方法:索引(index),唯一约束(unique),主键约束(primarykey),标识列属性
2.域完整性
给每个列定义输入的有效性
实现域完整性的的方法: 限制数据类型,格式,外键约束(foreign key references),检查约束(check( between and )),默认值定义(default ' '),非空(not null)约束。
3.引用完整性
在输入或删除记录时,表与表之间已定义的关系
实现域完整性的的方法: 通过外键与主键的关系,外键与唯一键之间的关系,外键与检查约束
4.用户自定义完整性
所有的完整性都支持用户自定义完整性
注意:
1.在SQL中有个自动增长的自动编号列identity
2. MySQL不支持检查约束
3.索引就像字典的目录,把索引加在频繁的以某个字符段查询的的上面,在表上创建索引虽然会提高select语句的速度,但也会降低delete,update,insert语句执行的速度,如果一个表中太多的索引会降低数据库的整体性能
4.primary key = unique+not null(加primary key 要比加unique和not null效率膏,因为加primarykey时会自动加索引,加快了效率)
5.在SQL server中正在实用的数据库不能被删除(除非切换数据库才能被删除),mySQl中可以删除正在实用的数据库