【Mysql】增删查改操作

creat 新增


INSERT 新增语句

复制代码
  INSERT [INTO] table_name
  [(column [, column] ...)]
  VALUES
  (value_list) [, (value_list)] ...
  -- value_list: value [, value] ...

INTO 可以省略,写上可读性更好

  • 表

    复制代码
    create table users (
        id bigint,
        name varchar(20) comment '用户名'
    );

三种插入方式
  • 单行全列插入

    复制代码
    insert into users values (1, '张三');
    insert into users values (2, '李四');

    不写列名,值的数量、顺序必须和表定义的列完全一致

  • 单行指定列插入

    复制代码
    insert into users(id, name) values (3, '王五');

    括号里写明要插入哪些列,值和指定的列一一对应、顺序匹配

  • 多行指定列插入

    复制代码
    insert into users(id, name) values (4, '赵六'), (5, '钱七');

    一条 SQL 写多组 (值),逗号隔开,一次性插入多条

  • 查询验证:

    复制代码
    select * from users;

总结

  • 全列插入:省略列列表,值要和表所有列对齐
  • 指定列插入:只给部分字段赋值,值和写出来的列对齐
  • 多行插入:一条 INSERT 多个 (value_list),减少数据库交互,
    性能优于多次单行insert
  • 字符串类型的值,要用单引号包裹;数字不需要引号

复制代码
  -- 创建users表
  create table users
  (
      id   bigint,
      name varchar(20) comment '姓名'
  );

  -- 单行全列插入
  insert into users
  values (1, '张三');
  insert into users
  values (2, '李四');

  select *
  from users;


  -- 单行指定列插入  , 写id name, 值跟指定列匹配
  insert into users(id, name)
  values (3, '王五');

  -- 多行指定列插入
  insert into users(id, name)
  values (4, '赵六'),
         (5, '钱七');


Retrieve检索

SELECT 检索语句


语法
复制代码
  SELECT
      [DISTINCT]
      select_expr [, select_expr ...]
  [FROM table_references]
  [WHERE where_condition]
  [GROUP BY {col_name | expr}, ...]
  [HAVING where_condition]
  [ORDER BY {col_name | expr} [ASC | DESC], ... ]
  [LIMIT {[offset,] row_count | row_count OFFSET offset}]
  • 执行顺序:
    FROM → WHERE → GROUP BY → HAVING → SELECT(DISTINCT) → ORDER BY → LIMIT

  • 常用 Select 查询示例

    复制代码
    -- 创建学生成绩表
    CREATE TABLE exam (
        id BIGINT,
        name VARCHAR(20) COMMENT '同学姓名',
        chinese FLOAT COMMENT '语文成绩',
        math FLOAT COMMENT '数学成绩',
        english FLOAT COMMENT '英语成绩'
    );
    
    -- 插入测试数据
    INSERT INTO exam (id, name, chinese, math, english)
    VALUES
    (1, '唐三藏', 67, 98, 56),
    (2, '孙悟空', 87, 78, 77),
    (3, '猪悟能', 88, 98, 90),
    (4, '曹孟德', 82, 84, 67),
    (5, '刘玄德', 55, 85, 45),
    (6, '孙权', 70, 73, 78),
    (7, '宋公明', 75, 65, 30);

    (1)查询全部列

    复制代码
    SELECT * FROM exam;

    (2)查询指定列(姓名、语文、数学)

    复制代码
    SELECT name, chinese, math FROM exam;

    (3)DISTINCT 去重(示例:查询不重复的数学分数)

    复制代码
    SELECT DISTINCT math FROM exam;

    (4)WHERE 条件过滤

    复制代码
    -- 查询语文大于80分的学生
    SELECT * FROM exam WHERE chinese > 80;

    (5)计算总分、别名 AS

    复制代码
    SELECT name, chinese + math + english AS total_score FROM exam;

    (6)ORDER BY 排序

    复制代码
    -- 按总分降序排序
    SELECT name, chinese + math + english AS total_score
    FROM exam
    ORDER BY total_score DESC;

    (7)LIMIT 分页

    复制代码
    -- 从第0条开始,取3条(前3条数据)
    SELECT * FROM exam LIMIT 0,3;

    (8)GROUP BY + HAVING 分组过滤

    复制代码
    -- 按数学成绩分组,只展示分组后平均分大于85的组
    SELECT math, AVG(chinese) avg_chinese
    FROM exam
    GROUP BY math
    HAVING avg_chinese > 85;
  • WHERE 和 HAVING 核心区别
    (1)WHERE:分组之前 筛原始行,不能写 AVG、SUM、COUNT 这类聚合函数
    (2)HAVING:分组统计完之后筛分组结果,可以使用聚合函数

相关推荐
钱栈up1 小时前
前端改了三页、后端也动了,用户说「完全没变化」——我在 116 库上找到的三个真凶
css·数据库
BBmmo1 小时前
MySQL 里大小写不同的邮箱,为什么会撞上唯一索引?
mysql
这个DBA有点耶2 小时前
索引建了查询却更慢——优化器选错索引与Index Merge的隐藏代价
数据库·架构·代码规范
云贝贝贝2 小时前
删了却没变小:PostgreSQL 死元组与表膨胀排查
数据库·postgresql
依晨照旧2 小时前
Langfuse 打爆两台机器:一条分位数 SQL,在 400G 表上扫了 8 分钟
数据库
专注仿真2 小时前
从「能跑通」到「能交付」:一套可直接落地的电商用户行为分析平台(Python + SQLite/MySQL + Streamlit 全栈源码与部署文档)
python·mysql·sqlite
笃行3503 小时前
列存储这条线,我顺着 KingbaseES 的文档摸了一遍
数据库
Navicat中国3 小时前
Navicat 18 支持 Azure OpenAI 接入,合规 AI 赋能 SQL 开发
数据库·人工智能·microsoft·ai·azure·navicat·数据
1024奇点3 小时前
【仓颉语言入门 · 第二篇 第 10 课】
开发语言·数据库·ide·mysql·开源