数据的增加、修改、删除(四)

本文详细介绍了MySQL中对数据进行添加、修改和删除的基本语法,包括INSERT的一条或多条记录插入,INSERT子查询,UPDATE语句的使用,UPDATE的表连接,以及DELETE语句的执行流程和表连接操作。此外,还提到了IGNORE关键字和TRUNCATE命令在数据删除中的应用。
摘要由CSDN通过智能技术生成

一、数据添加

1.1 INSERT语法

INSERT语句可以向数据表写入记录,可以是一条记录,也可以是多条记录。

语法:

# 添加一条记录
INSERT INTO 表名 (字段1,字段2...VALUES(1, 值2...);
# 添加多条记录
INSERT INTO 表名 (字段1,字段2...VALUES(1, 值2...), (1, 值2...), (1, 值2...);

1.2 INSERT方言语法

Mysql数据库的语法

语法:

INSERT INTO 表名 SET 字段1=1, 字段2=2, ...;
# INTO还可以省略不写

例子: 插入一条员工记录

INSERT INTO t_emp
SET empno=8002, ename="JACK", job="SALESMAN", mgr=8000, hiredate="1999-11-09", sal=2300, comm=NULL, deptno=50;

1.3 INSERT子查询

values中可以写子查询,只能写单行子查询且SELECT子句中的参数只能有一个,单行单列的子查询才可以

例子: 向技术部添加一条员工记录

INSERT INTO t_emp
(empno, ename, job, mgr, hiredate, sal, comm, deptno)
VALUES(8001, "刘娜", "SALESMAN", 8000, "1999-01-01", 2000, NULL, 
(SELECT deptno FROM t_dept WHERE dename="技术部"));

1.4 IGNORE关键字

当插入多条记录的时候,如果其中一条记录在表中已存在(主键冲突或唯一性冲突)就会导致所有的记录都插入失败。IGNORE关键字会让INSERT只插入数据库不存在的记录。

语法:

INSERT IGNORE INTO 表名....; 

二、数据修改

2.1 UPDATE语法

UPDATE语句用于修改表的记录

语法:

UPDATE [IGNORE] 表名
SET 字段1=1, 字段2=2,...
[WHERE 条件1....]
[ORDER BY...]
[LIMIT...];
# 这里的LIMIT只能写一个参数
# []表示里面的内容可写可不写

执行顺序: UPDATE->WHERE->ORDER BY->LIMIT->SET

例子: 把每名员工的编号和上司的编号+1,用ORDER BY子句完成

UPDATE t_emp SET empno=empno+1, mgr=mgr+1
ORDER BY empno DESC;

例子: 把月收入前三名的员工底薪减100元,用LIMIT子句完成

UPDATE t_emp SET sal=sal-100
ORDER BY sal+IFNULL(comm,0) DESC
LIMIT 3;

2.2 UPDATE表连接

相关子查询效率低,采用表连接改造UPDATE语句

语法:

# SET后的字段既可以是来自表1的字段也可以是表2的字段,即表连接的UPDATE语句可以修改多张表的记录

写法一:
UPDATE1 JOIN2 ON 条件
SET 字段1=1,字段2=2,...;

写法二:
UPDATE1,2  
SET 字段1=1,字段2=2,...
WHERE 连接条件;

例子: 把ALLEN调往RESEARCH部门,职务调整为ANALYST

# 该题不能写连接条件
UPDATE t_emp e JOIN t_dept d 
SET e.deptno=d.deptno, e.job="ANALYST"
WHERE e.ename="ALLEN" AND d.dename="RESEARCH";

例子: 把底薪低于公司平均底薪的员工,底薪增加150元

UPDATE t_emp e JOIN
(SELECT AVG(sal) AS avg FROM t_emp) t
ON e.sal<t.avg 
SET e.sal = e.sal+150;

UPDATE语句的表连接即可以是内连接,又可以是外连接

UPDATE1[LEFT|RIGHT] JOIN2 ON 条件
SET 字段1=1,字段2=2

例子: 把没有部门的员工,或者SALES部门低于2000元底薪的员工,都掉往20部门

UPDATE t_emp e LEFT JOIN t_dept d ON e.deptno=d.deptno
SET e.deptno=20
WHERE e.deptno IS NULL OR (d.dename="SALES" AND e.sal<2000);

三、数据删除

3.1 DELETE语法

删除数据记录

语法:

DELETE [IGNORE] FROM 表名
[WHERE 条件1, 条件2...]
[ORDER BY...]
[LIMIT...]

注意:

  1. IGNORE删掉没有外键约束的 和 UPDATE的差不多
  2. 不写WHERE条件就是删除全表记录

执行顺序: FROM->WHERE->ORDER BY->LIMIT->DELETE

例子: 删除10部门中,工龄超过20年的员工记录

DELETE FROM t_emp 
WHERE deptno=10 AND DATEDIFF(NOW(),hiredate)/365>=20

例子: 删除20部门中工资最高的员工记录

DELETE FROM t_emp
WHERE deptno=20 
ORDER BY sal+IFNULL(comm,0) DESC
LIMIT 1;

3.2 DELETE表连接

语法:

DELETE1.... FROM1 JOIN2 ON 条件
[WHERE 条件1, 条件2,...]
[ORDER BY...]
[LIMIT...]

例子: 删除SALES部门和该部门的全部员工记录

DELETE e, d
FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno
WHERE d.dename="SALES"; 

例子: 删除每个低于部门平均底薪的员工的记录

DELETE e
FROM t_emp e JOIN (SELECT deptno, AVG(sal) AS avg FROM t_emp GROUP BY deptno) t
ON e.deptno=d.deptno AND e.sal<t.avg;

例子: 删除员工KING和他的下属的员工记录,用表连接实现

DELETE e
FROM t_emp e JOIN 
(SELECT empno FROM t_emp WHERE ename="KING") t
ON e.mgr=t.empno OR e.empno=t.empno;

也可以支持外连接

DELETE1,... FROM1 [LEFT|RIGHT] JOIN2 ON 条件...;

例子: 删除SALES部门的员工,以及没有部门的员工

DELETE e 
FROM t_emp e LEFT JOIN t_dept d ON e.deptno=d.deptno
WHERE d.dename="SALSE" OR e.deptno IS NULL;

快速删除数据表全部记录:

  • DELETE语句是在事务机制下删除记录,删除记录之前,先把将要删除的记录保持到日志文件里,然后在删除记录。

  • TRUNCATE语句在事务机制之外删除记录,速度远超过DELETE语句

    一次只能清空一张表

    TRUNCATE TABLE 表名;
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C#中,`HttpInputStream` 是 `HttpListener` 类的一部分,用于处理HTTP请求流。但是,`HttpInputStream` 本身并不提供直接修改请求数据的方法。如果你需要修改客户端发送的请求数据,你通常需要在读取数据后对其进行处理,并根据需要创建新的响应数据。 以下是一般步骤: 1. 获取请求流:使用 `HttpListenerContext` 对象,通过 `Request.InputStream` 属性获取 `HttpInputStream`。 2. 读取数据:读取 `HttpInputStream` 中的数据。这通常是通过读取字节流或使用更高级的如 `StreamReader` 来读取文本数据。 3. 修改数据:根据你的需求对读取的数据进行处理。这可能包括解码、更改数据格式、更新值等。 4. 创建响应:处理完数据后,你需要创建一个 `HttpListenerResponse` 对象来向客户端发送响应。 5. 发送修改后的数据:通过 `HttpListenerResponse` 对象的 `OutputStream` 属性来发送你修改后的数据。通常,你需要先将数据写入一个字节数组或其他中间存储,然后写入到响应流中。 示例代码: ```csharp using System; using System.IO; using System.Net; using System.Text; // ... HttpListenerContext context = ...; // 获取HttpListenerContext实例 HttpListenerRequest request = context.Request; HttpListenerResponse response = context.Response; // 读取原始请求数据 using (StreamReader reader = new StreamReader(request.InputStream)) { string requestBody = reader.ReadToEnd(); // 假设请求体为文本 // 对requestBody进行处理,例如修改某些值 string modifiedBody = requestBody.Replace("原始值", "新值"); // 准备响应 byte[] responseBytes = Encoding.UTF8.GetBytes(modifiedBody); response.ContentLength64 = responseBytes.Length; using (Stream output = response.OutputStream) { output.Write(responseBytes, 0, responseBytes.Length); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值