mysql基础——插入、更新、删除数据

222 阅读2分钟

插入

a.插入单行
语法:
INSERT
INTO 表名 [(属性列1,属性列2,属性列3,....)]
VALUES (常量1,常量2,常量3,....)
注意:

  • 插入时需要保证字段列和数值列的数量必须相同
  • 在指定字段名插入时,可以调整字段名称及对应值顺序,不需要和表结构严格对齐
  • 当id设置为自增时,添加数据时最好不要直接给一个确切的数值,避免重复冲突,使用默认值让MySQL自己生成这个值。

实例:

-- 在顾客表里插入一个新顾客的信息
INSERT INTO customers
VALUES(DEFAULT,'John','Smith','1990-01-01',NULL,'address','city','CA',DEFAULT)

b.插入多行
语法:
INSERT
INTO 表名 [(属性列1,属性列2,属性列3,....)]
VALUES (常量1,常量2,常量3,....),(常量1,常量2,常量3,....).....
实例:

-- 插入多条运货商信息
 INSERT INTO  shippers (NAME)
 VALUES ('shipper1'),
        ('shipper2'),
        ('shipper3')

c.插入分层行
订单表(orders表)里的一条记录对应订单项目表(order_items表)里的多条记录,一对多,是相互关联的父子表。通过添加一条订单记录和对应的多条订单项目记录,学习如何向父子表插入分级(层)/耦合数据(insert hierarchical data):

  • 关键:在插入子表记录时,需要用内建函数 LAST_INSERT_ID() 获取相关父表记录的自增ID(这个例子中就是 order_id)
  • 内建函数:MySQL里有很多可用的内置函数,也就是可复用的代码块,各有不同的功能,注意函数名的单词之间用下划线连接
  • LAST_INSERT_ID():获取最新的成功的 INSERT 语句 中的自增id,在这个例子中就是父表里新增的 order_id. 实例:
-- 新增一个订单(order),里面包含两个订单项目/两种商品(order_items),
-- 请同时更新订单表和订单项目表
INSERT INTO orders(customer_id, order_date, STATUS)
VALUES(1,'2019-01-01',1)

INSERT INTO order_items
VALUES( LAST_INSERT_ID(),3,1,2.95),( LAST_INSERT_ID(),4,1,3.95)

更新

a.更新单行
语法: UPDATE 表名
SET 列名=表达式,列名=表达式,....
WHERE 条件
实例:

UPDATE invoices
SET payment_total = 10, payment_date = '2019-03-01'
WHERE invoice_id = 1

b.更新多行
语法一样,就是让WHERE 的条件包含更多记录
实例:

-- 让所有非90后顾客的积分增加50点
UPDATE customers
SET points = points + 50
WHERE birth_date < '1990-01-01'

c.使用子查询
子查询可以嵌套在UPDATE语句中,用以构造修改的条件
实例:

-- 更改发票记录表中名字叫Myworks的payment_total和payment_date的记录
UPDATE invoices
SET payment_total = 10, payment_date = '2029-03-01'
WHERE client_id = 
		(SELECT client_id
		FROM clients
		WHERE NAME = 'Myworks')

删除

删除行
语法:
DELETE
REOM 表名
WHERE 条件
注意:

  • 省略where删除全部表

实例:

DELETE
FROM  invoices
WHERE client_id = 2

创建表的副本

实例:
语法:
CREAT TABLE 新表名 AS 子查询

-- 快速创建表 orders 的副本表 orders_archived
CREATE TABLE orders_archived AS
SELECT * FROM orders