首页 > 数据库 >MySQL

MySQL

时间:2022-12-10 09:33:13浏览次数:27  
标签:-- 列名 查询 索引 MySQL where select

一、数据定义语言

1.设计数据库

//记单词
①、创建:create
②、删除:drop
③、修改:alter
④、数据库:database
⑤、切换/使用/进入:use
⑥、查询:select
⑦、表:table
⑧、显示:show
⑨、存在:exists
⑩、非:not 是否:if

-- 创建数据库 注意:数据库名称:XXX_DB
create databse 数据库名称;

-- 如果数据库不存在,创建数据库
create database if not exists 数据库名称;

-- 删除数据库 --> 注意:使用drop来删除库或者表,该结构+数据无法还原!(轻易不要操作)
drop database 数据库名称;

-- 如果数据库存在,删除数据库
drop database if exists 数据库名;

-- 切换数据库 前提:数据库已经存在!
use 数据库名称;

-- 查看创建数据库的基本信息
show create database 数据库名;

-- 查看登录的用户信息
select user();

-- 该库下的所有表
show tables;

2.设计表

//设计表 注意:[] --> 可省略
create table [if not exists] 表名(
​ 列名 数据类型 [属性 约束],
​ 列名 数据类型 ,
​ 列名 数据类型
);

注意:
①、表的命名规则:tb_XXX 或者 库_XXX
②、列命名规则:表_XXX 或者 表的缩写_XXX
③、每一列必须要有列名和数据类型! --> 整数:int 字符串:varchar(长度)
④、列与列之间使用,隔开的! 最后一列省略,
⑤、使用varchar数据类型一定要长度!
⑥、执行的时候:将整个代码选中执行! create -- ;

3.数据类型

①、整数:
--> int:存储整数! int(m) --> m:提醒的作用! 11 默认也是11!
--> tinyint:代替布尔类型!

②、小数:
--> float:存储小数! float(m,n) --> m:数字的总长度! n:小数位数! (5,2)
--> double:
--> decimal:精确小数! 存储钱!

③、字符串:
--> char:固定长度! char(10) --> 占用长度永远都是10! 存储固定长度,比如性别!
--> varchar:可变长度! varchar(10) --> 永远按照使用的长度来计算!
注意:在MYSQL5.6之前,varchar计算单位是按照字节的单位来计算!在MYSQL5.6之后,计算单位按照字符来计算!无论存储是数字、字母、汉字都是按照字符来计算!!! (推荐稍微多给点,长度是一定要给!)
--> text:长文本!

④、时间类型:
--> 时间:time
--> 日期:date
--> 日期+时间:datetime
--> 时间戳:timestamp --> 只要修改当前的SQL语句,自动获取当前的时间戳!

4.属性

①、添加注释comment+别名:stu_id int comment '学号'

②、序列:将当前列自动增长, auto_increment

条件:数据类型是整数类型,并且必须添加主键

5.约束

①、主键约束:为每张表都添加主键,每张表只能有一个主键!要求数据必须是唯一并且不为空的! 关键词:primary key

②、非空约束:该列的数据不能为null! 关键词: not null

③、默认约束:该列存在默认值! default 值! (注意:值根据数据类型来填充! 数值:数字! 字符串或者日期:'' 或者 "")
--> 唯一约束:该列的数据是唯一的,但是可以多个null! 关键词: unique

④、重要的约束,但是不要在数据库中使用:外键约束!
--> 外键约束:表与表之间通过外键来关联! 表与表之间唯一的联系!
--> 如何实现外键约束?
4.1:先分析:分析主外键表!主表:先出现的表! 外键表/辅表:后出现的表!
4.2:在主键表添加主键约束!
4.3:在外键表添加一个引用列! --> 引用主键表中主键列!
注意:引用列数据类型必须与主键表中主键列的数据类型一致!

二、数据操控语言

1.插入:insert

//语法 注意:[] 内的内容可省略!
insert into 表名[(列名,列名)] values(值,值);

注意:
①、可省略列名,如果省略列名,则代表给整张表添加数据!
②、列和值必须一一对应!(个数要一致,数据类型必须一致!)

③、指定列名(外键的引用列、非空约束)插入数据--> 自动增长列 以及 默认值列会自动填充!

注意:自动增长列填null,默认值列填default

2.删除:delete

