DML语言的使用
第1关:插入数据
任务描述
本关任务:为教学数据库中表插入规定的数据。
相关知识
为了完成本关任务,你需要掌握:如何为表一次性插入一条记录。
为表的所有字段插入数据
向表中插入数据最简单的方法就是使用 INSERT
语句。 INSERT
语句需要你声明要插入内容的表 (table)
名和内容 (values)
。
语法规则:INSERT INTO 表名 (字段名) VALUES (内容);
为表的指定字段插入数据
有的时候,我们并不想往某个字段内插入完完整整的值,或者说,有的时候我们并没有完整的数据可以整整齐齐插入某个字段。这时候就需要我们只为指定好的字段插入数据了,其他的我们都不用管。换句话说,就是: 为表的指定字段插入数据,就是在 INSERT
中只向部分插入值,而其他字段的值为表定义时的默认值。
编程要求
根据提示,在右侧编辑器 Begin-End
处补充代码:
在 student 表中插入一条数据
('11111','马明','计算机','01','女','2000/01/02',null)
测试说明
编写代码后,点击测评即可。
代码如下:
insert into student values ('11111','马明','计算机','01','女','2000/01/02',null);
第2关:更新数据1
任务描述
本关任务:将 student 表中所有学生的总学分加2,空值记录也参加计算。
相关知识
为了完成本关任务,你需要掌握:如何使用 update
来修改已有的数据。
更新表中指定的内容
通过上一关的学习,我们已经掌握了 INSERT
操作!同样,UPDATE
操作也很简单,只要记住 UPDATE
语句三要素就能轻松掌握,它们分别是:
-
需要更新的
表(table)名
; -
需要更新的
字段(column)名
和它的新内容(value)
; -
决定更新
哪一条内容(value)
的过滤条件
。
语法规则为: UPDATE 表名 SET 字段名1 = 内容1, 字段名2 = 内容2, 字段名3 = 内容3 WHERE 过滤条件; 。 |
编程要求
根据提示,在右侧编辑器 Begin-End
处补充代码:
- 将 student 表中所有学生的总学分加2,空值记录也参加计算。
测试说明
编写代码后,点击测评即可。
代码如下:update student set totalcredit=totalcredit+2;
第3关:更新数据2
任务描述
本关任务:将 student 表中马小燕的出生日期修改为’2000-01-22’。
相关知识
见上一关
编程要求
根据提示,在右侧编辑器补充代码,将 student 表中马小燕的出生日期修改为’2000-01-22’。
测试说明
编写代码后,点击测评即可。
代码如下:
update student set birthday='2000-01-22'
where sno='96001';
第4关:删除数据1
任务描述
本关任务:删除student表中的数据
相关知识
为了完成本关任务,你需要掌握:如何删除指定行的数据。
删除表中的指定行
从数据表中删除数据内容需要使用 DELETE
语句,它需要 WHERE
语句来配合它来指定我们究竟应该删除哪些数据内容。
语法规则为: DELETE FROM 表名 WHERE 条件语句; 。 |
我们可以指定删除某一行的数据内容,当然,我们还可以指定删除很多行的数据内容,区别就在于条件语句。那么在接下来的例子里,我们来看看很多行内容是怎么删除的。
删除表中的所有行
删除表中的所有行就更简单了。如果需要删除表中所有的行,只需要省略 WHERE
语句即可。
语法规则为: DELETE FROM 表名; 。 |
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码:
- 删除 student 表中学号为'11111'的记录。
测试说明
编写代码后,点击测评即可。
代码如下:delete from student where sno='11111';
第5关:创建表-使用子查询
任务描述
本关任务:利用 student 表创建表 s1,s1 的结构与内容与 student 表完全相同。
相关知识
为了完成本关任务,你需要掌握:使用 select 查询结果创建新表
Create tabale as select的三种方式
示例如下: 创建一个表结构与 tabale2一模一样的表,只复制结构不复制数据;
create table table1 as select * from table2 where 1=2;
创建一个表结构与 table2一模一样的表,复制结构同时也复制数据;
create table table1 as select * from table2 ;
创建一个表结构与 table2一模一样的表,复制结构同时也复制数据;
create table table1(columns1,columns2) as
select columns1,columns2 from table2;
编程要求
利用 student 表创建表 s1,s1 的结构与内容与 student 表完全相同。
代码如下: create view s1 as select * from student;
第6关:删除数据2
任务描述
本关任务:删除学生表 s1 中计算机系学生信息。
相关知识
见第4关
编程要求
删除学生表 s1 中计算机系学生信息。
测试说明
编写代码后,点击测评即可。
代码如下:
delete
from s1
where sdept='计算机';
第7关:删除数据表
任务描述
本关任务:删除 s1 表。
相关知识
drop table <表名>
编程要求
删除 s1 表。
测试说明
编写代码后,点击测评即可。
代码如下: drop table s1;
DDL语言的使用
第1关:创建数据库
任务描述
本关任务:创建一个名为 teachingdb 的教学数据库。
相关知识
create database <数据库名>
编程要求
在右侧窗口编写 SQL,并创建一个名为 teachingdb 的教学数据库。
连接数据库的用户名为:root
,密码为:123123
。
请注意:数据库名区分大小写。
teachingdb 的教学数据库共有四张表,所有实验项目都在此基础上完成,参考建表语句如下: -- 创建学生表的SQL; CREATE TABLE student( sno CHAR(5) PRIMARY KEY, sname VARCHAR(20) NOT NULL, sdept VARCHAR(20) NOT NULL, sclass CHAR(2) NOT NULL, ssex CHAR(1) , birthday DATE, totalcredit DECIMAL(4,1) );
-- 创建课程表的SQL; CREATE TABLE course( cno CHAR(3) PRIMARY KEY, cname VARCHAR(50), ctime DECIMAL(3,0), credit DECIMAL(3,1) );
-- 创建教师表的SQL; CREATE TABLE teach( tno CHAR(6) PRIMARY KEY, tname VARCHAR(20), tsex CHAR(1), tdept VARCHAR(20) );
-- 创建成绩表的SQL; CREATE TABLE score ( sno CHAR(5), cno CHAR(3), tno CHAR(6), grade DECIMAL(5,1), PRIMARY KEY(sno,cno,tno), CONSTRAINT fk_sno FOREIGN KEY(sno) REFERENCES student(sno), CONSTRAINT fk_cno FOREIGN KEY(cno) REFERENCES course(cno), CONSTRAINT fk_tno FOREIGN KEY(tno) REFERENCES teach(tno) );
代码如下: create database teachingdb;
第2关: 创建数据表
任务描述
本关任务:在 teachingdb 中创建学生表的 student;
相关知识
创建表的规则:
CREATE TABLE 表名
(
字段名 数据类型 约束,
字段名 数据类型 约束,
.....
)
添加主键约束
有两种方式可以添加主键约束: 1.在定义列的同时指定主键; 2.在定义完字段之后再指定主键。
编程要求
在右侧窗口中操作,teachingdb;表结构分别如下:
--学生情况表 student
字段名称 | 数据类型 | 约束 |
---|---|---|
sno | char(5) | PRIMARY KEY |
sname | varchar(20) | NOT NULL |
sdept | varchar(20) | NOT NULL |
sclass | char(2) | NOT NULL |
ssex | char(1) | |
birthday | DATE | |
totalcredit | decimal(4,1) |
测试说明
编写代码后,点击测评即可。
代码如下:
create table student
(
sno char(5) PRIMARY KEY,
sname varchar(20) NOT NULL,
sdept varchar(20) NOT NULL,
sclass char(2) NOT NULL,
ssex char(1),
birthday DATE,
totalcredit decimal(4,1)
);
第3关:添加字段
任务描述
本关任务: 在 student 表中增加籍贯字段:nativeplace varchar(20)。
相关知识
为了完成本关任务,你需要掌握: 1.如何在指定位置添加新的字段, 2.如何删除指定的字段。
添加字段
因为甲方的业务需求是不停变化的,所以在数据库操作中,添加字段可是常有的事。一个完整的字段包括:字段名
、数据类型
和完整性约束
。
语法规则为: ALTER TABLE 表名 ADD 新字段名 数据类型 [约束条件] [FIRST|AFTER] 已存在字段名; 。 |
以下是在 MySQL
中常用的约束。
NOT NULL
约束:确保某列不能有 NULL
值。
DEFAULT
约束:当某列没有指定值时,为该列提供默认值。
UNIQUE
约束:确保某列中的所有值是不同的。
PRIMARY Key
约束:唯一标识数据库表中的各行/记录。
CHECK
约束:CHECK
约束确保某列中的所有值满足一定条件。
在表的最后一列添加字段
只要不做 [FIRST|AFTER]
的位置说明,在添加字段时 MySQL
会默认把新字段加入到表的最后一列。
删除字段
有添加的需求就会有删除的需求。删除一个字段就是将数据表中的某个字段从表中移除。
编程要求
根据提示,在右侧编辑器补充代码:
在 student 表中增加籍贯字段:nativeplace varchar(20)。
测试说明
编写代码后,点击测评即可。
代码如下: alter table student add nativeplace varchar(20);
第4关:删除字段
任务描述
本关任务:删除 student 表中籍贯字段。
相关知识
见上一关
编程要求
根据提示,在右侧编辑器补充代码,删除 student 表中籍贯字段。
测试说明
开始你的任务吧,祝你成功!
代码如下:alter table student drop column nativeplace;
第5关:修改字段
任务描述
本关任务:将 student 表中的 ssex 字段定义改为 varchar(3) 。
相关知识
为了完成本关任务,你需要掌握:1.如何修改字段名;2.如何修改字段的数据类型。
修改字段名
有时,在我们建好一张表后会突然发现,哎呀!字段名貌似写错了!怎么办?要删了表再重新建一个新表吗?还是要删了这个字段再新建一个新的字段? 都不用,MySQL
中修改字段名称也有专门的语句,接近于自然语言,很好记忆。
语法规则为: ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型; 。 |
修改字段数据类型
随着存储的数据越来越多,数据库新人可能会发现,哎呀,当初预留的数据类型已经不能满足要求了,或者当初预留的字符太少了,怎么办?怎么修改?规则来了。
语法规则为: ALTER TABLE 表名 MODIFY 字段名 数据类型; 。 |
编程要求
根据提示,在右侧编辑器补充代码:
将 student 表中的 ssex 字段定义改为 varchar(3) 。
测试说明
编写代码后,点击测评即可。
代码如下: alter table student modify ssex varchar(3);
第6关:添加唯一性约束
任务描述
本关任务:在 course 表中 cname 上添加唯一性约束 uk_cno。
相关知识
为了完成本关任务,你需要掌握: 1.什么是唯一性约束; 2.如何在修改表时添加唯一性约束。
唯一性约束定义
-
唯一约束(
Unique Key
)是指所有记录中字段的值不能重复出现。 -
唯一约束与主键约束相似的是它们都可以确保列的唯一性。
-
唯一约束与主键的区别: 唯一约束在一个表中可有多个,并且设置唯一约束的列允许有空值,但是只能有一个空值。 而主键约束在一个表中只能有一个,且不允许有空值。
添加唯一性约束
语法规则为:ALTER TABLE <数据表名> ADD CONSTRAINT <唯一约束名> UNIQUE(<列名>) |
编程要求
根据提示,在右侧编辑器补充代码,在 course 表中 cname 上添加唯一性约束 uk_cno。
测试说明
编写代码后,点击测评即可。
代码如下:alter table course add constraint uk_cno unique (cname);