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 NULLUNIQUE)。


二、查询数据(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
);
操作示例
  1. 插入数据

    INSERT INTO products (name, price, stock) 
    VALUES 
      ('手机', 2999.99, 100),
      ('笔记本', 5999.50, 50);

  2. 查询数据

    SELECT name, price FROM products WHERE stock > 0 ORDER BY price DESC;

  3. 更新数据

    UPDATE products SET price=2799.99 WHERE name='手机';

  4. 删除数据

    DELETE FROM products WHERE stock = 0;  -- 删除库存为0的商品


总结

  • 增删改查是数据库操作的核心

    • 插入(INSERT)注意字段约束和批量优化。

    • 查询(SELECT)灵活使用条件、排序和分页。

    • 更新(UPDATE)和删除(DELETE)必须严格指定 WHERE 条件。

  • 高级技巧:事务、索引、预处理语句是保证安全性和性能的关键。

  • 设计原则:通过外键、默认值和约束保障数据完整性。

你可能感兴趣的:(数据库,数据库,mysql)