注意:只会删除数据,对表的结构不存在影响的!

//语法
delete from 表名 [where条件];

注意:
①、如果省略where,直接将整张表的数据删除!
②、where条件参考查询where!

注意事项:违反外键约束,必须先删除外键表关联数据,才能删除主键表的数据。

3.修改:update

//修改
update 表名 set 列名 = 值,列名 = 值 [where条件];

注意:
①、省略where条件,则代表给整张表修改数据!
②、列和值要对应! 例如:列是int类型,值必须是数字!列是字符串或者日期,值必须加‘ ’或者“ ”
③、修改的是数据!修改成功,返回的也是受影响行数!

三、数据查询语言

1.基础查询

①、查询的基本结构:返回的是结果集!

//语法
select 查询列 from 表名 [where 筛选条件];

②、查询所有: 查询所有列! * --> 推荐尽量少用*,检索效率比较低
select * from tab;

③、查询指定列的数据:
//语法
select 列名,列名 from 表名;

注意:列名必须是表中已经存在的列!多个列之间必须使用逗号隔开!

④、添加别名:别名都是临时,只在当前这个查询语句有效!
给列添加别名 --> 显示就是别名!
4.1:使用as关键字: select 列名 as 别名 from tab;
4.2:使用空格:select 列名 别名 from tab;

4.3:给表添加别名 --> 一旦给表添加别名,表就可以使用别名来进行操作! (联表查询中使用的特别多!)

⑤、去重复:distinct

对查询列去重复
select distinct 列名 from tab;

⑥、基础where筛选条件

6.1:等于和不等于,等于:= 不等于:!= 或者 <>

6.2:比较大小:< >= <=

6.3:或与非,或者:or 与:and 非:not

6.4:区间判断,使用and: >= and <=

​ between...and (注意:从小到大)

6.5:包含:使用or: 列名 = ‘ ’ or 列名 = ‘ ’
使用in : in(集合); --> 尽量少用!in(长度有限制)

6.6:判断是否为null?
是: is null 不是:is not null

2.模糊查询

//语法
select * from tab where 列名 like '占位符';

注意:
①、% : 零个或者多个! 例如:'hello' %h%:只要包含h! h%:必须以h开头! %h:必须以h结尾!

②、_ : 1个! 例如:'hello' --> hel_o就能查询出hello!

③、如果没有在条件中使用占位符,视同于等于!

3.排序

对查询结果来进行排序! order by

//语法
select * from tab [where条件] order by 列名 [desc/asc];

注意:
①、如果不需要筛选条件,直接排序的话! 不需要where关键字!
②、默认排序方式:升序(asc)!
③、desc:降序! (从大到小)

④、根据多个列来排序:

⑤、根据时间来排序:时间是可以直接进行排序的!

4.聚合函数

//聚合函数
①、求和:sum()
②、最大值:max()
③、最小值:min
④、计数:count()
⑤、平均值:avg()

5.分组

查询结果来进行分组! group by

//语法
select * from tab [where条件] group by 列名;

注意:
①、根据列来分组,得到几组数组! --> 分组+聚合函数来计算每组的值!
②、根据多个列来分组! --> group by 列名1,列名2; (先根据列名1来分组,再根据列名2来分组)

③、对分组之后再筛选! having --> 和where是一样,用于筛选!
where:where在分组之前筛选! where筛选条件不能+聚合函数!
having:在分组之后筛选! having筛选条件+聚合函数!

6.limit

①、提取前N条数据!
select * from tab [where条件] limit N;

②、提取区间条数!
select * from tab [where条件] limit N,M; --> N:起始索引(从0开始)位置! M:提取的条数!

③、分页查询:当返回的条数比较多,无法一页显示的时候! 使用分页查询!!!
3.1、查询总条数! --> count
3.2、每页显示条数! --> 8 (自定义)
3.3、总页数:总条数 % 每页条数 == 0 ? 总条数 / 每页条数 : (总条数 / 每页条数 + 1)
3.4、页码:当前页数!

//分页实体类
PageInfo{
​ //总条数
​ private Integer allCount;
​ //每页显示条数
​ private Integer count;
​ //总页数
​ private Integer allPage; --> allCount % count == 0 ? allCount / count : allCount / count + 1;
​ //当前页数
​ private Integer page;
}

