在MySQL数据库中对数据的基础操作(CRUD)包括:增,删,改,查等。由于查的内容太多等学完了单独写一篇文章来和大家交流,本文中只是用了几个简单的查询语句,用来验证增,删,改操作是否起作用。下面简单的介绍一下自己对增,删,改内容的简单理解。
准备工作
进入MySQL,创建school 数据库,并选择。
create database school;use school;
# 创建一个学生表create table tab_student( s_id varchar(20) primary key, s_name varchar(10) not null, s_sex varchar(6) default '男', s_age smallint, s_dept varchar(10));
# 创建一个课程表create table tab_course( c_id int primary key auto_increment, c_name varchar(40) not null, c_credit smallint);
# 创建一个学生选课表create table tab_stu_cou( s_id varchar(20), c_id int, sc_grade double, constraint pk_s_c primary key (s_id, c_id), constraint fk_tab_student foreign key (s_id) references tab_student (s_id), constraint fk_tab_course foreign key (c_id) references tab_course (c_id));
school 数据库,并在数据库中创建了三张表,如果你对数据库中表的操作不是很了解,可以看一下我的上一篇文章。下面正式开始学习对表中数据的增,删,改。
增加数据
MySQL实现增加数据记录的语法是:
# 添加数据insertinto table_name (列名1, 列名2,列名3,...,列名n)values (值1,值2,值3,...,值n);
其中table_name 表示你要在那个表中添加数据记录,后面括号中的列名是和表中的属性名一样的,关键字values 后面的括号中的值,才是真正要添加的数据,当然括号中 值的顺序和上面括号中列名的顺是一一对应的,添加值的数据类型与列的数据类型也是对应的。下面在tab_student 表中添加一条数据,代码如下:
insertinto tab_student (s_id,s_name,s_sex,s_age,s_dept)values ('201913128', '张三', '男', 20,'MA');
select * from table_name语句查看里面的数据。也可以省略列名参数,它默认是以表中属性列的顺序添加完整数据记录。也可以写出部分列名,添加数据记录的一部分。下面演示在 tab_course 表中添加数据记录,代码如下:
# 在tab_course 表中插入一条完整数据 ,省略版insertinto tab_coursevalues (1,'操作系统',5);#在tab_course表中插入部分数据insertinto tab_course (c_name)values ('计算机网络技术');
auto_increment 或 default 约束时,将会取空值(NULL),但必须注意的是,在表创建时如果对该列添加了not null约束,取空值时会报错。除了一次添加一条数据记录外,还可以一次添加多条数据记录。只需要在 values 关键字后面添加 多条数据记录就可以,每条数据记录之间使用逗号,分隔开。下面是在表中一次添加多条数据。
# 在课程表中添加多条数据insertinto tab_course (c_name,c_credit)values ('数学',5), ('数据库',6), ('信息系统',4), ('数据结构',5);# 在学生表中添加多条数据insertinto tab_studentvalues ('201913121','李勇','男',20,'CS'), ('201913122','李晨','男',19,'CS'), ('201913123','刘晨','女',20,'MA'), ('201913125','王敏','女',18,'MA'), ('201913126','张丽','女',21,'IS');# 成绩表中添加多条数据insertinto tab_stu_couvalues ('201913121',1,91), ('201913121',3,80), ('201913128',1,98), ('201913125',4,73), ('201913123',2,82);
修改数据
修改操作又称为更新操作,其功能是更新表中已经存在数据记录中的值。其语法如下:
update table_nameset 列名1 = 表达式, 列名2 = 表达式, ... 列名n = 表达式where 条件;
set子句给出 表达式的值用于取代相应的属性列值。where子句设置的 条件用于控制在表中修改操作的范围,省略where子句,则表示修改表中的所有数据。下面把 tab_course表中的空值(NULL)修改为2。代码如下:
update tab_courseset c_credit = 2where c_id = 2;
tab_course表中的所有科目的学分加一,代码如下:
update tab_courseset c_credit = c_credit + 1;
删除数据
其功能是删除表中已经存在的数据记录,语法如下:
deletefrom table_namewhere 条件;
参数table_name 表示要删除表的名字。同样where子句用于限制在表中删除数据记录的范围,省略 where子句,则表示删除表中的所有数据。在tab_course 表中删除一条数据记录,代码如下:
deletefrom tab_coursewhere c_id = 6;
增、删、改 和 查询组合
子查询是嵌套在select语句中用以构造父查询的条件,同样子查询也可以和增、删、改进行组合。
子查询和增加数据组合
子查询可以嵌套在insert语句中 把查询的结果添加到表中,语法如下:
insertinto table_name (列名1,列名2,...,列名n)子查询;
在使用上述语法时,要保证子查询结果中列的个数和数据类型与插入表中的属性列和类型一一对应。下面我们求每一个系中学生的平均年龄,并把结果存入数据库中,代码如下:
# 创建一个储存结果的表create table tab_dept_age(s_dept varchar(10),avg_age smallint);# 把查询结果 添加到 tab_dept_age 表中insertinto tab_dept_ageselect s_dept,avg(s_age)from tab_studentgroup by s_dept;
子查询和修改数据组合
子查询也可以嵌套在update语句中,用以构造修改的条件。如在 tab_stu_cou表中,把所有男同学的成绩都修改为0分。代码如下:
update tab_stu_couset sc_grade = 0where s_id in ( select s_id from tab_student where s_sex = '男' );
子查询与删除数据组合
和修改数据类似,子查询嵌套在delete语句中,用以构造执行删除操作的条件。在 tab_stu_cou表中删除计算机科学系(CS)中学生的成绩记录,代码如下:
delete from tab_stu_couwhere s_id in ( select s_id from tab_student where s_dept = 'CS');
小结
今天学习了,对表中数据记录的增加,修改,删除操作。值得注意的是我们在更新表中数据记录的时,要保证该数据与其他表中记录没有建立联系,不然在更新一些数据时会报错。比如上面我们在创建表时添加了主外键约束,课程表和学生表中的记录在成绩表中都有引用,如果不在成绩表中解除引用,课程表或学生表的部分数据记录是无法进行更新的。下面以删除为例进行理解,代码如下:
# 删除 tab_student 表中的一条记录delete from tab_studentwhere s_id = '201913128';# 在 tab_stu_cou 表中 删除 '201913128'这条记录 ,在执行上面删除就可以了delete from tab_stu_couwhere s_id = '201913128';