4. 增删改

简介: 4. 增删改

插入一条记录

sql

复制代码

insert into customers(
  customer_id,
  first_name,
    last_name,
    birth_date,
    phone,
    address,
    city,
    state,
    points)
values (
  default,  -- 按顺序
    'cfd',
    'best',
    '2023-10-7',
    NULL,
    '1716',
    'university',
    'ok',
    default
)
  • 每一列和values里面的内容按顺序一一对应
  • 默认或者是NULL的就可以不写,和列名一起删除,不写的就是默认

插入多条记录

VALUES …… 里一行内数据用括号内逗号隔开,而多行数据用括号间逗号隔开

sql

复制代码

USE sql_store;
INSERT INTO products 
VALUES (DEFAULT, 'product1', 1, 10),
       (DEFAULT, 'product2', 2, 20),
       (DEFAULT, 'product3', 3, 30)

sql

复制代码

INSERT INTO products (name, quantity_in_stock, unit_price)
VALUES ('product1', 1, 10),
       ('product2', 2, 20),
       ('product3', 3, 30)

还是感觉后面这种指明列名的要清晰一点

注意

对于AI (Auto Incremental 自动递增) 的id字段,MySQL会记住删除的/用过的id,并在此基础上递增

插入分级行

订单表(orders表)里的一条记录对应订单项目表(order_items表)里的多条记录,一对多,是相互关联的父子表。

  • 关键:在插入子表记录时,需要用内建函数 LAST_INSERT_ID() 获取相关父表记录的自增ID(这个例子中就是 order_id)
  • 内建函数:MySQL里有很多可用的内置函数,也就是可复用的代码块,各有不同的功能,注意函数名的单词之间用下划线连接
  • LAST_INSERT_ID():获取最新的成功的 INSERT 语句 中的自增id,在这个例子中就是父表里新增的 order_id。

sql

复制代码

insert into orders (customer_id,order_date, status)
values (1,'2020-10-7',1);
select last_insert_id();
insert into order_items
values (last_insert_id(),1,1,2.95)  , -- 获取插入记录的id
    (last_insert_id(),2,1,3.95)

复制表

  • DROP TABLE 要删的表名
  • CREATE TABLE 新表名 AS 子查询
  • TRUCATE '要清空的表名'
  • INSERT INTO 表名 子查询

sql

复制代码

create table orders_archived as
 select * from orders;
-- 复制另一张表中的一部分数据
 insert into orders_archived
 select *
 from orders
 where order_date < '2019-01-01'

sql

复制代码

use sql_invoicing;
create table invoices_archived as
SELECT i.invoice_id, c.name AS client, i.payment_date  
from invoices i
join clients c
  using (client_id)
where payment_date is not null

更新

更新单行

sql

复制代码

UPDATE 表 
SET 要修改的字段 = 具体值/NULL/DEFAULT/列间数学表达式 (修改多个字段用逗号分隔)
WHERE 行筛选

sql

复制代码

use sql_invoicing;
update invoices
set payment_total = 10,
  payment_date = '2019-03-01'
where invoice_id = 1;
update invoices
set payment_total = default,
  payment_date = NULL
where invoice_id = 1;
update invoices
set payment_total = invoice_total * 0.5,
  payment_date = due_date
where invoice_id = 1

更新多行

和上面用法一样,只需要修改 where 中条件就可以。 去掉where条件,就是默认对所有的记录操作

sql

复制代码

update invoices
set payment_total = invoice_total * 0.5,
  payment_date = due_date
where invoice_id in (3,4);

在update中使用子查询

在更新的 where 后面加上一个 查询即可 可以是

  • in (多个返回修改)
  • is not / is
  • = (单个返回修改)

sql

复制代码

update invoices
set payment_total = invoice_total * 0.5,
  payment_date = due_date
where client_id in 
        (select client_id
        from clients
        where name in ('CA','NY'))

sql

复制代码

UPDATE orders
SET comments = 'gold customer'
WHERE customer_id IN
    (SELECT customer_id
    FROM customers
    WHERE points > 3000)

删除行

和更新非常相似

sql

复制代码

delete from invoices
where invoice_id = 1;
delete from invoices
where invoice_id = (
select *
from clients
where name = 'Myworks')


相关文章
|
监控 JavaScript 前端开发
在生产环境中测试和监控Vue项目的方法有哪些?
在生产环境中测试和监控Vue项目的方法有哪些?
235 4
|
存储 运维 jenkins
放弃"Jenkins"的种种理由,期待更好赋能研发的"持续交付平台"
Jenkins 很酷,但是不完美,有历史局限性造成的问题。本文仅从“如何更好给研发团队赋能的角度”,剖析Jenkins, 探讨理想的持续交付平台, 不带货无广告~
244 3
|
存储 程序员 编译器
c语言进阶部分详解(详细解析动态内存管理)
c语言进阶部分详解(详细解析动态内存管理)
150 0
|
存储 安全 网络安全
网络安全的盾牌与矛:漏洞、加密与安全意识
在数字时代的海洋中,网络安全是航船不可或缺的防护盾。本文将深入探讨网络安全的三大支柱:漏洞、加密技术和安全意识。我们将从网络安全的基本概念出发,逐步解析网络攻击者如何利用漏洞进行入侵,加密技术如何在数据传输和存储中保护信息安全,以及为何提升个人和组织的安全意识至关重要。文章还将提供实用的代码示例,帮助读者更好地理解和应用这些知识,以确保网络环境的安全。
|
存储 监控 关系型数据库
如何优化InnoDB的整体性能?
【5月更文挑战第14天】如何优化InnoDB的整体性能?
333 2
|
存储 缓存 NoSQL
Redis安装和相关配置
Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: - Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 - Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 - Redis支持数据的备份,即master-slave模式的数据备份。
266 0
|
前端开发 JavaScript 关系型数据库
最好的 6 款 React 后台管理系统模板和框架
React admin框架繁多,在本文里我们介绍 React 下最好的 6 款后台系统,每款均严格测试后,整理它们的优缺点方便你来挑选。同时我们给出一些实用建议,帮你避免选型时不注意可能导致的埋坑。
3321 0
|
运维 前端开发
一文深度实践HTML表格,运维开发必备技能。基础不牢,地动山摇。跟紧步伐,复习巩固前端基础。
一文深度实践HTML表格,运维开发必备技能。基础不牢,地动山摇。跟紧步伐,复习巩固前端基础。
241 0
|
机器人 开发工具 Python
打造一个window桌面应用:在线聊天对话机器人
本文目标:打造一个window桌面应用:在线聊天对话机器人。
505 0
|
算法 索引
面试热点|二叉树那点事儿(一)上
前面写了很多篇工程相关的文章,今天准备写个数据结构和算法相关的文章。
面试热点|二叉树那点事儿(一)上