-- 分页查询
-- 第0页
select * from tb_salary limit 0,8;
-- 第1页
select * from tb_salary limit 8,8;
-- 第2页
select * from tb_salary limit 16,8;
-- 第3页
select * from tb_salary limit 24,8;

总结:select * from tb_salary limit count*page,count;

7.联表查询

7(1)、联表查询:将多张表联合在一起查询操作!表与表之间唯一联系:主外键关系!!!
实现步骤:
①、先分析表之间的关联条件! --> 主键列和引用列来关联!
②、根据需求来分析使用哪一种联表查询!

7(2)、内联接:将多张表之间有关联的数据查询出来!

①、使用inner join ... on
语法:select * from tab1 inner join tab2 on tab1和tab2关联条件;

②、使用where来联表
语法:select * from tab1,tab2 where tab1和tab2关联条件;

7(3)、外联接:将主表的数据全部查询出来

①、左联接:以左边的表为主表!

语法:select * from tab1 left join tab2 on 关联条件; --> 以tab1为主表!
注意:将tab1的数据全部查询出来,tab2如果不存在的数据会填充null!

②、右联接:以右边的表为主表!

语法:select * from tab1 right join tab2 on 关联条件; --> 以tab2为主表!
注意:将tab2的数据全部查询出来!

8.子查询

子查询就是嵌套查询! 将一个select语句嵌套在另外一个select语句中!

8(1)、子查询特点:
①、子查询写在()! --> 先查询!
②、查询语句:select 查询列 from 查询表 where 查询条件!
③、子查询的作用:
3.1:当做查询列/临时列使用! --> 在select 和 from之间!
3.2:当做查询表/临时表使用! --> 在from 和 where之间!
3.3:当做查询条件来使用! --> 在where之后!(掌握)

8(2)、子查询分类:
①、当做查询条件使用:
语法:select * from tab where 列名 = (子查询);
注意:
1.1:如果使用=、>、>=、<、<=! 子查询的返回结果只能是单个值!
1.2:如果子查询返回多个结果,使用in!(效率比较低)

②、当做临时表来使用:在from之后!

③、当做临时列来使用:在select和from之间!

9.常用函数

-- 连接字符串
select concat('abc','123','小小');

-- 拼接
select concat(stu_name,'***',department) from student;

-- 插入 insert(原始字符串,起始的索引位置【从1开始】,替换的长度,替换新的字符串)
select insert('abc',1,2,'qqqq');

-- 转大小写
select lower('ABCDA'),upper('cccccDDDDD');

-- 返回字符串长度 length:单位是字节! char_length:单位是字符!
select length('你好123'),char_length('你好123');

-- 左填充和右填充 lpad(原始字符串,填充之后新的字符串的长度,填充的值)
select lpad('aaa',5,'bcbb'),rpad('af',7,'bcbb');

-- 去头尾的空格 trim
select trim(' 123 321 ');

-- 替换 replace
select replace(' 123 321 ',' ','');

-- 重复 repeat(原始字符串,重复的次数)
select repeat('131',2);

-- 截取 substring(原始字符串,从第2个开始截取,截取的长度)
select substring('abc123456',2,5);

-- 数值函数 abs绝对值,ceil向上取整,floor向下取整,mod取余,rand()随机数,
-- round(x,y)返回x的四舍五入的有y位小数的值,truncate(x,y)返回数字x截断位y位小数的结果
select abs(-1),ceil(5.85),floor(5.85),mod(10,4),rand(),round(5.68,1),truncate(5.68,1);

-- 日期
-- 获取当前的系统时间
select curdate(),curtime(),now(),sysdate();

-- 时间截取
select week(now()),year(now()),hour(now()),month(now()),monthname(now()),day(now());

-- 格式化
select date_format(now(),'%y年%m月%d日');

-- 两个日期之间的天数
select datediff('2022-12-1','2022-12-10');

10.索引

10(1)、索引的定义:在数据库表中添加索引,类似于给表单独添加了一个目录!查询的时候先检索目录,根据目录快速定位! 提高查询的速度!!!

10(2)、索引分类:
①、根据物理存储来划分:聚集索引和非聚集索引!
1.1:聚集索引:索引和实际数据存储的有按照顺序的存储!
--> 类似于新华字典按照拼音查询!
--> 每张表中只能有一个聚集索引!
--> 推荐给主键添加聚集索引!

