1、创建与使用数据表,复习,1.主键定义? 功能?2.外键定义? 功能?3.其他约束有哪些? 功能?,关系表方法:1.使用管理器2.SQL代码,定义表:创建、修改、删除,定义表的约束:主键、外键、NULL、默认、Check、唯一性,操作表:插入、修改、删除,复 习,6.2.3 使用Transact-SQL创建数据表 使用T-SQL创建表的语法如下。 CREATE TABLE database_name schema_name | schema_name table_name( | ,n ) on partition_scheme_name ( partition_column_name ) | f
2、ilegroup | “default” TEXTIMAGE_ON filegroup | “default” 其中:包括: column_name FILESTREAM COLLATE collation_name NULL | NOT NULL CONSTRAINT constraint_name DEFAULT constant_expression | IDENTITY ( seed ,increment ) NOT FOR REPLICATION ROWGUIDCOL .n ,使用Transact-SQL语句中的CREATE TABLE命令创建表,其语法最简格式如下: CREATE
3、TABLE table_name (Col_name column_properties , )提示:每个不同项目之间用空格隔开,列名,列的数据类型及长度,可以有若干列,用逗号分割开,表名,切换数据库命令: USE Library GO提示:GO命令是一个批执行命令,后面会详细解释。执行上述命令后,后续的创建表命令等命令,均在该数据库(Library库 )中运行。,使用Transact-SQL语句创建表,【例】 利用CREATE TABLE命令创建“book”。 USE Library GO CREATE TABLE book ( 编号 CHAR(8) NOT NULL, ISBN号 CHAR
4、(13) NOT NULL, 书名 VARCHAR(200), 定价 MONEY, 出版社 VARCHAR(200), 出版日期 DATETIME ),使用Transact-SQL语句创建表,使用Transact-SQL语句中的CREATE TABLE命令创建表,其语法较完整格式: CREATE TABLE ( , );,使用Transact-SQL语句创建表,定义约束的类型的,1) CHECK约束 2) DEFAULT约束 3) PRIMARY KEY约束 4) FOREIGN KEY约束 5) UNIQUE约束 6) NULL 7) NOT NULL,-检测约束,-默认约束,-主键约束,-
5、外键约束,-唯一约束,-允许为空约束,-非空约束,定义约束是在创建表或修改表的命令中实现的,约束均为可选项,默认为NULL, NULL | NOT NULL | PRIMARY KEY | DEFAULT |CHECK |UNIQUE | NOT NULL UNIQUE NULL 空,默认值 NOT NULL 非空 PRIMARY KEY,当表中只有一个列是主键,在该列数据类型说明后添加PRIMARY KEY,列的完整性约束说明,PRIMARY KEY SQL的句法:在该列数据类型说明后添加PRIMARY KEY 例如:专业表(专业代码,专业名称)CREATE TABLE 专业表(专业代码 C
6、HAR(4) PRIMARY KEY, 专业名称 VARCHAR(30) NOT NULL);,看看P80页 例题6-1,【例6-1】使用CREATE TABLE语句创建“Book”表,“Book”表用存放图书的各种信息,包括图书编号、图书名称、图书类别号、作者、出版社、出版日期、入库日期、价格、状态等属性。,USE Library CREATE TABLE Book ( BookId char(10) not null primary key,BookName varchar(50) not null,BkCateId varchar(6) not null,Author varchar(2
7、0) not null,Publish varchar(50) not null,PubTime date null,CheckIn date not null,Price money null,BookStatus char(2) not null ),DEFAULT设置缺省值,对暂时不输入数据的数字列施加DEFAULT约束,以避免数据操作错误,格式:DEFAULT() 例如: DEFAULT(0)DEFAULT(男)DEFAULT(2012-3-12) UNIQUE 惟一性约束 NOT NULL UNIQUE 该列非空且惟一,CHECK指出该列取值约束条件内的值,格式:CHECK() 例如
8、:学生信息表(学号,姓名,性别,生日,籍贯,专业号,班级) CREATE TABLE 学生信息表 (学号 CHAR(10) PRIMARY KEY,姓名 CHAR(8) NOT NULL,性别 CHAR(2) CHECK(性别 =男 or 性别 =女) DEFAULT(男) ,生日 DATETime NOT UNLL,籍贯 CHAR(20) DEFAULT(合肥) ,专业代码 CHAR(4) NOT NULL,班级 CHAR(4) NOT NULL );,表的完整性约束说明: 主键约束子句 用于主键多于一个(,)外键约束子 FOREIGN KEY () REFERENCES (),本表列名,主
9、键表的表名,主键表对应列名,单主键约束案例:,例:课程设置表(课号,课程名称,学分) CREATE TABLE 课程设置表 (课号 CHAR(4) PRIMARY KEY ,课程名称 varchar(40),学分 INT DEFAULT(2) ),例:成绩表(学号,课号,成绩) CREATE TABLE 成绩表 (学号 CHAR(10),课号 CHAR(4),成绩 INT DEFAULT(0) ,PRIMARY KEY (学号,课号),多主键约束案例:,多属性主键,例:成绩表(学号,课号,成绩) CREATE TABLE 成绩表 (学号 CHAR(10),课号 CHAR(4),成绩 INT D
10、EFAULT(0) ,PRIMARY KEY (学号,课号),FOREIGN KEY (课号) REFERENCES 课程设置表(课号),FOREIGN KEY (学号) REFERENCES 学生信息表(学号);,多主键约束+外键案例:,检验约束子句CHECK(值的约束条件或包含SELECT语句的SQL语句)注意:SQL语句以“;”号结束,在交互式使用中是一条命令,例:成绩表(学号,课号,成绩) CREATE TABLE 成绩表 (学号 CHAR(9), 课号 CHAR(7), 成绩 INT DEFAULT(0), PRIMARY KEY (学号,课号), FOREIGN KEY(课号)RE
11、FERENCES 课程设置表(课号), FOREIGN KEY(学号)REFERENCES 学生信息表(学号), CHECK(成绩 = 0 AND 成绩 = 100) );,6.3 修改表结构,已经建立的表格,如果不符合要求,可以进行修改。SQLServer2008提供两种修改数据表的方法: SQL Server Management Studio修改表 使用Transact-SQL语句修改表,6.3.1 使用SQL Server Management Studio修改数据表结构修改数据表结构包括修改某列的数据类型、列宽度、添加和删除某列、修改列的约束等。选中表如Usercate右键设计打开设
12、计界面进行各类修改,约束设置,6.3.2 使用Transact-SQL修改数据表结构 使用T-SQL修改数据表结构的语法如下: ALTER TABLE database_name schema_name | schema_name table_name ALTER COLUMN column_name -修改列定义 new_data_type (precision ,scale ) COLLATE NULL | NOT NULL | ADD | DROP ROWGUIDCOL | ADD -添加列 | column_name AS computed_column_expression ,n |
13、 WITH CHECK | WITH NOCHECK ADD -添加约束 ,n | DROP CONSTRAINT constraint_name -删除约束 | COLUMN column ,n -删除列| CHECK | NOCHECK CONSTRAINT -启用或禁用约束 ALL | constraint_name ,n | ENABLE | DISABLE TRIGGER -启用或禁用触发器 ALL | trigger_name ,n ,【例6-4】在“UserTb”表中,为“UserBkNum”字段添加一个检查约束,所 输入的已借书数量必须大于等于零的约束代码:USE Librar
14、y Go ALTER TABLE UserTbADD CONSTRAINT U_check CHECK ( UserBkNum=0 ),【例6-5】在“UserTb”表中添加一个字段“UserOcc”表示读者的职业, varchar(6)。随后再删除掉:ALTER TABLE UserTbADD UserOcc varchar(6) null GO ALTER TABLE UserTbDROP COLUMN UserOcc,此处需要注意的是:当使用Alter Table 添加列时,如果要求该列不为空,则必须要指定一个默认值,否则不能添加成功。若不允许为空又不需指定默认值,只能先添加一个允许为空
15、的列,再通过alter column修改该列为非空。如:ALTER TABLE UserTbADD UserOcc varchar(6) null GO ALTER TABLE UserTbALTER COLUMN UserOcc varchar(6) not null即设置了添加的列“UserOcc”非空。,【例6-6】在表“UserTb”中,添加一个禁用,用于限制在【例6-4】中创建的约束。NOCHECK CONSTRAINT与ALTER TABLE一起使用,以禁用该约束并使正常情况下会引起约束违规的插入操作得以执行。CHECK CONSTRAINT重新启用该约束。在查询标签页中键入以下命
16、令,并运行即可。 ALTER TABLE UserTbNOCHECK CONSTRAINT U_check,6.4 数据表中插入、修改与删除数据,创建好数据表的结构之后,表中并没有纪录。本节介绍在建立好的表中如何插入、修改和删除数据。 方法:1.使用管理器2.SQL代码,插入数据时有什么注意事项?,6.4.1 向数据表中插入数据 选中表右键编辑前200行打开数据编辑界面,2. 使用Transact-SQL语言向数据表中插入数据SQL Server支持多种向数据表中插入数据的方法,最常用的是使用INSERT语句和INSERTSELECT语句。 (1)使用INSERT语句 基本语法为:INSERT
17、 INTO table_or_view_name ( column_list) VALUES expression_list 其中: table_or_view_name:要插入数据的表或视图名字。 column_list:由逗号分隔的列名列表,用来指定为其提供数据的列。如 果没有指定,表示向表或视图中的所有列都输入数据。 expression_list:要插入的数据值的列表。值被指定为逗号分隔的表达 式列表,表达式的个数、数据类型、精度必须与column_list列表对应的 列一致。使用INSERT语句每次只能向数据表中输入一条记录。,使用INSERT语句向表中插入数据,即: INSERT
18、INTO ()VALUES();,1.全部列输入且与值表顺序一致可以省略 2.部分列输入:1)要列名;2)省略部分需允许为空,【例6-7】向读者表中添加一行新记录(T003,刘刚,true,研究生,计算机系,3-118,34567,当前时间,2)。INSERT into UserTb(UserId,UserName,UserSex,CateName,UserReg,UserBkNum) VALUES (T004,刘刚,1,研究生,default,2)练习:UserCate(读者类型,借书数量,借书期限)向读者类型表插入一条记录,部分列输入: 1.要列名; 2.省略部分需允许为空,【例6-7】向
19、读者表中添加一行新记录(T003,刘刚,true,研究生,计算机系,3-118,34567,当前时间,2)。INSERT into UserTbVALUES (T003,刘刚,1,研究生,计算机系,3-118,34567,default,2)如果没有指定列表,则VALUES子句中指定值得顺序必须与表中列的顺序一致。采用默认值的记录字段,在值列表中要用“default”表示。,列名表省略,要求次序一致,(2)使用INSERTSELECT语句 基本语法为:INSERT INTO table_or_view_name ( column_list) SELECT ( select_list )FROM
20、 table_nameWHERE search_conditionsINSERT语句中的SELECT子查询可用于将一个或多个其它表的值添加到表中并可以一次性插入多行。子查询的select_list必须与INSERT的 column_list相匹配。,【例6-8】将所有机械工业出版社的图书记录插入到一个机械工业出版社表中(假设机械工业出版社表已经存在,且结构与“Book”表相同。 INSERT INTO 机械工业出版社 (BookId, BookName, Publish) SELECT BookId,BookName,PublishFROM BookWHERE Publish=机械工业出版社,
21、6.4.2 修改数据表中数据 1.使用SQL Server Management Studio修改表中的数据使用SQL Server Management Studio修改表中的数据很方便,方法如下: 1) 在“对象资源管理器”中打开要修改的数据表,并用鼠标定位在要修改 的数据项上。 2) 将数据项内容按要求修改后可以直接离开修改的行,系统自动保存修 改后符合要求的数据。 2.使用Transact-SQL语句修改数据项使用Transact-SQL语句修改数据项的基本语法如下: UPDATE table_name SET column_name= expression | DEFAULT | N
22、ULL FROM table_name WHERE search_conditions 其中:SET子句包含要更新的列和新值的列,FROM子句指定为SET子句中的 表达式提供值的表,WHERE子句指定条件限定所要更新的行,如果省略WHERE子句,则表示要修改所有的记录。,使用UPDATE语句修改数据,即: UPDATE SET = ,=,=WHERE;注意:根据条件可以同一命令改多个数据,【例6-9】将UserTb读者表中,学号为“s001”的学生类别改为“研究生”。 由下列语句实现: UPDATE UserTbSET CateName=研究生WHERE UserId=S001 -有条件要求,
23、一条记录被修改。 练习: UserTb (读者编号,姓名,性别,读者类别名,工作单位,住址,。) 设计:修改类别名、工作单位,【例6-10】将所有读者类别的借书数量增加一本。 UPDATE UserCateSET BorrNum=BorrNum+1没有条件,表中所有记录均被修改。练习:成绩表(学号,课号,成绩)设计1:修改成绩+5 设计2:修改某课号的成绩+5 问题:2者区别?,6.4.3 删除数据表中数据当数据表中的数据已经过时或者没有存在的意义的时候,可以将表中数据删除。 1. 使用SQL Server Management Studio删除表中的数据 使用“SQL Server Mana
24、gement Studio”工具删除表中的数据的方法如下: 1) 在“对象资源管理器”中打开要删除记录的数据表,并用鼠标定位在要 删除的行上。 2) 在要删除的行上单击鼠标右键,从弹出的快捷菜单中选择“删除”菜单 项即可。如图6-20所示。,2. 使用Transact-SQL语句删除数据表中数据使用Transact-SQL语句删除数据表中数据时,常用的方法是使用DELETE语句和TRUNCATE语句。下面来分别介绍这两种方式。 (1) DELETE语句删除表中指定记录。 基本格式是: DELETE FROM table_name WHERE search_condition使用DELETE删除
25、的记录会存放在日志中,不是一种永久删除的方式。,即: DELETE FROM WHERE ;,【例6-11】删除读者号是“T003”的读者。 DELETE FROM UserTb WHERE UserId=T003提示:慎用没有条件的删除命令!练习:UserTb (读者编号,姓名,性别,读者类别名,工作单位,住址,。) 设计:删除某读者类别的全部记录,(2) TRUNCATE语句删除数据TRUNCATE TABLE语句也可以删除数据表中的数据,它只针对整个数据页的释放,与DELETE语句相同,只删除表内数据,表结构保留。 TRUNCATE语句的语法是:TRUNCATE TABLE table_
26、name 警告!由于TRUNCATE TABLE语句是一种无日志记录的删除,用该语句删除后无法进行数据恢复,因此使用时应十分谨慎。,6.5 删除数据表,当数据库中有不需要的数据表时,可以将其删除。删除表的方法仍然可以使用“SQL Server Management Studio”工具和Transact-SQL语句。1. 使用SQL Server Management Studio删除数据表在“SQL Server Management Studio”中,在用户数据库中选中要删除的数据表,鼠标右键单击,在弹出的菜单中选择“删除”项即可。,6.5 删除数据表,2. 使用Transact-SQL语句
27、删除数据表 用Transact-SQL语句删除数据表的格式是: DROP TABLE table_name 其中:table_name是要删除的数据表的名字。注意:不能删除正在使用的数据表,也不要企图删除系统表。,作业,1.P90-91 题1-18 2.实训准备 写在实训准备练习本上,实训课检查。内容见后页PPT,实训一:使用Create Table代码创建Library数据库的表,写在实训准备作业本上: 1.创建“图书分类表”(BookCategory) 说明:(参见专业表设计) BkCateId 图书分类编号,主键 BookCate 图书分类名,2.见P80页表6-11,参见例题6-1,或参见学生信息表,创建book表,3. 创建借阅信息表Lending 说明: (参见成绩表设计) Id 编号 ,主键 UserId 读者编号,外键,对应表6-9的主键 BookId 图书编号 ,外键对应表6-11的主键 LendDate 借书日期 , 默认:getdate() RtnDate 还书日期 ,默认:null,实训二:学生信息管理系统设计,写在实训准备作业本上: 1.给每个表插入一组数据的代码(Insert命令) 提示:先做主键表数据插入,后做对应外键表的数据插入。 2.把学号为XX的同学的班级改为你们的班级名称(Update命令),End!,