INSERT子句 插入数据

  1. 插入单行
    格式:INSERT INTO 表名 (列名1,列名2,……) VALUES(值1,值2,……)
1
2
3
INSERT INTO customers(first_name,last_name,address,city,state)
-- 列名属于可忽略部分,但通过写列名,可以不按表中的列名顺序插入,如果大量数据不按照表中列名顺序,可考虑写列名部分;同时写列名部分,可以只插入表中没有设定默认值的列值,其他则会设定为默认值
VALUES('xiling','luo','SZTU','shenzhen','GD')
  1. 插入多行
    格式:INSERT INTO 表名 (列名1,列名2,……)
    VALUES(值1,值2,……),(值1,值2,……),……
1
2
3
INSERT INTO products(name,quantity_in_stock,unit_price)
VALUES('product4',25,4.55),
('product5',38,3.50)
  1. 插入分层行
    若要在两个有关联的表插入有关联的元组数据,可通过LAST_INSERT_ID()调用上一条记录刚得到的id(该id为表中的主键,拥有自动递增特性)
1
2
3
4
INSERT INTO orders(customer_id,order_date,status) 
VALUES(12,'2024-04-02',1);
INSERT INTO order_items 
VALUES(LAST_INSERT_ID(),14,1,4.55);

建表并复制

将某表的某些记录复制成另一个表,利用 CREATE TABLE 【表名】 AS 完成。

1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE invoices_archived AS
SELECT i.invoice_id,
i.number,
c.name client,
i.invoice_total,
i.payment_total,
i.invoice_date,
i.due_date,
i.payment_date
FROM clients c,invoices i
WHERE c.client_id = i.client_id AND payment_date IS NOT NULL
-- SELECT子句用于挑选被复制的记录

UPDATE子句 更新数据

  1. 更新一行
    格式:UPDATE 【表名】 SET 【列名1】= 值1,…… ,WHERE 条件(指定某一条记录的主键)
1
2
3
UPDATE invoices
SET payment_total = 10, payment_date = '2019-03-01'
WHERE invoice_id = 1;
  1. 更新多行
    格式:UPDATE 【表名】 SET 【列名1】= 值1,…… ,WHERE 条件
1
2
3
UPDATE customers
SET points = points + 50
WHERE birth_date < '1990-01-01';
  1. 使用子查询的情况
    在我们不知道WHERE的条件时,可以用子查询先得到我们所需要的条件,再进行更新。
    如:我们需要更新订单表内的注释信息,但我们不知道顾客的id,只知道姓名,在这情况下就需要通过在顾客表找到姓名相对应的id,再到订单表更新注释
1
2
3
4
5
6
7
UPDATE orders
SET comments = 'Gold customers'
WHERE customer_id IN (
SELECT customer_id
FROM customers
WHERE points > 3000
);

DELETE子句 删除数据

格式:DELETE FROM 【表名】 WHERE 【条件1】,……

1
2
3
4
5
6
DELETE FROM invoices
WHERE client_id = (
SELECT *
FROM clients
WHERE name = 'Myworks'
);