1.2:非聚集索引:索引和实际数据存储是没有顺序!
--> 类似于新华字典按照偏旁查询!
--> 在表中可以多个非聚集索引!

②、根据实际应用来划分:
2.1:单值索引:只能给单个列添加索引!
2.2:组合索引:给多个列联合添加索引!
2.3:唯一索引:唯一单值索引 或者 唯一组合索引! --> 创建唯一索引,必须保证的值是唯一的!
2.4:主键索引:给主键添加索引!

10(3)、添加索引:
//创建单值索引
create index 索引名 on table(列名);

//创建组合索引
create index 索引名 on table(列名1,列名2);

//创建唯一索引 --> 前提:保证列的数据是惟一的
create unique index 索引名 on table(列名);
create unique index 索引名 on table(列名1,列名2);

10(4)、索引的优缺点:
//优点
①、提高查找的速度! --> 降低检索的次数!

//缺点:
①、占用物理存储位置!
②、添加索引之后降低新增、修改和删除的执行效率! 在新增、删除和修改的同时还要管理索引表!

哪些列适合添加索引?
①、根据某些列来搜索数据,适合添加索引!
②、表的数据量比较大!
③、用于排序的列比较添加索引!
④、搜索框!

哪些列不适合添加索引?
①、表的数量很小!
②、列的数据的重复量比较大! 比如:性别
③、经常性的添加、删除和修改的时候! 不怎么查询的时候!、

10(5)、索引会失效:能不用就不要用!

-- ①、判断不等于的时候索引会失效! <> 或者 !=

-- ②、使用模糊查询,如果以占位符来开头!索引也会失效!

-- ③、没有使用添加索引的列!

标签:--,列名,查询,索引,MySQL,where,select
From: https://www.cnblogs.com/yao1994/p/16970770.html

相关文章

  • re_mysql_20221210
    1.约束#约束CREATETABLEtb_user2(idintAUTO_INCREMENTPRIMARYKEYCOMMENT'ID唯一标识',namevarchar(10)NOTNULLUNIQUECOMMENT'姓名',ageintC......
  • django静态文件配置以及连接mysql
    静态文件配置编写一个用户登录页面静态文件不怎么经常变化的文件主要针对html文件所使用的各种资源css文件js文件img文件、第三方框架文件django怎对静态文件资......
  • MySQL
    MySQLLIKE子句我们知道在MySQL中使用SQLSELECT命令来读取数据,同时我们可以在SELECT语句中使用WHERE子句来获取指定的记录。WHERE子句中可以使用等号=来设定......
  • 静态文件配置,django连接MySQL,ORM基本操作
    静态文件什么是静态文件静态文件是不怎么经常变化的文件,主要针对html文件所使用的到的各种资源。 css文件、js文件、img文件、第三方框架文件django针对静态文件资......
  • python 操作 MySQL
    python操作MySQL目录python操作MySQL1pymsql1.1下载安装1.2使用操作1.2.1执行SQL1.2.2插入表内容1.2.3fetch数据类型2SQLAchemy2.1安装2.2基本使用2.2.1Fil......
  • django连接MySQL
    目录django连接MySQL静态文件配置修改静态文件配置静态文件相关配置form表单request对象方法django连接数据类pycharm连接MySqldjango连接MySqldjangoORM简介基本ORM操作O......
  • MySQL主从复制与读写分离
    一.主从复制1.MySQL主从复制概述在企业生产中,成熟的业务通常数据量都比较大,如果读写操作都在一台mysql服务器上,那再处理高并发时压力会比较大单台的mysql再安全性,高可......
  • MySQL 环境配置
    Docker启动MySQL闪退要善于使用日志查看问题dockerlogs问题如下:dockerrun--name=master-p3306:3306-dmysql启动后发现闪退。查看日志:dockerlogsmaster......
  • Mysql 基础知识
    Mysql基础知识目录Mysql基础知识1RDBMS术语2MYSQ数据库的安装使用2.1MySQL用户设置2.2Mysql远程连接3MySQL数据类型3.1数值类型3.2日期和时间类型3.3字符串......
  • MySQL存储引擎区别
    Feature特性MyISAMMemory在内存中存数据InnoDBArchive存档NDB集群Transactions事务NoNoYesNoYesLockinggranularity锁粒度(越小并发性能越好)Table表级Table......