SQL语句建库建表建约束.ppt
SQL 语言建库建表建约束,制作人:成立智(成哥)Q ICQ:QQ1787211789P hone:15801239839备注:本人男(你懂得),学习目标,理解SQL的相关概念掌握数据类型了解数据库存储结构掌握如何创建一个数据库以及表熟练使用添删改查操作,SQL的基本概念,数据库(DATABASE)和表(TABLE),字段(FIELD),关键字(KEY),记录(RECORD),数据库系统和数据库管理系统,数据模型,SQL的基本概念,完整性约束:数据完整性(Data Integrity指数据的精确性(Accuracy)和可靠性(Reliability)。数据完整性分为四类:实体完整性(Entity Integrity)域完整性(Domain Integrity)参照完整性(Referential Integrity)用户定义的完整性(User-definedIntegrity),SQL的基本概念,实体完整性(Entity Integrity):实体完整性规定表的每一行在表中是惟一的实体。在数据表中可以对相应字段进行如下约束来实现实体完整性:UNIQUE(唯一约束)PRIMARYKEY(主键约束)IDENTITY(标识列),SQL的基本概念,域完整性(Domain Integrity):是指数据库表中的列必须满足某种特定的数据类型或约束。域完整性有以下几种约束:CHECK(检查约束)FOREIGN KEY(外键约束)DEFAULT(默认值约束)NOT NULL(不为空值约束),SQL的基本概念,参照完整性(Referential Integrity):是指两个表的主关键字和外关键字的数据应对应一致。在SQL Server 中,参照完整性作用表现在如下几个方面:禁止在从表中插入包含主表中不存在的关键字的数据行禁止会导致从表中的相应值孤立的主表中的外关键字值改变禁止删除在从表中的有对应记录的主表记录,SQL的基本概念,用户定义的完整性(User-defined Integrity):是针对某个特定关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。SQL Server 提供了定义和检验这类完整性的机制,以便用统一的系统方法来处理它们,而不是用应用程序来承担这一功能。其它的完整性类型都支持用户定义的完整性。SQL Server 提供了一些工具来帮助用户实现数据完整性,其中最主要的是:规则(Rule)、缺省值(Default)、约束(Constraint)和触发器(Trigger)。,数据类型,整型数据类型浮点数据类型 字符数据类型 日期和时间数据类型 文本和图形数据类型,货币数据类型 位数据类型 二进制数据类型 特殊数据类型 新增数据类型,数据库管理,数据库文件 主数据库文件(Primary Database File)辅助数据库文件(Secondary Database File)事务日志文件,数据库的存储结构,数据库文件组 为了便于分配和管理,SQL Server允许将多个文件归纳为同一组,并赋予此组一个名称,这就是文件组。,1、文件与文件组 在SQL Server 中数据库是由数据库文件和事务日志文件组成的。一个数据库至少应包含一个数据库文件和一个事物日志文件。(1)数据库文件(Database File)数据库文件是存放数据库数据和数据库对象的文件。一个数据库可以有一个或多个数据库文件,一个数据库文件只属于一个数据库。当有多个数据库文件时,有一个文件被定义为主数据库文件(Primary Database File),扩展名为mdf,它用来存储数据库的启动信息和部分或全部数据,一个数据库只能有一个主数据库文件。其它数据库文件被称为次数据库文件(Secondary Database File),扩展名为ndf,用来存储主文件没存储的其它数据。采用多个数据库文件来存储数据的优点体现在:数据库文件可以不断扩充,而不受操作系统文件大小的限制;可以将数据库文件存储在不同的硬盘中,这样可以同时对几个硬盘做数据存取,提高了数据处理的效率。对于服务器型的计算机尤为有用。,(2)事务日志文件(Transaction Log File)事务日志文件是用来记录数据库更新情况的文件,扩展名为ldf。例如使用INSERT、UPDATE、DELETE、等对数据库进行更的操作都会记录在此文件中,而如SELECT 等对数据库内容不会有影响的操作则不会记录在案。一个数据库可以有一个或多个事务日志文件。(3)文件组(File Group)文件组是将多个数据库文件集合起来形成的一个整体。每个文件组有一个组名。与数据库文件一样,文件组也分为主文件组(Primary File Group)和次文件组(Secondary FileGroup)一个文件只能存在于一个文件组中,一个文件组也只能被一个数据库使用。主文件组中包含了所有的系统表。当建立数据库时,主文件组包括主数据库文件和未指定组的其它文件。在次文件组中可以指定一个缺省文件组,那么在创建数据库对象时如果没有指定将其放在哪一个文件组中,就会将它放在缺省文件组中。如果没有指定缺省文件组则主文件组,为缺省文件组。注意:事务日志文件不属于任何文件组。,创建数据库,CREATE DATABASE 数据库名 ON PRIMARY(,n)LOG ON(,n),T-SQL创建数据库的语法:,创建数据库示例,CREATE DATABASE stuDB ON PRIMARY-默认就属于PRIMARY主文件组,可省略(NAME=stuDB_data,-主数据文件的逻辑名 FILENAME=D:projectstuDB_data.mdf,SIZE=5mb,-主数据文件初始大小 MAXSIZE=100mb,-主数据文件增长的最大值 FILEGROWTH=15%-主数据文件的增长率)LOG ON(NAME=stuDB_log,FILENAME=D:projectstuDB_log.ldf,SIZE=2mb,FILEGROWTH=1MB)GO,数据文件的具体描述,日志文件的具体描述,删除数据库,如果SQL Server中已存在数据库stuDB,运行下列语句,会出现什么问题?,CREATE DATABASE stuDBON(.)LOG ON(.)GO,演示:再次运行示例1,USE master-设置当前数据库为master,以便访问sysdatabases表GOIF EXISTS(SELECT*FROM sysdatabases WHERE name=stuDB)DROP DATABASE stuDBCREATE DATABASE stuDBON(.)LOG ON()GO,删除数据库,删除数据库的语法:,DROP DATABASE 数据库名,EXISTS()语句:检测是否存在stuDB数据库如果存在stuDB数据库,则删除,创建表,建表的语法:,CREATE TABLE 表名(字段1 数据类型 列的特征,字段2 数据类型 列的特征,),列的特征:包括该列是是否为空(NULL)、是否是标识列(自动编号)、是否有默认值、是否为主键等。,建表示例 1,USE stuDB-将当前数据库设置为stuDB GOCREATE TABLE stuInfo/*-创建学员信息表-*/(stuName VARCHAR(20)NOT NULL,-姓名,非空(必填)stuNo CHAR(6)NOT NULL,-学号,非空(必填)stuAge INT NOT NULL,-年龄,INT类型默认为4个字节 stuID NUMERIC(18,0),-身份证号 stuAddress TEXT-住址,允许为空,即可选输入)GO,NUMERIC(18,0)代表18位数字,小数位数为0,演示:创建学员信息表stuInfo,IDENTITY(起始值,递增量),删除表,如果当前数据库中已存在stuInfo表,再次创建时系统将提示出错。如何解决呢?,删除表,删除表的语法:,DROP TABLE 表名,USE stuDB-将当前数据库设置为stuDB,以便在stuDB数据库中建表GOIF EXISTS(SELECT*FROM sysobjects WHERE name=stuInfo)DROP TABLE stuInfoCREATE TABLE stuInfo/*-创建学员信息表-*/(.)GO,创建约束,约束名的取名规则推荐采用:约束类型_约束字段主键(Primary Key)约束唯一(Unique)约束默认(Default)约束检查(Check)约束外键(Foreign)约束,主键(Primary Key)约束CREATE TABLE stuInfo(stuId int primary key identity(1,1),-设为主键值,值为自增增量为1;stuName VARCHAR(20)NOT NULL,.)如果需要自定义主键名,可以使用以下代码:CREATE TABLE stuInfo(stuId int primary key identity(1,1)constraint PK_STUID primary key clustered,.),唯一(UNIQUE)约束 与primary key约束不同,UNIQUE约束允许有NULL值。CREATE TABLE stuInfo(,stuNo CHAR(6)unique,)如果需要自定义主键名,可以使用以下代码:CREATE TABLE stuInfo(,stuNo CHAR(6)CONSTRAINT U_stuNo unique,.),默认(Default)约束CREATE TABLE stuInfo(,stuBeginDate datetime default(getdate(),)如果需要自定义主键名,可以使用以下代码:CREATE TABLE stuInfo(,stuBeginDate datetime CONSTRAINT D_ stuBeginDate default(getdate(),.),外键(Foreign)约束 如果该学生信息表和另一张学生成绩表建立相关,那么就必须建立外键。CREATE TABLE stuInfo(,currID int foreign key(currID)references stuCurr(currID)如果需要自定义外键名,可以使用以下代码:CREATE TABLE stuInfo(,currID int CONSTRAINT FK_stu_cur foreign key(currID)references stuCurr(currID),添加约束,添加约束的语法:,ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型 具体的约束说明,添加约束示例,ALTER TABLE stuInfo ADD CONSTRAINT PK_stuNo PRIMARY KEY(stuNo)ALTER TABLE stuInfo ADD CONSTRAINT UQ_stuID UNIQUE(stuID)ALTER TABLE stuInfo ADD CONSTRAINT DF_stuAddress DEFAULT(地址不详)FOR stuAddressALTER TABLE stuInfo ADD CONSTRAINT CK_stuAge CHECK(stuAge BETWEEN 15 AND 40)ALTER TABLE stuMarksADD CONSTRAINT FK_stuNo FOREIGN KEY(stuNo)REFERENCES stuInfo(stuNo)GO,演示:给学员信息表stuInfo添加约束,删除约束,如果错误地添加了约束,我们还可以删除约束 删除约束的语法,ALTER TABLE 表名 DROP CONSTRAINT 约束名,例如:删除stuInfo表中地址默认约束ALTER TABLE stuInfo DROP CONSTRAINT DF_stuAddress,小 结,SQL语言是数据库技术开发的主体,通过SQL语言我们可以按照需求获取数据信息。数据都有其数据类型,通过数据类型,我们可以了解数据的属性。SQL语言包括数据定义语言,主要是创建数据库对象;数据操纵语言,可以对数据进行添删改查操作及管理;数据控制语言,对用户和对象的操作设置权限。,