目录
本篇文章内容的前置知识为创建和操纵表与约束,如果不了解,可点击链接学习
插入数据(INSERT)
INSERT 用于将数据插入表中。
插入完整的行
写法一:不指定列名(不推荐)
语法结构:
INSERT INTO 表名
VALUES (值1, 值2, 值3, ...);
INSERT INTO products
VALUES (1009, '电竞耳机', 499, 101);
所有值必须严格按照表结构顺序
不推荐,因为顺序变化容易出错。
写法二:指定列名插入(推荐)
语法结构:
INSERT INTO 表名 (列1, 列2, 列3, ...)
VALUES (值1, 值2, 值3, ...);
INSERT INTO products (prod_id, prod_name, prod_price, vend_id)
VALUES (1010, '便携投影仪', 1099, 102);
顺序明确,更安全、更稳定,表结构变动也不容易出错。
插入部分列(省略某些字段)
INSERT INTO products (prod_id, prod_name, vend_id)
VALUES (1011, '智能手表', 100);
未提供 prod_price,系统将插入 NULL 或默认值
条件:省略的字段必须允许 NULL 或设置默认值
若表中存在自增列,插入时必须省略该列,否则会报错。
批量插入
插入大量数据时,单条 INSERT 效率低,使用批量插入
INSERT INTO products (prod_id, prod_name, prod_price, vend_id)
VALUES
(1012, 'U盘', 69, 100),
(1013, '移动硬盘', 399, 101),
(1014, '读卡器', 29, 102);
插入查询结果
把一张表中的数据插入另一张表,使用 INSERT 和 SELECT
语法结构:
INSERT INTO 目标表名 (列1, 列2, 列3, ...)
SELECT 列1, 列2, 列3, ...
FROM 源表名
[WHERE 条件];
要求:把 vend_id 为 100 的产品插入一个新表中:
CREATE TABLE hotProducts (
prod_id INT PRIMARY KEY,
prod_name VARCHAR(100),
prod_price DOUBLE,
vend_id INT
);
INSERT INTO hotProducts (prod_id, prod_name, prod_price, vend_id)
SELECT prod_id, prod_name, prod_price, vend_id
FROM products
WHERE vend_id = 100;
INSERT SELECT 用于将一个表中的数据批量插入另一个表
SELECT 的列必须和 INSERT 指定的列数量、顺序、数据类型一致
可加 WHERE 过滤插入的数据
INSERT和SELECT的列名尽量一致;虽然技术上不要求一致,只要位置和类型匹配
更方便的写法如下:
CREATE TABLE hotProducts LIKE products;
INSERT INTO hotProducts
SELECT *
FROM products
WHERE vend_id = 100;
这种方式会完全复制原表结构,无法灵活修改新表的字段类型或约束。
更新数据(UPDATE)
语法结构:
UPDATE 表名
SET 列名 = 新值, ...
[WHERE 条件];
更新某一行的某个字段
要求:修改商品 1011 的价格为 799
UPDATE products
SET prod_price = 799
WHERE prod_id = 1011;
这里不能省略 WHERE,否则会更新整张表
同时更新多个字段
要求:将商品 1009 改名为蓝牙耳机,价格改为 599
UPDATE products
SET prod_name = '蓝牙耳机',
prod_price = 599
WHERE prod_id = 1009;
SET 中字段用逗号分隔;最后一个字段不加逗号
删除数据(DELETE)
语法结构:
DELETE FROM 表名
[WHERE 条件];
删除指定行
要求:删除 prod_id = 1014 的读卡器产品
DELETE FROM products
WHERE prod_id = 1014;
如果省略 WHERE,会删除整张表所有记录
要求:删除所有价格为 NULL 的商品
DELETE FROM products
WHERE prod_price IS NULL;
删除所有行
DELETE FROM products;
代码会删除整张表所有数据,但是会保留表结构,需谨慎使用
如果想从表中删除所有行,不要使用 DELETE。可使用 TRUNCATE TABLE 语句,它完成相同的工作,而速度更快
语法结构:
TRUNCATE TABLE 表名;
TRUNCATE 会重置 AUTO_INCREMENT,DELETE不会重置
尚未完结,可点击链接跳转下一篇文章