文章目录

  • 【Mysql】Mysql的DML语法--数据更新
  • 前言
  • 一、数据更新标准定义
  • 二、数据更新的操作
  • 1.插入数据(`INSERT`)
  • 1.1插入单个元组
  • 1.2插入子查询结果
  • 2.数据修改的操作(`UPDATE`)
  • 2.1修改某一个元组的值
  • 2.2修改多个元组的值
  • 2.3带子查询的修改语句
  • 3.数据删除的操作(`DELETE`)
  • 3.1删除某一个元组的值
  • 3.2删除多个元组的值
  • 3.3带子查询的删除语句
  • 总结


【Mysql】Mysql的DML语法–数据更新

前言

前期跟大家讲的是Mysql(数据操纵)DML中的SELECT(查),今天给大家带来的是数据更新。什么是数据更新?顾名思义,就是对数据库中的数据进行更新。数据更新包含- -INSERT(增)、UPDATE(改)和DELETE(删)。


一、数据更新标准定义

        数据表是数据库的重要对象,是存储数据的基本单元,表结构创建完成后就涉及向表中插入新的数据,以及对已有数据进行修改与删除,这就是数据更新,数据更新可以使用“对象资源管理器”和T-SQL语句两种方式实现。也就是说,数据更新是以新数据项或记录、替换数据文件或数据库中与之相对应的旧数据项或记录的过程,通过删除、修改、再插入的操作来实现。


二、数据更新的操作

1.插入数据(INSERT

SQL数据插入一般有两种格式,一种是单行数据插入,一种是子查询结果插入。关键词是INSERT。


1.1插入单个元组

插入单个元祖
两种插入数据方式:
插入单个元组,语法:

Insert
Into <表名> [(<属性列1>[,<属性列2 >…)]
Values (<常量1> [,<常量2>]    …

其中:表名为要插入数据的目录表;在新记录中,属性列1的值是常量1,属性列2的值是常量2,…,属性列n的值是常量n。INTO子句中没有出现的目录表属性列,在新数据中,将默认为空值。

注意:当VALUES子句中的常量结构(包括顺序和数据类型)和目录表的结构一样的时候,可以省略INTO子句中的列名。

into子句规范:

指定要插入数据的表名及属性列.
属性列的顺序可与表定义中的顺序不一致.
没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致.
指定部分属性列:在其余属性列上取空值(not null的除外).

Values子句规范:

提供的值必须与Into子句匹配,包括(值的个数、值的类型).

例:将一个新学生记录学号:95020; 姓名:陈冬; 性别:男; 所在系:IS ; 年龄: 18岁
插入到Student表中。此时可以省略INTO子句中的列名。

Insert
Into Student
Values ('95020', '陈冬', '男',18 ,'IS');

运行Sql命令前表中数据:

mysql更新指定行数据 mysql 更新数据语法_数据库


运行后:

mysql更新指定行数据 mysql 更新数据语法_数据库_02


数据插入成功。

例如:将一个新学生记录学号:95020; 姓名:陈冬;插入到Student表中。此时不可以省略INTO子句中的列名。

Insert(Sno,Sname)
Into Student
Values ('95020', '陈冬');

1.2插入子查询结果

Into子句(与插入单条元组类似)规范:

指定要插入数据的表名及属性列.
属性列的顺序可与表定义中的顺序不一致.
没有指定属性列:要插入的是一条完整的元组.
指定部分属性列:插入的元组在其余属性列上取空值.

子查询规范:

Select子句目标列必须与Into子句匹配.
值的个数.
值的类型.

插入子查询结果,语法:

Insert 
Into <表名>  [(<属性列1> [,<属性列2>…  )]
子查询;

例:对每一个系,求学生的平均年龄,并把结果存入数据库。
第一步,建表:

Create  Table  Deptage
(Sdept  Char(15),           /* 系名*/
Avgage SmallInt);  /*学生平均年龄*/

第二步,插入:

Create  Table  Deptage
(Sdept  Char(15),           /* 系名*/
Avgage SmallInt);  /*学生平均年龄*/

执行后结果:

mysql更新指定行数据 mysql 更新数据语法_数据库_03


mysql更新指定行数据 mysql 更新数据语法_元组_04


如果插入多条数据,运用到集合查询的union 。例如:

insert into student   
select '95031', '陈冬', '男',18 ,'IS'   
union  
select '95032', '陈春', '女',19 ,'CS'
union
select '95033', '陈夏', '女',20 ,'CS'

2.数据修改的操作(UPDATE

数据修改是对已有数据的修改,修改指定表中满足Where子句条件的元组。
数据修改的关键词是UPDATE

一般语句格式为:

Update  <表名>
Set  <列名>=<表达式>[,<列名>=<表达式>]…
[Where <条件>];

Set子句约束:

指定修改方式.
要修改的列.
修改后取值.

Where子句约束:

指定要修改的元组.
缺省表示要修改表中的所有元组.

2.1修改某一个元组的值

修改只涉及到一个元组。

例: 将学生1的年龄改为22岁。

Update  Student
Set Sage=22
Where  Sno=1;

结果:

mysql更新指定行数据 mysql 更新数据语法_数据库_05


2.2修改多个元组的值

修改涉及到多个元组。

例:将所有学生的年龄增加1岁。

Update Student
Set Sage= Sage+1;

运行结果:

mysql更新指定行数据 mysql 更新数据语法_database_06


2.3带子查询的修改语句

修改Where条件涉及到子查询。

例:将CSDN系全体学生的成绩置零(Sno=1、2、3、4全为CSDN系学生)

Update SC
Set  Grade=0
Where  sno in
(Select sno
From  Student
Where  sdept='CSDN')

运行结果:

mysql更新指定行数据 mysql 更新数据语法_大数据_07


mysql更新指定行数据 mysql 更新数据语法_大数据_08

注:DBMS在执行修改语句时会检查修改操作,是否破坏表上已定义的完整性规则、实体完整性、主码不允许修改、用户定义的完整性、 NOT NULL约束、 UNIQUE约束和值域约束。


3.数据删除的操作(DELETE

数据删除就是对已有数据进行删除,删除指定表中满足Where子句条件的元组。数据删除的关键词是DELETE

一般语法为:

DELETE
FROM表名
WHERE 删除条件

其中,DELETE子句删除表中的数据,并不影响表的结构。


3.1删除某一个元组的值

删除只涉及到一个元组。

例:删除学号为95020的学生记录。

Delete
From Student
Where Sno=95020;

运行结果:

mysql更新指定行数据 mysql 更新数据语法_database_09


3.2删除多个元组的值

删除只涉及到多个元组。

例: 删除102号课程的所有选课记录

Delete
From SC
Where Cno=102;

运行结果:

mysql更新指定行数据 mysql 更新数据语法_元组_10


3.3带子查询的删除语句

删除Where语句涉及到子查询。

例:删除CSDN系所有学生的选课记录

Delete
From SC
Where  sno in
(Select Sno
From Student
Where sdept='CSDN')

运行结果:

mysql更新指定行数据 mysql 更新数据语法_元组_11

注:DBMS在执行删除语句时会检查所删除元组是否破坏表上已定义的完整性规则、参照完整性(不允许删除和级联删除)。


总结

数据更新(INSERT(增)、UPDATE(改)和DELETE(删))与数据查询(SELECT(查))构成Mysql的DML语法。DBMS在执行插入、删除、更新语句时必须保证数据库一致性。掌握Mysql的DML语法,基本上把数据库的一般都学习完啦。为之后的大数据学习打下坚实的基础!!!


注:本文章仅用于参考学习,如有错误,请大家指正。