首页 > 数据库 >SQL学习——数据操纵(DML)插入、修改、删除

SQL学习——数据操纵(DML)插入、修改、删除

时间:2022-08-24 10:11:50浏览次数:103  
标签:删除 表中 DML 插入 emp SQL WHERE id

  本章将介绍,SQL中如何修改数据(增,删,改)。

  当我们去添加、更新或者删除数据库中的数据时需要使用DML语句。DML依据的一个集合构成了一个被称为事务的逻辑单元。

1、插入(INSERT)

  插入新的一行到表中。

语法结构:

INSERT INTO table[(column1,column2,...)]
VALUES (value1,value2,....)

  如果tabel后面跟随列名则表示指定列来添加,否则会按列顺序添加。注意一次只能添加一行。如果采用指定列的方式来添加则注意被忽略的列不能有非空约束。

1.1、插入带空值的行

  刚才提到,如果我们插入时采用指定列添加,则被省略的字段会被自动插入为空值。第二种方式是在VALUES 子句中直接使用NULL关键字。

1.2、插入日期值

  插入的数值,必须要是DATE类型,可以参看这篇文章:SQL学习——单行函数中转换函数中的TO_DATE函数,可以把字符串转化为对应的DATE类型。或者可以使用sysdate保留字获取当前日期。

  当然也可以使用默认日期格式:‘01/3月/2019‘进行插入。

1.3、从另一个表中复制行插入

  这种方式会一下子插入多条记录

  • 用一个查询写INSERT语句
  • 不采用VALUES子句
  • 在查询中返回的列的数目要匹配INSERT子句中列的数目

示例:将employees表中的job_id中含有REP的工作岗位的员工数据,插入到new_emp中。

INSERT INTO new_emp(id,name,salary)
SELECT id, name, salary
FROM employees
WHERE job_id LIKE '%REP%'

  注意查询出来的结果列的顺序应该和待出入表中的列的顺序相同。

1.4、插入语句中使用默认值

  在创建列的时候,我们能给定一个默认值,当在插入时可以使用DEFAULT关键字在该位置上插入该默认值。

  如果在插入的时候缺省了某一列(指定列插入),如果缺省的那一列是有设定默认值的,那么将会把默认值插入到该列中,如果没有默认值则插入NULL。

2、更新(UPDATE)

  对表中某一行或某几行数据进行更新。

语法结构:

UPDATE table [别名]
SET  column1=value1[, column2=value2,...]
[WHERE condition]

  注意如果没有where子句将会对表的所有行进行更新。

2.1、使用查询来更新列(使用另一个表的值来更新)

  在SET中使用子查询语句这样就能实现,使用另一个表的数值来更新了。

示例:更新emp表中雇员165的薪水,使其薪水和雇员156的相同。

UPDATE emp e
SET  e.salary=(SELECT em.salary 
               FROM emp 
               WHERE id=156)
WHERE e.id=165

3、删除(DELETE)

  删除表中的某一行数据。

语法结构:

DELETE [FROM] table
[WHERE condition]

  如果不给WHERE语句则会删除整个表的数据(注意不是删除表,而是删除数据)

3.1、删除基于另一个表的行

  删除的时候,删除条件可以是基于另一个表的数据。

示例:删除emp表中薪水与IT_PROG岗位(在employees表中的字段)相同的薪水

DELETE emp e
WHERE e.salary IN (SELECT DISTINCT salary 
                   FROM employees
                   WHERE job_id='IT_PROG')

3.2、完整性约束错误

  这是一个删除行的时候常见的错误。如果我删除A表的某一行,但不巧A表的某个字段,刚好是B表的外键约束,此时就会报错:ORA-02292。此时我们应该先删除B表的对应的行,再删除A表的那一行。

 

标签:删除,表中,DML,插入,emp,SQL,WHERE,id
From: https://www.cnblogs.com/CircleWang/p/16616933.html

相关文章

  • Mysql 一主一从
    1.主从原理1.1主从介绍所谓mysql主从就是建立两个完全一样的数据库,其中一个为主要使用的数据库,另一个为次要的数据库,一般在企业中,存放比较重要的数据的数据库服务器......
  • pgsql截取指定字符的前半部分数据和后半部分数据
    --截取指定字符最后出现的前半部分selectreverse(substr(reverse('/C107341723B_145404/01/0_20220802_145505552.jpg'),position('/'inreverse('/C107341723B_145404/......
  • docker中的mysql中文乱码解决办法
    博主最近在做谷粒商城,因为要使用docker安装mysql,但是由于安装的时候没有指定mysql的数据库的utf8格式,导致插入的时候就出现了中文是问号的情况,到处百度终于解决,于是打......
  • springboot+mybatis-plus-join+mysql实现连表查询
    1.简介  Mybatis是目前比较主流的持久层框架,使用非常广泛。Mybatis-Plus是基于Mybatis增强工具包,越来越受到开发人员的喜爱。  在使用Mybatis-Plus开发时,简单的crud......
  • SQL注入
    SQL注入1.sql原理:网页进行输入程序时使用了sql语句访问数据库,因为未对输入的内容进行筛选操作,所以可以直接通过输入参数来对网页的数据库进行攻击。2.注入流程:以DVWA为......
  • ERROR 2006 (HY000): MySQL server has gone away
    sourcesql文件的时候,报错如下:ERROR2006(HY000):MySQLserverhasgoneaway 经查阅导致该error的原因很多,具体分析了我的问题是语句太长了,修改max_allowed_packet......
  • liunx 安装 mysql 8.0 ,centos 7
    下载地址:MySQL::DownloadMySQLCommunityServerhttps://dev.mysql.com/downloads/mysql/ 下载完整的打包程序,然后解压   解压命令:tar-xvfmysql-8.0.30-......
  • MySQL 5.7 vs 8.0版本的性能有什么区别
    1、新增持久化设置MySQL8.0新增SETPERSIST的命令,该命令的配置值保存到数据目录下的mysqld-auto.cnf文件中,待重启后,读取该文件,用其中的配置覆盖缺省的配置文件,补充了SE......
  • Flask 学习-14.Flask-SQLAlchemy ORM操作数据库增删改查
    前言SQLAlchemy采用简单的Python语言,提供高效和高性能的数据库访问,实现了完整的企业级持久模型。它提供了SQL工具包和ORM(对象关系映射)工具,类似于Django自带的ORM框架......
  • 【数据库】在公司开发过程中总结的SQL编写规范,参考开发手册
    〇、概述1、常用资料链接(1)阿里巴巴开发手册链接:https://pan.baidu.com/s/1OtOFuItDIP7nchfODGIZwg?pwd=htx0 提取码:htx0 2、包含内容 一、开发手册内容(一)建表1......