1数据库表的管理刘国柱联系方式Liu_guozhu@yahoo.com.cn2目录创建表修改表删除表数据完整性3NO:4数据完整性4数据完整性所谓数据完整性,就是指存储在数据库中数据的一致性和正确性可以通过各种约束和默认值、规则、触发器等数据库对象来保证数据的完整性约束包括:Primarykey主键Foreignkey外键Unique唯一约束Check检查约束Default默认值约束5数据完整性-概览实体完整性(行)域完整性(列)参照完整性(表之间)用户定义完整性Primarykey主键Foreignkey外键Unique唯一约束Check检查约束Default默认值约束6数据完整性-完整性与约束的关系完整性类型约束类型域DefaultCheckreferential实体PrimarykeyUnique参照ForeignkeyCheck7数据完整性-数据完整性分类实体完整性(行)域完整性(列)参照完整性(表之间)用户定义完整性8数据完整性-实体完整性实体完整性把表的每一行看做一个实体,要求所有行都具有唯一标识可以通过建立唯一索引、primarykey约束、unique约束,以及列的identity属性等措施来实施实体完整性9数据完整性-域完整性域完整性要求表中指定列的数据具有正确的数据类型、格式和有效的数据范围域完整性通过非空、check约束,以及默认、规则等数据库对象来实现10数据完整性-参照完整性参照完整性维持被参照表和参照表之间的数据一致性通过主键约束和外键约束来实现在被参照表中,当其主键被其他表参照时,该列不能被删除,也不能被改变。再参照表中,不允许参照不存在的主键值。11数据完整性-Primarykey约束Primarykey约束通过建立唯一索引保证指定列的实体完整性必须被定义成notnullPrimarykey约束可以应用于表中一列或多列,应用于多列时,它被定义成表级primarykey约束一个表只能建立一个Primarykey约束12数据完整性-创建Primarykey约束语法:Createtabletable_name(column[constraintcon_nameprimarykey[clustered|nonclustered])示例:先禁止name的default约束altertableTb_constraintdropconstraintdf_name为name添加pk约束altertableTb_constraintaddconstraintpk_nameprimarykey(name)13数据完整性-Unique约束Unique约束保证一列或多列的实体完整性,每个unique约束要求建立一个唯一索引对于实施unique约束的列,不允许有任意两行具有相同的值与primarykey不同,允许为一个表建立多个unique约束,允许为null值,但不允许两行同时为null14数据完整性-创建Unique约束语法:Createtabletable_name(column[constraintcon_nameunique[clustered|nonclustered]])添加unique约束altertableTb_constraintaddconstraintun_photounique(name,tel)15数据完整性-Check约束Check约束限制输入到一列或多列中的可能值,从而保证数据库中数据的域完整性Check约束中可以包含搜索条件,但不能包含字查询一个表可以定义多个check约束,对于列也可以定义多个check约束,但在每个createtable语句中只能为每列定义一个check约束如果check约束应用于多列时,他必须被定义为表级check约束可以使用如下关键字:IN,LIKE,BETWEEN例如:ADDRESSIN('B1','B2','B3')16数据完整性-创建check约束语法Createtabletable_name(Column[consraintcon_name]check(expression))修改表Tb_constraint,添加一个列,使用check约束altertableTb_constraintaddtelchar(15)nullconstraintch_telphcheck(tellike'(029-)[0-9][0-9][0-9][0-9][0-9][0-9][0-9]')17数据完整性-Default约束使用默认值约束以后,如果用户再插入数据时没有显式为列提供数据,系统将默认值赋予该列默认值约束提供的默认值可以为常量、函数、空值等默认值约束与列相关联,可以使用除timestamp和identity列以外的所有数据类型列每列只能有一个默认值约束,约束表达式不能参照表中的其他列、表、视图和存储过程18数据完整性-创建default约束语法:Creaetabletable_name(column_nameconstraintcon_namecon_type[,column_nameconstraintcon_namecon_type])19数据完整性-创建default约束(示例)创建一个表,country拥有一个default约束createtableTb_constraint(namechar(20)notnull,countryvarchar(30)default'china')修改表的name列,使其拥有一个default约束altertableTb_constraintaddconstraintDf_namedefault'unknown'forname20数据完整性-Foreignkey约束Foreignkey约束为表中一列或多列数据提供参照完整性实施Foreignkey约束要求在被参照表中定义primarykey约束或unique约束Foreignkey约束限制插入到表中的被约束的值必须在被参照表中已经存在21数据完整性-Foreignkey注意点一个表只能参照253个不同的数据表Foreignkey约束不能应用于临时表在实施Foreignkey约束时,用户必须至少拥有的被参照列的select和references的权限Foreignkey约束可以参照自身表的列(自参照)Foreignkey约束只能参照同一个数据库的某一个表,不能参照其他数据库的表,跨数据库的参照约束只能通过触发器来实现22数据完整性-创建Foreignkey约束语法:Createtableable_name(Column[constraintcon_nameforeignkey(col_name[,col_name]])referencetable_name(column[,column[,….]]))23数据完整性-创建Foreignkey约束(示例)在pubs数据库,为titleauthor表的title_id列添加foreign约束altertabletitleauthoraddconstraintfk_title_idforeignkey(title_id)referencestitles(title_id)24总结创建表修改表删除表数据完整性25作业与练习作业一:描述:AdventureWorks,Inc的管理层决定为员工提供旅游和医疗返还。他们想在数据库中存储这些返还的详情。对于它,你需要创建一个数据库表,EmployeeReimbursements。表的详情显示如下表。26作业与练习作业一(续):列数据类型和大小约束RimIDint主键EmployeeIDint参考Employee表的EmployeeID的外键,NOTNULLAmountmoneyRimTypevarchar(20)RimType应该是Medical,Cash或LocalPending_withvarchar(30)NOTNULL