===== 第 1 页 ===== 第5节、综合练习 练习1:创建带有约束的表1(学号作主键) 1、在XK库中,创建一个‘学生表’,表名:学生表,结构如下: 说明:成绩用decimal(4,1) 序号 | 字段名 | 数据类型 | 长度 | 小数位数 | 约束 | 备注 1 | 学号 | 字符 | 11 | | 主键 | 2 | 姓名 | 字符 | 5 | | 非空 | 3 | 性别 | 字符 | 1 | | 默认值为‘男’ | 4 | 年龄 | 整数 | | | 允许为空 | 5 | 生日 | 日期 | | | 允许为空 | 6 | 成绩 | 小数 | 4 | 1 | 允许为空 | 7 | 籍贯 | 字符 | 10 | | 默认值为‘山东青岛’ | ===== 第 2 页 ===== 2、数据操作: (1)用insert插入你个人的数据,及其它2位同学的模拟数据。 体验:主键不能重复也不能为空、非空字段必须输入值、有默认值字段不输入值时自动填充默认值。 (2)查看数据 (3)用update修改你的数据 ===== 第 3 页 ===== 3、提示说明: (1)通常,数据库中的数据表,都要有主键。主键有3种情况: ①主键是一个字段。在定义该字段时,可以直接用primary key说明。如:学号 varchar(11) primary key, 凡是指定为主键的字段,默认都是为not null的,此时也可以不写not null。 ②主键是二个或二个以上字段构成,称为联合主键([P103]),定义时,在最后单独定义primary key(字段1,字段2)。 ③如果表中没有明显主键,可以使用标识列id,指定标识列id作主键。 ===== 第 4 页 ===== 提示说明: 使用标识列作主键,ID为整数,起始值(又称种子)可以为1,增量(又称步长)也可以为1。 即id int primary key auto_increment (2)默认值为‘男’, 用default‘男’ (3)成绩,保留1位小数,用decimal 或numeric(2者用法相同), decimal (4,1)表示长度共4位(不包括小数点),其中小数1位。如小数位数是0,则表示整数。 ===== 第 5 页 ===== 4、参考答案: ===== 第 6 页 ===== 练习2:创建带有约束的表2(标识列作主健) 1、在XK库中,创建一个‘选举表’,表名:选举表,结构如下: 说明:id int primary key auto_increment 。 要有关键字auto_increment,默认从1开始,增量也是1。 但用insert语句插入数据时,不要给id赋值,系统会自动根据定义赋给相应值。 序号 | 字段名 | 数据类型 | 长度 | 小数位数 | 约束 | 备注 1 | ID | 整数 | | | 主键(从1开始,步长为1) | 2 | 姓名 | 字符 | 5 | | 非空 | 3 | 性别 | 字符 | 1 | | 默认值为‘女’ | 4 | 得票 | 整数 | | | | ===== 第 7 页 ===== 2、数据操作: (1)用insert录入3条模拟数据 (2)显示数据,观察id变化。 (3)删除一条记录,再增加一条记录,观察id的变化。 ===== 第 8 页 ===== 3、参考答案: ===== 第 9 页 ===== 练习3:修改表的结构 为“选举表”增加1个字段,班委varchar(6) ===== 第 10 页 ===== 练习4:2个表数据操作 1、复制“选举表”,生成新表“得票表” (包括结构和数据) 2、查看2个表的结构和数据 ===== 第 11 页 ===== 3、思考并实验 如果用一条语句 create table 得票表 select * from 选举表; 那么,得票表和选举表有什么区别? 4、清空“得票表”的数据后,只将“选举表”中的姓名、性别2列数据,追加到“得票表”中,如何写语句? 执行后,查看得票表id有什么变化? ===== 第 12 页 ===== 说明: 从表1中的查询出数据插入到表2中 insert into 表2(字段1, 字段2,……) select 字段1, 字段2,…… from 表1 where 条件 说明: (1)表1、表2都是已存在的表,结构可以不完全相同。 (2)语句中表2的字段列表,要与表1的字段列表一一对应(个数、类型、顺序等)。 (3)表2中,没有插入数据的字段,要允许为空。 如: insert into 得票表(姓名,性别) select 姓名,性别 from 选举表 ===== 第 13 页 ===== 练习5:数据从2个表中关联查询出来 Select 表1.字段名1, 表1.字段名2,…, 表2.字段名1, 表2.字段名2, … From 表1,表2 where 表1和表2的关联条件 如: select 学生表.学号, 学生表.姓名, 学生表.性别, 班级表.班级 from 学生表,班级表 where 学生表.班级代码=班级表.班级代码 执行下列语句,查看结果: select student.stuno,student.stuname,class.ClassName from student,class where student.ClassNo=class.ClassNo;