sql语法:浅谈DML

简介: sql语法:浅谈DML

Mysql版本:8.0.26

可视化客户端:sql yog

提示:以下是本篇文章正文内容,下面案例可供参考

一、DML是什么?

DML,英文全称Data Manipulation Language,意为数据操纵语言,用于数据库操作,对数据库其中的对象和数据运行访问工作的编程语句,以INSERT、UPDATE、DELETE三种指令为核心,分别代表插入(意指新增或创建)、更新(修改)与删除(销毁)。


二、INSERT(添加 / 插入)

测试数据表准备如下:

CREATE TABLE `stu` (
  `sid` int DEFAULT NULL,
  `sname` varchar(20) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `score` int DEFAULT NULL,
  `gender` enum('男','女') DEFAULT NULL,
  `weight` double(4,1) DEFAULT NULL,
  `tel` char(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3

2.1 添加一条记录到某个表中

👉语法:

①INSERT INTO 表名称 VALUES(值列表);

②INSERT INTO 表名称 VALUE(值列表);

👉注意:

值列表中的值的顺序、类型、个数必须与(字段列表)一一对应

👉小tips:

value和values有何区别?

  • value在底层只能逐行逐行的添加数据,即一条一条的添加,不能使用批处理命令以提高效率
  • values可以在底层开启批处理功能,可同时添加多条数据,大大提高效率

案例:给表stu添加一条记录,为(1,‘张三’,‘1995-2-5’,89,‘男’,86.5,‘13478956896’)

代码演示如下:

INSERT INTO stu VALUES(1,'张三','1995-2-5',89,'男',86.5,'13478956896');
INSERT INTO stu VALUE(2,'张三','1995-2-5',89,'男',86.5,'13478956896');


2.2 添加语句,可指定部分字段赋值

👉语法:

INSERT INTO 表名称(字段列表) VALUES(值列表)

案例:为stu表添加一行记录,分别为字段sid,sname,tel赋值,赋值内容随意

代码演示如下:

INSERT INTO stu(sid,sname,tel) VALUES(3,'李四','13478956896') ;

2.3 添加多条记录到某个表中

👉语法:

INSERT INTO 表名称 VALUES(值列表),(值列表),(值列表) …(值列表);

INSERT INTO 表名称(字段列表) VALUES(值列表),(值列表),(值列表) …(值列表);

👉注意: 值列表中的值的顺序、类型、个数必须与(字段列表)一一对应

案例:给表stu一次性添加多行记录

代码演示如下;

INSERT INTO stu(sid,sname,tel) VALUES
            (4,'王五' ,'13478956811'),
              (5,'赵六','13478953811'),
              (6,'老王','13478956822') ;


三、UPDATE(修改)

3.1 修改所有行

👉语法:

UPDATE 表名称 SET 字段名 = 值,字段名=值,字段名 = 值 ;

案例:将表stu的weight字段下的值全设为93

修改之前:

代码修改如下:

UPDATE stu SET weight=93;

3.2 修改部分行

👉语法:

UPDATE 表名称 SET 字段名 = 值,字段名=值,字段名 = 值 WHERE 条件;

案例:修改李四和王五的体重为86

代码演示如下:

UPDATE stu SET weight = 86 WHERE sname IN ('李四','王五');


四、DROP(删除)

4.1 删除部分行

👉语法:

DELETE EROM 表名称 WHERE 条件;

案例:删除stu表中姓名为“老王”的学生记录

代码演示如下:

DELETE FROM stu WHERE sname='老王';#这只是删除符合条件的那一行记录(数据)

4.2 删除某一列的数据

👉语法:

UPDATE 表名 SET 字段名=NULL;

案例:删除weight列下的所有数据

代码演示如下:

UPDATE stu SET weight=NULL;

4.3 删除所有行,即删除所有数据

👉语法:

DELETE EROM 表名称;

案例:删除stu表的所有数据

代码修改如下:

DELETE FROM stu;


五、DML中嵌套子查询

👉准备测试数据如下:

CREATE TABLE `t_employee` (
  `eid` int NOT NULL AUTO_INCREMENT COMMENT '员工编号',
  `ename` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '员工姓名',
  `salary` double NOT NULL COMMENT '薪资',
  `commission_pct` decimal(3,2) DEFAULT NULL COMMENT '奖金比例',
  `birthday` date NOT NULL COMMENT '出生日期',
  `gender` enum('男','女') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '男' COMMENT '性别',
  `tel` char(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '手机号码',
  `email` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '邮箱',
  `address` varchar(150) DEFAULT NULL COMMENT '地址',
  `work_place` set('北京','深圳','上海','武汉') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '北京' COMMENT '工作地点',
  `hiredate` date NOT NULL COMMENT '入职日期',
  `job_id` int DEFAULT NULL COMMENT '职位编号',
  `mid` int DEFAULT NULL COMMENT '领导编号',
  `did` int DEFAULT NULL COMMENT '部门编号',
  PRIMARY KEY (`eid`),
  KEY `job_id` (`job_id`),
  KEY `did` (`did`),
  KEY `mid` (`mid`),
  CONSTRAINT `t_employee_ibfk_1` FOREIGN KEY (`job_id`) REFERENCES `t_job` (`jid`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `t_employee_ibfk_2` FOREIGN KEY (`did`) REFERENCES `t_department` (`did`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `t_employee_ibfk_3` FOREIGN KEY (`mid`) REFERENCES `t_employee` (`eid`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `t_employee_chk_1` CHECK ((`salary` > 0)),
  CONSTRAINT `t_employee_chk_2` CHECK ((`hiredate` > `birthday`))
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

5.1 UPDATE中嵌套子查询

案例:修改0106db数据库中t employee表中的数据,修改“何进”员工的薪资和“孙洪亮”的薪资一样

代码演示如下:

UPDATE t_employee 
SET salary=(SELECT salary FROM t_employee WHERE ename='孙洪亮')
WHERE ename='何进';

👉报错代码分析:

错误代码:1093
You can’t specify target table t_employee’ for update in FROM clause t_employee现在在from子句中出现了,说明它正在被“查询”,就不能同时被修改。

👉解决措施:

把子查询(SELECT salary EROM t employee WHERE ename =孙洪亮’的结果放到一个内存中"临时表,这样做的目的是可以解开t employee的锁,然后修改t~employee表就不会因为锁的问题被拒绝。

代码修改如下:

UPDATE t_employee 
SET salary=(SELECT salary FROM
(SELECT salary FROM t_employee WHERE ename='孙洪亮') AS temp)
WHERE ename='何进'

5.2 DELETE中嵌套子查询

案例:删除和"何进”同一个部门的员工

代码演示如下:

DELETE FROM t_employee 
WHERE did=(SELECT did FROM 
(SELECT did FROM t_employee WHERE ename='何进') temp)


附:复制表结构与部分数据

① 复制表结构

👉语法:

CREATE TABLE 要复制的表名 LIKE 被复制的表名;

案例:创建一个新表emp,让它和t_employee表有着相同的表结构

代码演示如下:

CREATE TABLE emp LIKE t_employee;

② 复制部分数据

👉语法:

INSERT INTO 要复制的表名 被复制的表中某些行

案例:将t_employee表中eid为4的部分员工信息复制到emp 表中

代码演示如下:

INSERT INTO emp (SELECT * FROM t_employee WHERE eid = 4);

相关文章
|
3月前
|
SQL 关系型数据库 MySQL
MySQL数据库基础第一篇(SQL通用语法与分类)
MySQL数据库基础第一篇(SQL通用语法与分类)
|
3月前
|
SQL PHP
thinkphp之进阶sql语法,持续更新
thinkphp之进阶sql语法,持续更新
25 0
|
1月前
|
SQL 关系型数据库 MySQL
INSERT INTO t_a.tableName SELECT * FROM t_b.tableName 如何通过定义一个list对象,包含多个tableName,循环执行前面的sql,用MySQL的语法写
【8月更文挑战第7天】INSERT INTO t_a.tableName SELECT * FROM t_b.tableName 如何通过定义一个list对象,包含多个tableName,循环执行前面的sql,用MySQL的语法写
26 5
|
2月前
|
SQL 关系型数据库 数据库
sql语法
【7月更文挑战第30天】sql语法
39 12
|
28天前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
110 0
|
1月前
|
SQL 关系型数据库 数据库
|
2月前
|
SQL Java 数据库连接
mybatis动态SQL常用语法总结
MyBatis 使用 OGNL 表达式语言处理动态SQL,如 `if` 标签进行条件判断,`choose`、`when`、`otherwise` 实现多条件选择,`where`、`set` 管理SQL关键字,`trim` 提供通用修剪功能,`foreach` 遍历集合数据。`sql` 和 `include` 用于代码重用,`selectKey` 处理插入后的返回值。参数传递支持匿名、具名、列表、Map、Java Bean和JSON方式。注意SQL转义及使用合适的jdbcType映射Java类型。
70 7
|
2月前
|
SQL 关系型数据库 分布式数据库
PolarDB产品使用问题之遇到SQL语法错误,该如何排查
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
2月前
|
SQL 数据库 索引
SQL SELECT语句的语法与查询优化技巧
SQL SELECT语句的语法与查询优化技巧
|
3月前
|
SQL 数据库
零基础学习数据库SQL语句之操作表中数据的DML语句
零基础学习数据库SQL语句之操作表中数据的DML语句
43 0
零基础学习数据库SQL语句之操作表中数据的DML语句