当前位置: 首页 > article >正文

【MySQL】阶段性总结

一、客户端和数据库操作

1.登录 mysql -uroot -p
2.查看数据库版本 show version();
3.查看现有数据库 show databases:
4.创建数据库

        create [if not exists] database 数据库名 character set 字符编码集 collate 排序规则;
5.选择数据库 use 数据库名;
6.查看当前选择了哪个数据库 select database();
7.删除数据库 drop [if exists] database 数据名:
8.查看警告信息 show warnings;
9. 退出 quit/exit

二、表操作

1.查看当前数据库中有哪些表 show tables;
2.创建一张新表 create table 表名(列表/字段名 数据类型[,列表/字段名 数据类型]...)
3.查看表结构 desc 表名;
4.删除表 drop 表名;//非常危险的操作


三、CRUD增删改查

1.新增-插入

        insert into 表名「(列名[,列名1...)1 values(值(,值]...);
指定了多少列名,就需要指定多少值,值与列名一一对应
不指定列名,值的顺序与个数和表中所有的列一一对应


2.查询操作

        a.全列查询 select * from 表名;//不加限制的查询会把表中所有的数据都査出来

        b.指定列査询 select 列名[,列名]... from 表名;// 推荐使用

        c.列为表达式的查询 select 列名/表达式 from 表名;

        d.别名查询 select 列名/表达式 [as] 别名 from 表名;//别名中如果包含空格,需要用单引号引起来

        e.去重查询 select distinct 列名[,列名]..from 表名;//如果列名有多个,去重时只有所有的列都相等,才会判定为重复,才会去重

        f. 排序 select 列名[, 列名]... from 表名 order by 列名 asc|desc; // asc升序 desc 降序

        g.条件査询

        select 列名[, 列名].. from 表名 where 列名/表达式 比较/逻辑运算符 order by 列名 ascldesc;

        h.区间査询 where 列名 between 开始条件 and 结束条件; // 等价于 开始条件<= 列的值 <= 结束条件

        i.模糊査询 select * from 表名 where 列名 like"%值";//% 匹配任意字符,_匹配单个字符

        j.分页查询

        select * from 表名 where 条件 order by 列名 asc|desc limit num; // 查询前num条记录
        select * from 表名 where 条件 order by列名 asc|desc limit start num;//从第start条开始,向后查num条

        select * from 表名 where 条件 order by 列名 asc|desc limit num offset start; //从第start条开始,向后查num条

四、更新

        update 表名 set 列名= 值 where 条件 order by 子句 limit num; //如果不指定条件和limil的数量就会更新整表
 

五、删除

        delete from 表名 where 条件 order by 子旬 limit num;//如果不指定条件和limit的数量就会删除整表中的数据
 

六、数据库约束

1.非空约束:NOT NULL 标记一个字段是否可以为空,指定了这个约束,字段就不能为空

2.唯一约束:UNIQUE 标记一个字段的内容在当前列中唯一,不能重复,但是可以为NULL

3.主键约束:PRIMARY KEY, 在约束的方式上相当于NOT NULL+ UNIQUE认

4.默念约束:DEFAULT 当一个字段没有指定值时(为NULL时),不指定列的值的时,就用默认值去填充该列

5.外键约束:FOREIGN KEY 一个表中的字段与另一个表中的主键建立关联关系,当对表中的数据进行增删改的时候数据库会帮我们进行检查

七、表的设计

三大范式

1.第一范式:

        要求表中的每一个列不可再分,有一个简单的方法,数据库中提供的数据类型可以描述这个字段不满足第一范式的数据库就不是关系型数据库
 

2.第二范式:

        在第一范式的基础上,消除部分函数依赖,只能出现在有复合主键的表中(多个候选键),如果有字段只依赖于复合主键中的某一个列,那么就需要把这个列剔除,单独建表
        不满足第二范式的情况下会出现一些数据异常
              
  数据冗余,更新异常,删除异常,新增异常
 

3.第三范式:

        在第二范式的基本上,消除传递依赖

八、关系模型

1.一对一关系:

        各自先建立各自的表,在其中一张表中加一个字段完成对另一张表的引用(建立关系)

2.一对多关系:

        各自先建立各自的表,在一这一方设置一个主键,在多这一方加一个字段,两表建立引用关系

3.多对多关系:

        各自先建立各自的表,另外新加一张关系
 

九、聚合函数

1.COUNT(列”); 统计结果的条数
2.SUM(列) 求和
3.AVG(列) 求平均值
4.MIN(列)最小值
5. MAX(列) 最大值

 

十、GROUP BY 分组查询

        对某一个字段进行分组操作,分组后

HAVING子句

        对GROUP BY 的结果进行过滤的

十一、联合查询(表连接查询)

1.内连接

        select *from table1,table2 where table1.xxx= table2.xxx
        select * from table1
join table2 on table1.xxx= table2.xxx;
        select * from table1
inner join table2 on table1.xxx= table2.xxx;
 

表连接的执行过程
1.先计算参与表连接的笛卡尔积
2.通过连接条件过滤无效数据
3.加入查询条件得到想要的结果行
4.精减列名得到最终想要查询的列

 

2.外连接,分为左外连接和右外连接

        select*from table1 left ioin table2 on table1 .xxx = table2.xxx:
        select * from table1 riaht ioin table2 on table1 .xxx= table2 .xxx
        左外连接以左表为基准,左边的表中所有的数据全部显示,右表中没有对应的记录用NULL去填充

        右外连接以右表为基准,右边的表中所有的数据全部显示,左表中没有对应的记录用NULL去填充

3. 自连接

        select * from table1 t1, table1 t2 where t1.xxx = t2.xxx;
        把行转换成列,在查询的时候可以使用WHERE 条件进行过滤,实现行与行之间的比较

4.子查询


        单行子查询:select *from table1 where id = (select id from table2 where clo = xxx);
        多行子查询:select * from table1 where id
IN (select id from table2 where clo = xxx)

  • 内层查询的结果做为外层查询的条件,把多条语句合并为一条执行
  • 子可询可以无限嵌套,层数据过多会影响效率
     

5.合井查询

        select * from table1 union select * from table2.
        select * from table1
union all select * from table2,
        作用是把两个结果集中合并成一个返回
        注意:合并查询时多个查询的查询列表必须匹配,MYSQL不对结果做校验,写的时候务必注意

6.一条SQL语句中各部分的执行顺序

        自己构造一条SQL,不一定可以执行成功,但是相关的关键字都包含
        select distinct id, name, avg(age) from student where class id = 1 join class on student.class id = class.id group by student.id having avg(age)>0 order by student.id asc limit 100;

FROM--> JOIN ON--> WHERE--> GROUP BY--> HAVING--> SELECT--> DISTINCT--> ORDRE BY-->.LIMIT


http://www.kler.cn/a/405578.html

相关文章:

  • iOS构建版本以及Hbuilder打iOS的ipa包全流程
  • 海洋通信船舶组网工业4G路由器应用
  • 让windows远程桌面 丝滑如本地
  • 股指期货的套保策略如何精准选择和规避风险?
  • 万兆网络变压器电路设计选型与链接电路设计要点
  • 泷羽sec-星河飞雪-shell-2
  • 关于msvcr120.dll丢失怎样修复的相关分享,一键修复msvcr120.dll
  • 网络安全在线网站/靶场:全面探索与实践
  • Flume日志采集系统的部署,实现flume负载均衡,flume故障恢复
  • 【深度学习之一】2024最新pytorch+cuda+cudnn下载安装搭建开发环境
  • linux下的spi开发与框架源码分析
  • FreeRTOS之vTaskDelete实现分析
  • ara::com 与 AUTOSAR 元模型的关系总结
  • java 并发编程 (1)java中如何实现并发编程
  • Java文件上传解压
  • DICOM图像知识:解析如何在DICOM图像中实现多层覆盖层的显示的方法
  • dpdk poe丢包排查
  • 悬浮框元素定位
  • 移动语义和拷贝语义有什么区别?
  • Mumu模拟器12开启ADB调试方法