ZZZZZZ目的
ZZZZZZ代码
ZZZZZZ重点
ZZZZZZ操作(非代码,需要自己手动)
- 将sql_invoicing中的invoices更新:在2019年3月1日,给invoiceid为1的顾客付了10美元
UPDATE invoices
SET payment_total = 10, payment_date = '2019-03-01'
WHERE invoice_id = 1
UPDATE语句可以更新表中的一条或者多条记录,SET子句用来指定一列或者多列的新值 - 假如说刚才我们弄错了,要对刚才更新的数据进行修改
USE sql_invoicing;
UPDATE invoices
SET payment_total = DEFAULT, payment_date = NULL
WHERE invoice_id = 1
第三行的DEFAULT也可以用0 - 更新数据:对于invoiceid为3的顾客,我们在截止日期付了50%的数额
UPDATE invoices
SET payment_date = due_date, payment_total = invoice_total * 0.5
WHERE invoice_id = 3
- 如果要批量更新数据,MySQL工作台可能会出现错误,因为在默认情况下,MySQL工作台会在安全模式下运行,只能更新一条数据,所以需要修改设置。点击MtSQL Workbench上方的Edit,Preference,SQL_Editor,下滑,不要勾选Safe Update(rejects UPDATEs and DELETEs with no strictions),然后点击ok,设置完成后,关闭窗口,重新从MySQL Connection中进入
- 将所有顾客id为3的数据更新:在截止日期付了50%的数额
UPDATE invoices
SET payment_date = due_date, payment_total = invoice_total * 0.5
WHERE client_id = 3
将所有顾客id为3和4的数据更新:在截止日期付了50%的数额
UPDATE invoices
SET payment_date = due_date, payment_total = invoice_total * 0.5
WHERE client_id = (3, 4)
【练习题】
将所有在1990年之前出生顾客积分增加50
UPDATE customers
SET points = points + 50
WHERE birth_date < '1990-01-01'
- 更新sql_invoicing中所有叫Mywork的顾客的发票数据:在截止日期付了50%的数额
UPDATE invoices
SET payment_date = due_date, payment_total = invoice_total * 0.5
WHERE client_id = (SELECT client_id FROM clients WHERE name = 'Myworks')
invoice是发票的意思
UPDATE可以用子语句进行查找,这样就可以更新Mywork的所有发票了 - 更新所有位于纽约和加州(CA)的顾客发票
UPDATE invoices
SET payment_date = due_date, payment_total = invoice_total * 0.5
WHERE client_id IN (SELECT client_id FROM clients WHERE state IN ('NY', 'CA'))
先执行SELECT子句,可以看到结果有两条顾客的信息,所以要将WHERE后面的=换成IN
在执行UPDATE之前,最好先把子句也就是SELECT执行,就算是没有子句,最好也要把选择需要更新的数据的代码提前检查以下,看看是否输出正确
【练习题】
更新sql_store中orders表:将所有积分大于3000且下过单的顾客更新订单注释为金牌顾客
UPDATE orders
SET comments = 'Gold customer'
WHERE customer_id IN (SELECT customer_id FROM customers WHERE points > 3000)