MYSQL数据库增删改查
一、新增数据(Create)
1. 插入单行数据
-
全列插入
需按表字段顺序提供所有值,适用于字段较少的场景:INSERT INTO 表名 VALUES (值1, 值2, ...);示例:
INSERT INTO employees VALUES (1, '张三', 28, '2023-01-15'); -
指定列插入
允许部分字段插入,未指定字段需可为空或有默认值:INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2);示例:
INSERT INTO employees (name, age) VALUES ('李四', 30);
2. 插入多行数据
INSERT INTO 表名 (列1, 列2)
VALUES
(值1, 值2),
(值3, 值4),
...;
示例:
INSERT INTO employees (name, age)
VALUES
('王五', 25),
('赵六', 35);
注意事项
-
自增字段(
AUTO_INCREMENT)无需手动赋值。 -
插入数据需符合字段约束(如
NOT NULL、UNIQUE)。
二、查询数据(Retrieve)
1. 基础查询
-
全列查询
SELECT * FROM 表名;示例:
SELECT * FROM employees; -
指定列查询
SELECT 列1, 列2 FROM 表名;示例:
SELECT name, age FROM employees;
2. 高级查询
-
去重查询(
DISTINCT)SELECT DISTINCT 列 FROM 表名;示例:
SELECT DISTINCT department FROM employees; -- 查询不重复的部门名称 -
排序(
ORDER BY)SELECT * FROM 表名 ORDER BY 列 [ASC/DESC]; -- ASC 升序(默认),DESC 降序示例:
SELECT * FROM employees ORDER BY salary DESC; -- 按薪资降序排列 -
条件查询(
WHERE)-
基本条件
SELECT * FROM 表名 WHERE 列 比较运算符 值; -- 运算符如 =, >, <, BETWEEN, IN示例:
SELECT * FROM employees WHERE age BETWEEN 25 AND 35; -- 年龄在25到35之间 SELECT * FROM employees WHERE department IN ('销售部', '技术部'); -- 部门为销售部或技术部 -
模糊查询(
LIKE)SELECT * FROM 表名 WHERE 列 LIKE '模式'; -- % 匹配任意字符,_ 匹配单个字符示例:
SELECT * FROM employees WHERE name LIKE '张%'; -- 姓张的员工 -
空值判断
SELECT * FROM 表名 WHERE 列 IS NULL; -- 值为空 SELECT * FROM 表名 WHERE 列 IS NOT NULL; -- 值不为空
-
-
分页查询(
LIMIT)SELECT * FROM 表名 LIMIT 偏移量, 数量; -- 偏移量从0开始示例:
SELECT * FROM employees LIMIT 5, 10; -- 从第6条开始取10条数据
三、修改数据(Update)
语法与示例
UPDATE 表名 SET 列1=值1, 列2=值2 WHERE 条件;
示例:
UPDATE employees SET salary=10000, position='经理' WHERE id=5; -- 更新ID为5的员工薪资和职位
注意事项
-
必须指定
WHERE条件,否则会更新全表数据! -
支持同时更新多个字段,用逗号分隔。
-
若字段有外键约束,需确保新值符合关联表的数据。
四、删除数据(Delete)
语法与示例
DELETE FROM 表名 WHERE 条件;
示例:
DELETE FROM employees WHERE id=10; -- 删除ID为10的员工
注意事项
-
必须指定
WHERE条件,否则会清空整个表! -
删除操作不可逆,建议先备份数据。
-
若需清空表并重置自增计数:
sql
复制
TRUNCATE TABLE 表名; -- 不可回滚,谨慎使用!
五、高级操作与最佳实践
1. 事务处理
确保一组操作原子性(全部成功或全部失败):
BEGIN; -- 开启事务
UPDATE account SET balance=balance-100 WHERE user_id=1;
UPDATE account SET balance=balance+100 WHERE user_id=2;
COMMIT; -- 提交事务(或 ROLLBACK 回滚)
2. 防止 SQL 注入
-
使用预处理语句(如 Python 的
cursor.execute("SQL", (参数)))。 -
避免直接拼接用户输入到 SQL 语句中。
3. 性能优化
-
索引优化:
CREATE INDEX idx_name ON employees(name); -- 为频繁查询字段添加索引 -
避免全表扫描:
-
避免在
WHERE条件中对字段进行运算(如WHERE salary*2 > 10000)。 -
减少
SELECT *,按需查询字段。
-
4. 数据完整性保护
-
外键约束:
FOREIGN KEY (department_id) REFERENCES departments(id) ON DELETE CASCADE -
默认值与空值处理:
address VARCHAR(100) DEFAULT '未知', -- 设置默认值 email VARCHAR(100) NOT NULL -- 非空约束
六、综合示例
表结构
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
price DECIMAL(10, 2) NOT NULL,
stock INT DEFAULT 0
);
操作示例
-
插入数据:
INSERT INTO products (name, price, stock) VALUES ('手机', 2999.99, 100), ('笔记本', 5999.50, 50); -
查询数据:
SELECT name, price FROM products WHERE stock > 0 ORDER BY price DESC; -
更新数据:
UPDATE products SET price=2799.99 WHERE name='手机'; -
删除数据:
DELETE FROM products WHERE stock = 0; -- 删除库存为0的商品
总结
-
增删改查是数据库操作的核心:
-
插入(
INSERT)注意字段约束和批量优化。 -
查询(
SELECT)灵活使用条件、排序和分页。 -
更新(
UPDATE)和删除(DELETE)必须严格指定WHERE条件。
-
-
高级技巧:事务、索引、预处理语句是保证安全性和性能的关键。
-
设计原则:通过外键、默认值和约束保障数据完整性。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)