码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • MySQL——增删改查进阶


    目录

    一,数据库的约束

     1.not null——指定列非空

     2.unique——指定值唯一

     3.default——默认值约束

     4.primary key——主键约束

     5.foreign key——外键约束

     6.check约束——了解

    二,表的设计

    1.主要思路

     三,新增

    四,查询(聚合函数:count,sum,max,min,avg)

    1.count——计算行数

    2.sum——若干行之间进行加和

    3.avg——求若干行平均数

    4.max——求若干行最大值

    5.min——求若干行最小值

    6.group by——分组查询

    (1).分组

    (2). 在分组时进行操作

    (3).分组之前筛选

    (4).分组之后筛选 

     7.联合查询(笛卡尔积——列数相加,行数相乘)

    (1).未排除错误数据

    (2).排除错误数据

    (3).jion on 写法

    (4).具体聚合步骤


    一,数据库的约束

    1.not null——指定列非空

    create table student (
     id int not null,
     sn int ,
     name varchar(20),
     qq_mail varchar(20)
    );

    2.unique——指定值唯一

    create table student (
     id int ,
     sn int unique,
     name varchar(20),
     qq_mail varchar(20)
    );

    使用unique约束,数据库自动给对应列创建索引

    3.default——默认值约束

    create table student (
     id int ,
     sn int ,
     name varchar(20) default ' 未命名',
     qq_mail varchar(20)
    );

    4.primary key——主键约束

    create table student (
     id int  primary key auto_increment,
     sn int ,
     name varchar(20) ,
     qq_mail varchar(20)
    );

    1.相当于 unique+not null

    2.一个表中只能有一个(分布式部署时不能保证不重复)

    3.常与  auto_increment  搭配使用,可自动增加值,也支持手动分配.

      手动分配后,按手动分配后新数据继续自增

     生成公式=(时间戳+机房编号/主机编号+随机因子)==>计算哈希值

     5.foreign key——外键约束

    create table classes (
    id int primary key auto_increment,
    name varchar(20),
    `desc` varchar(100)
    );

    create table students (
    id int primary key auto_increment,
    sn int unique,
    name varchar(20),
    qq_mail varchar(20),
    classes_id int,
    foreign key (classes_id) references classes(id)
    );

    父表为classes,子表为students

    在子表里创建父表的伪id

    1.子表存在,不能直接删父表

    2.被约束的不能直接删除

    拓展:逻辑删除

    将数据标记为无效

    6.check约束——了解

    create table students (
    id int primary key auto_increment,
    sn int unique,
    name varchar(20),
    sex varchar(20),

    check (sex='男' or sex='女')
    );

    使用时不报错且自动忽略

    二,表的设计

    1.主要思路

    (1).根据需求,找到“实体”

    (2).梳理实体间的关系

    一对一     

    一对多   

    1.学校宿舍管理系统,要求包含宿舍信息,学生信息,每日的宿舍查房记录。

    create table dormitory(

      id int primary key,

      number varchar(20)

    );

    create table student(

    id int primary key,

      name varchar(20),

      dormitory_id int,

      foreign key (dormitory_id) references dormitory(id)

    );

     多对多

    需要额外一个关联表

     三,新增

    可以把查询的结果插到另一个表中

    insert into 表1 select * from 表2 [where ];

    四,查询(聚合函数:count,sum,max,min,avg)

    对某某列的行进行操作

    1.count——计算行数

    select count(列/*)from 表

     注意:

    count(列),若该列为null,则不计算;若该列为*,所有列为空也计算

    2.sum——若干行之间进行加和

    select sum(列名) from 表名;

     空值不参加运算,直接跳过

    3.avg——求若干行平均数

    4.max——求若干行最大值

    5.min——求若干行最小值

    6.group by——分组查询

    (1).分组

    select  列名 from 表名 group by 列名;

    (2). 在分组时进行操作

     select 列, count(*) from 表 group by 列;

    产生select 所需列,尽量不要使用*,否则分组产生的数据只显示第一个出现的行

    count()

     avg(),max(),min()和count类似

     (3).分组之前筛选

      select 列, avg(*) from 表 wher 条件 group by 列; 

    (4).分组之后筛选 

      select 列, avg(*) from 表  group by 列 having 条件;

     7.联合查询(笛卡尔积——列数相加,行数相乘)

    联合查询/多表查询=笛卡尔积+连接条件+其他条件

    (1).未排除错误数据

    select * from 表1 ,表2;

     (2).排除错误数据

    select * from 表1 ,表2 where 条件;

    eg:

    select * from students, classer where students.id=classes.id; ()    表.列

    (3).jion on 写法

    select * from 表1 join 表2 on 条件;

    (4).具体聚合步骤

    1.先笛卡尔积

    select * from 表1,表2 ;

    2.再加上连接条件(一般是对id进行去重)

    select * from 表1,表2 where 表1.id=表2.id ;

    3.再加上其他限制条件,留下你需要的内容

    select * from 表1,表2 where 表1.id=表2.id and 条件/group by ;

    4.最后改变 select 后的 * 为所需要的列

    select 列1,列2/sum(列),avg(列)...  from 表1,表2 where 表1.id=表2.id and 条件/group by ;

     

  • 相关阅读:
    【ARM Coresight OpenOCD 系列 3 -- OpenOCD 常用命令与扫描链scan_chain】
    线下门店如何根据员工排班情况给客户预约
    C# 调用高德地图API获取经纬度以及定位【万字详解附完整代码】
    python轻量级性能工具-Locust
    文献综述:电动汽车的路由问题及其变化。
    Flutter 调用百度地图APP实现位置搜索、路线规划
    mac 卸载第三方输入法
    keepalived实现nginx高可用
    Android学习笔记 1. TextView
    17.0、Java多线程——synchronized同步方法及同步块
  • 原文地址:https://blog.csdn.net/weixin_63056061/article/details/126106332
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号