笔记-5:mysql数据更新

1.插入数据

1.1 插入完整的数据

# 语法格式:
    INSERT INTO tb_name(column_list) VALUES(value_list);
  • tb_name:指定要插入数据的表名。

  • column_list:指定要插入数据的字段。

  • value_list:指定每个字段对应插入的数据。

# 向表tb_student中插入一条新记录('2014210103','王玲','','1998-02-21','安徽','','CS1401')。
insert into tb_student values('2014210103','王玲','','1998-02-21','安徽','','CS1401');
# 向表tb_student中插入一条新记录('2013110102','赵婷婷','','1996-11-30','天津','','AC1301')
insert into tb_student(studentNo,studentName,sex,birthday,native,nation,classNo) values('2013110102','赵婷婷','','1996-11-30','天津','','AC1301');

1.2 指定字段插入数据记录

# 向数据库db_school的表tb_student中插入一条新记录,学号为"2014310103",姓名为"孙颖",性别为"男",民族为"傣",班号为"IS1401"。
insert into tb_student(studentNo,studentName,sex,nation,classNo) values("2014310103","孙颖","男","傣","IS1401");
  • 字段birthday和native没有插入数据,如果定义默认值,则自动插入默认值。

  • 如果没有默认值,但是允许为空值,则系统自动为该自动插入空值NULL。

1.3 同时插入多条数据记录

  INSERT语句可以同时向数据表中插入多条记录,插入时只需指定多个值列表。每个值列表之间用逗号隔开。

# 基本语法格式:
INSERT INTO tb_name(column_list) VALUES(value_list1),(value_list2),....
# 在表tb_student中插入三条新记录:学号为"2014310104",姓名为"陈卓卓",性别为"女",学号为"2014310105",姓名为"马丽",性别为"女",学号为"2014310106",姓名为"许红",性别为"男"。
insert into tb_student(studentNo,studentName,sex) value("2014310104","陈卓卓","女"),("2014310105","马丽","女"),("2014310106","许红","男");

返回结果:

  • Records:表示成功插入的记录数。

  • Duplicate:表示插入时被忽略的记录。

# 不指定插入字段列表,向数据库db_school的表tb_student中插入两条记录('2014310107','','','1997-10-16','吉林','朝鲜','IS1401'),('2014310108','','','1998-01-24','河北','','IS1401');
insert into tb_student values ('2014310107','','','1997-10-16','吉林','朝鲜','IS1401'),('2014310108','','','1998-01-24','河北','','IS1401');

1.4 插入查询结果

  INSERT语句用来给数据表插入记录时,不仅可以指定插入记录的值列表,还可以将select语句查询的结果插入到列表中。

# 语法格式:
    INSERT INTO tb_name1(column_list1)
    SELECT column_list2 from tb_name2 where (condition);
  • tb_name1:指定插入数据的表名。

  • tb_name2:指定要查询的数据来源表。

  • column_list1:指定待插入表中待插入数据的字段列表。

  • column_list2:指定数据来源表的查询字段列表。

  • condition:指定select语句的查询条件。

注:column_list2查询字段必须和column_list列表中的字段个数相同,且数据类型相匹配。

# 为表tb_student制作一个备份表tb_student_copy,两个表结构完全一致,现使用insert---select语句将表tb_student中的数据备份到表tb_student_copy中。
# 创建备份表:tb_student_copy
create table tb_student_copy(
studentNo char(10),
studentName varchar(20) not null,
sex char(2) not null,
birthday date,
native varchar(20),
nation varchar(10),
classNo char(6),
CONSTRAINT PK_student primary key (studentNo) 
);
# 插入数据:
insert into tb_student_copy (studentNo,studentName,sex,birthday,native,nation,classNo) select studentNo,studentName,sex,birthday,native,nation,classNo from tb_student;

1.5 使用REPLACE语句插入表数据

   若一个待插入的表中存在有primary key或UNIQUE约束,而待插入的数据行中包含有与待插入表的已有数据行中相同的primary key或UNIQUE列值,那么insert语句将无法插入此行。此时,可以使用replace语句来实现。使用replace语句可以在插入数据之前将表中与待插入的新记录相冲突的旧记录删除。从而保证新记录能够正常插入。

# 基本语法格式:
REPLACE INTO tb_name(column_list) VALUES(value_list);
# 当前表tb_student_copy中已经存在一条数据:('2013110101','张晓勇','','1997-12-11','山西','','AC1301'),其中该表中studentNo是主键,现向该表中再次插入一行数据:('2013110101','周旭','','1996-10-01','湖南','','AC1301')。
REPLACE into tb_student_copy(studentNo,studentName,sex,birthday,native,nation,classNo) values('2013110101','周旭','','1996-10-01','湖南','','AC1301');

2.修改数据

# 语法格式:
UPDATE tb_name
SET column1=value1,column2=value2....
[where <conditions>];
  • set:指定表中要修改的字段名及列值。

  • ' column1,column2....':指定修改的字段名称。

  • 'value1,value2...':指定字段修改后的值。

  • where:限制表中修改的行,如果不指定where,则修改表中所有的数据行。

2.1 修改特定数据记录

# 将表tb_student中学号为'2014210101'的学生姓名修改为'黄涛',籍贯修改为'湖北',民族修改为''update tb_student set studentName='黄涛',native='湖北',nation='' where studentNo=2014210101;

2.2 修改所有数据记录

# 成绩表tb_score中所有学生的成绩提高5%
update tb_score set score=score*1.05;

2.3 带子查询的修改

  在update语句中where子句中也可以嵌套子查询,用以构造修改的条件。如果待修改数据的表与设置修改条件的表不相同,需要用子查询来构造修改的条件。

# 将选修'程序设计'这门课程的学生成绩置0
update tb_score set score=0 where courseNo=(select courseNo from tb_course where courseName='程序设计');

3.删除数据

# 语法格式:
DELETE FROM tb_name [WHERE <conditions>];
  • tb_name:指定要删除数据的表名。

  • where:指定删除提交,如果不指定,delete语句将删除表中所有的记录。

3.1 删除特定数据

# 删除表tb_student中姓名为'许红'的学生信息。
delete from tb_student where studentName='许红';

3.2 带子查询的删除

# 将'程序设计'这门课程的所有选课记录删除
delete from tb_score where courseNo=(select courseNo from tb_course where courseName='程序设计');

3.3 删除所有数据

# 删除所有学生
delete from tb_student;
truncate tb_student_copy;

# truncate语句将直接删除原来的表并重新创建一个表,而不是逐行删除表中的记录。因此执行速度更快。

猜你喜欢

转载自www.cnblogs.com/Cyzhouke/p/11466367.html
今日推荐