MySQL基础2

  • 引擎

  • sql语句增删改查

引擎

MySQL 5.5.5 以前默认引擎是MyISAM 以后默认引擎是InnoDB

show engines\G

  1. MyISAM 读取效率高

    1. 读效率高

    2. 不支持事务

    3. 表锁 锁住整张表

    4. 支持全文索引

    5. 不支持外键

  2. InnoDB 安全性高

    1. 支持事务

      1. 同时操作多个数据 但是其中一个数据操作失败 那么 全部回滚到操作以前

    2. 行锁

    3. 支持外键

SQL 语句

  1. insert into 表 values(值1,值2,..值n); #没有指定字段名 所有的字段必须传值

  2. insert into 表(字段1,字段2,...,字段n) values(值1,值2,..值n);

insert into users1 values(1,'zhangsan',18,'先生',140.5);
-- 插入一条  有多少个传多少个一一对应
insert into users1 values(3,'wangwu',23,'先生',147.5),(4,'zhaosi',30,'人妖',180.5),(5,'liuneng',60,'女士',160.7);
​
​
--- 看清楚某个字段的值得类型  是否是唯一的
​
​
insert into users1(name,sex,weight) values('zhangsan7','女士',161.6),('zhangsan8','先生',165.6),('zhangsan9','女士',162.6);
-- 指定字段插入多条记录
​
​
-- 如果 设计表的时候 允许为空  有默认值  主键自增  这些字段 可传可不传   否则 必须指定字段 然后传入值
-- 枚举 和 允许为空   允许为空优先级高  如果你写了 那么必须在枚举的范围以内
-- 设计表的时候 如果枚举一定要指定 不能为空 

查询

基础查询

select 字段列表 from 表名;
select id,name from users;
select id as 序号,name as 姓名 from users; #给字段起别名 最终的显示的时候显示别名
select * from users; #查询所有的字段

查询单个字段 不重复记录 distinct

-- select distinct 字段名 from 表;
select distinct f_name
from fruits; 

添加条件 where

SELECT f_id as 序号,f_name as 名称,f_price as 价格
FROM fruits
where f_price>10;

where 后边 可以接的条件

=   等于
>  大于
<  小于
>= 大于等于
<= 小于等于
!= 不等于
and 并且
or  或者
SELECT f_id as 序号,f_name as 名称,f_price as 价格
FROM fruits
where f_price>10 and f_name='banana';
​
​
select *
from fruits
where f_name in ('cherry','apple','grape');select *
from fruits
where f_name not in ('cherry','apple','grape');select *
from fruits
where f_price between 5 and 10;select *
from fruits
where f_price like 5.50;select *
from fruits
where f_price=5.50;
-- 跟上面是等效的   
​
​
-- select 字段名 from 表名 where 查询条件
-- 按照条件对表进行检索:
SELECT f_name AS'名称' ,f_price AS '价格' FROM fruits
WHERE f_price > 10 AND f_name='banana';
​
-- 模糊查询 like
​
-- 查询fruits表中 f_price字段 值开头为5.的数据:
SELECT * from fruits WHERE f_price like '5.%';
​
-- 查询fruits表中 f_name字段 值以a结尾的数据:
SELECT * from fruits WHERE f_name like '%a';
​
-- %代表多个对象
# not null    nullmysql> select f_name as 水果 from fruits where f_name is not null;
mysql> select f_name as 水果 from fruits where f_name is null; # 需要查看字段是否允许为空
​

排序 order by

  • asc 正序 默认

  • desc 降序

select * from fruits where f_name is not null order by f_price;
-- 默认是正序
​
select * from fruits where f_name is not null order by f_price asc;
-- 跟上面效果一样
​
select * from fruits where f_name is not null order by f_price desc;
--DESC 降序排列 

多字段排序

select *
from fruits
where f_name is not null
order by s_id asc,f_price desc;
​
-- 如果第一个字段已经将结果排好 那么第二个字段 会被忽略
-- s_id的值 多个数据行是也一样的  那么 继续按照第二个字段进行排序  

限制结果集 limit

select *
from fruits
where f_name is not null order by s_id asc,f_price
desc limit 10;
-- 若不加偏移量则默认为0 即显示符合的要求的前十个结果

结果集 区间选择 分页应用

select 字段列表 from 表名 [where] [order by] limit 偏移量,数量;

偏移量 :从第n+1行数据开始 显示对应数量的数据

select * from fruits LIMIT 15,3;

聚合函数

函数 说明
sum 求和
count 统计
max 最大值
min 最小值
avg 平均值

select 函数名(字段名) from 表名;

select max(f_price) from fruits;
-- 搜索fruits表中字段名为f_price的最大值select min(f_price) from fruits;
-- 搜索fruits表中字段名为f_price的最小值select sum(f_price) from fruits;
-- 查询fruits表中字段名为f_price的值的总和select avg(f_price) from fruits;
-- 查询fruits表中字段名为f_price的平均值select count(f_id) from fruits;
-- 查询fruits表中字段名为f_id的行数

分组 group by

select 字段列表 from 表名 group by 字段(搭配使用having 限制分组对象 group by 后不能使用where);

mysql> select s_id,avg(f_price)
from fruits
group by s_id;
-- 按照 s_id 进行分组  然后列出每个分组的平均价格 

group_concat(将查询出的字段对应的值打印在一行)

separator 指定连接符(不加separator则为默认链接字符 默认链接字符为逗号 —— , )

mysql> select s_id,group_concat(f_price separator '-') as f_price from fruits group by s_id;
+------+------------------+
| s_id | f_price          |
+------+------------------+
|  101 | 10.20-5.20-3.20  |
|  102 | 5.30-11.20-10.30 |
|  103 | 2.20-9.20        |
|  104 | 5.50-6.40-7.60   |
|  105 | 2.60-11.60-8.20  |
|  106 | 15.60            |
|  107 | 3.60-3.60        |
+------+------------------+
7 rows in set (0.00 sec)
​
​
mysql> select s_id,group_concat(f_price order by f_id separator '-') as f_price from fruits group by s_i
id;
+------+------------------+
| s_id | f_price          |
+------+------------------+
|  101 | 5.20-10.20-3.20  |  #这三个值  按照 f_id 进行正向排序
|  102 | 11.20-10.30-5.30 |
|  103 | 2.20-9.20        |
|  104 | 7.60-6.40-5.50   |
|  105 | 8.20-2.60-11.60  |
|  106 | 15.60            |
|  107 | 3.60-3.60        |
+------+------------------+
7 rows in set (0.00 sec)
​
​
mysql> select s_id,group_concat(distinct f_price order by f_id separator '-') as f_price from fruits grooup by s_id;
+------+------------------+
| s_id | f_price          |
+------+------------------+
|  101 | 5.20-10.20-3.20  |
|  102 | 11.20-10.30-5.30 |
|  103 | 2.20-9.20        |
|  104 | 7.60-6.40-5.50   |
|  105 | 8.20-2.60-11.60  |
|  106 | 15.60            |
|  107 | 3.60             | #相同的只留下了 一个
+------+------------------+
7 rows in set (0.00 sec)
​
在分组的结果上进行统计
mysql> select s_id,count(f_price) as 数量 ,group_concat(f_price separator '-') as 价格列表 from fruitsgroup by s_id;
+------+--------+------------------+
| s_id | 数量   | 价格列表         |
+------+--------+------------------+
|  101 |      3 | 10.20-5.20-3.20  |
|  102 |      3 | 5.30-11.20-10.30 |
|  103 |      2 | 2.20-9.20        |
|  104 |      3 | 5.50-6.40-7.60   |
|  105 |      3 | 2.60-11.60-8.20  |
|  106 |      1 | 15.60            |
|  107 |      2 | 3.60-3.60        |
+------+--------+------------------+
7 rows in set (0.00 sec
分组的结果上进行统计 然后再过滤 havingmysql> select s_id,count(f_price) as 数量 ,group_concat(f_price separator '-') as 价格列表 from fruits
group by s_id having 数量=1;
+------+--------+--------------+
| s_id | 数量   | 价格列表     |
+------+--------+--------------+
|  106 |      1 | 15.60        |
+------+--------+--------------+
1 row in set (0.00 sec)
​

整体查询

select 选择的列
from 表名
where 查询的条件
group by  分组属性   having 分组过滤的条件
order by 排序属性
limit 偏移量,数量;

多表联合查询

create table if not exists users(uid int(11) unsigned primary key auto_increment not null,username varchar(32) not null default 'kangbazi',password char(64) not null)engine=myisam default charset=utf8;
​
​
create table if not exists order_goos(oid int(11) unsigned primary key auto_increment not null,uidid int(11) not null,name varchar(64) not null,buytime int(11) not null)engine=myisam default charset=utf
f8;
  • 内连接

-- select 表1.字段1 [as 别名],表n.字段 from 表名1 [别名],表名2 [别名] where 条件;
​
​
select u.username as 用户,o.name as 商品,o.buytime as 购买时间
from users u,order_goos o
where u.uid=o.uid;
​
​
​
-- select 表1.字段1 [as 别名],表n.字段 [as 别名] from 表名1 [别名] inner join 表2 [别名] on 条件;
-- 数据表要么不用别名 写了别名 只能用别名
​
select u.username as 用户,o.name as 商品,o.buytime as 购买时间
from users u inner join order_goos o on u.uid=o.uid; 
  • 外连接

    • 左连接

    select 表1.字段1 [as 别名],表n.字段 [as 别名]
    from 表名1 [别名] left join 表2 [别名] on 条件;
    ​
    mysql> select u.username as 用户,o.name as 商品,o.buytime as 购买时间 from users u left join order_goos o on u.uid=o.uid;
    +--------------+--------------+--------------+
    | 用户         | 商品         | 购买时间     |
    +--------------+--------------+--------------+
    | 古力娜扎     | 苹果鼠标     |       123123 |
    | 迪丽热巴     | skii精华     |       111111 |
    | 热依扎       | 乳霜         |        22222 |
    | 珍塔玛莎     | 寇驰包包     |       123123 |
    | 古力娜扎     | 阿玛尼       |       123123 |
    | 迪丽热巴     | iPhone12     |     11112222 |
    | 蒙娜丽莎     | NULL         |         NULL |   因为左边是用户表 以它为准  没买的也会展示出来
    +--------------+--------------+--------------+
    7 rows in set (0.00 sec)
    left join以左边表为准   比如左边是用户表  买的和没买都进行显示 
     
  • 右连接

    select 表1.字段1 [as 别名],表n.字段 [as 别名] from 表名1 [别名] right join 表2 [别名] on 条件;
    
    mysql> select u.username as 用户,o.name as 商品,o.buytime as 购买时间 from users u right join order_goos o on u.uid=o.uid;
    +--------------+--------------+--------------+
    | 用户         | 商品         | 购买时间     |
    +--------------+--------------+--------------+
    | 古力娜扎     | 苹果鼠标     |       123123 |
    | 迪丽热巴     | skii精华     |       111111 |
    | 热依扎       | 乳霜         |        22222 |
    | 珍塔玛莎     | 寇驰包包     |       123123 |
    | 古力娜扎     | 阿玛尼       |       123123 |
    | 迪丽热巴     | iPhone12     |     11112222 |
    | NULL         | 平板电脑     |      1234321 | #以订单表为准   这个记录 对应不到人也会展示
    +--------------+--------------+--------------+
    7 rows in set (0.00 sec)
    right join以右边表为准   谁买了东西就展示哪些记录;

    两张以上的表

    select 表1.字段1 [as 别名],表n.字段 from 表名1 [别名],表名2 [别名],表3 [别名] where 表1.字段=表2.字段 and 表2.字段=表3.字段;
    ​
    ​
    select 表1.字段1 [as 别名],表n.字段 [as 别名] from 表名1 [别名] inner join 表2 [别名] on 条件 inner join 表3 [别名] on 表1.字段=表3.字段 ;
    ​
    ​
    select 表1.字段1 [as 别名],表n.字段 [as 别名] from 表名1 [别名] left join 表2 [别名] on 条件 left join 表3 [别名] on 表1.字段=表3.字段 ;
    ​
    ​
    select 表1.字段1 [as 别名],表n.字段 [as 别名] from 表名1 [别名] right join 表2 [别名] on 条件 left join 表3 [别名] on 表1.字段=表3.字段 ;
  1. 子查询

    mysql> select *
    from users
    where uid in (1,2,3,5);
    +-----+--------------+----------+
    | uid | username     | password |
    +-----+--------------+----------+
    |   1 | 迪丽热巴     | 123456   |
    |   2 | 古力娜扎     | 654321   |
    |   3 | 热依扎       | 123123   |
    |   5 | 珍塔玛莎     | 111111   |
    +-----+--------------+----------+
    4 rows in set (0.06 sec)
    ​
    mysql> select *
    from users
    where uid in (select uid from order_goos);
    +-----+--------------+----------+
    | uid | username     | password |
    +-----+--------------+----------+
    |   1 | 迪丽热巴     | 123456   |
    |   2 | 古力娜扎     | 654321   |
    |   3 | 热依扎       | 123123   |
    |   5 | 珍塔玛莎     | 111111   |
    +-----+--------------+----------+
    4 rows in set (0.00 sec)

union union all

两张没有关联的表 字段内容一样 可以放在一起显示 用union或者union all

union 是 union all 的去重结果

mysql> select uid from order_goos union select uid from users;
+-----+
| uid |
+-----+
|   2 |
|   1 |
|   3 |
|   5 |
|   8 |
|   4 |
+-----+
6 rows in set (0.00 sec)
​
mysql> select uid from order_goos union all select uid from users;
+-----+
| uid |
+-----+
|   2 |
|   1 |
|   3 |
|   5 |
|   2 |
|   1 |
|   8 |
|   1 |
|   2 |
|   3 |
|   4 |
|   5 |
+-----+
12 rows in set (0.00 sec)
​
mysql> select uid,name from order_goos union all select uid,username from users;
+-----+--------------+
| uid | name         |
+-----+--------------+
|   2 | 苹果鼠标     |
|   1 | skii精华     |
|   3 | 乳霜         |
|   5 | 寇驰包包     |
|   2 | 阿玛尼       |
|   1 | iPhone12     |
|   8 | 平板电脑     |
|   1 | 迪丽热巴     |
|   2 | 古力娜扎     |
|   3 | 热依扎       |
|   4 | 蒙娜丽莎     |
|   5 | 珍塔玛莎     |
+-----+--------------+
12 rows in set (0.00 sec)

修改 update

update 表名 set 字段1=值1,字段2=值2,字段n=值n where 条件

mysql> update users set username='kangjunjun',password='6666666' where id=2;

update 表1,表2 set 字段1=值1,字段2=值2,字段n=值n where 条件;

mysql> update users u,order_goos o set u.password = u.password+o.buytime,o.buytime=o.buytime+100 whereu.uid=o.oid

删除 delete

drop table 表名;# 删除表结构和数据

delete from 表名; #清空整个表的内容

delete from 表名 [where 条件]; # 根据条件清空指定数据行的内容

delete from 表名; # 再次插入记录  id 从原来的数字 往后延续 比如 原来id最后是10  delete清空后 再插入记录id 从11 开始
​

truncate table 表名; 清空表 内容

truncate table 表名; # 再次插入记录  id 从1开始 

MySQL基础01 补充相关推荐

  1. MySQL基础(补充)

    什么是SQL: SQL(Structured Query Language):结构化查询语言 其实就是定义了操作所有关系型数据库的规则. SQL的分类: DDL:用来定义数据库对象:数据库,表等 关键 ...

  2. 【文件上传漏洞-01】文件上传漏洞概述、防御以及WebShell基础知识补充

    目录 1 文件上传漏洞概述 2 文件上传漏洞防御.绕过.利用 2.1 黑白名单策略 3 WebShell基础知识补充 3.1 WebShell概述 3.2 大马与小马 1 文件上传漏洞概述 概述:文件 ...

  3. MySQL基础——数据库和SQL概述\MySQL基本使用\DQL语言学习\条件查询\排序查询\常见函数\分组查询\连接查询\子查询\分页查询\联合查询

    本文详细讲解了MySQL中DQL语言,也就是数据查询语句的使用.全文3w余字,是对学习MySQL知识的整理总结,因为篇幅较长,MySQL基础知识余下部分发表在余下博客中 DML语言学习\插入数据\删除 ...

  4. 最全MySQL基础篇

    文章目录 导入表的问题 第三章_最基本的SELECT语句 1. SQL语言的规则和规范 1) 基本规则 2) SQL大小写规范(建议遵守) 3) 注释 4) 命名规则 2. 基本的SELECT语句 1 ...

  5. MySQL基础(二)

    MySQL基础(二) MySQL基础(一) 文章目录 MySQL基础(二) MySQL基础(一) 存储过程与函数 存储过程概述 理解 分类 创建存储过程 语法分析 代码举例 调用存储过程 调用格式 代 ...

  6. MySQL基础语法总结

    MySQL基本语法 注:使用到的数据库表在文章末尾 文章目录 MySQL基本语法 基础查询 条件查询 排序查询 常见函数 分组查询 连接查询 基础查询补充 子查询 分页查询 联合查询 查询总结 插入 ...

  7. MySQL基础入门【3】

    文章目录 13 补充知识,查询结果的去重 14 连接查询 14.1 什么是连接查询? 14.2 连接查询的分类? 14.3 基础知识 补充,表的别名 14.4 内连接 等值连接 非等值连接 自连接 1 ...

  8. Mysql基础进阶运维(确定不来看看?)

    提示:mysql基础,进阶,运维(持续更新,更新速度与本人学习进度一致,加入自己的认知和理解,以下操作主要针对8.0后的) 文章目录 一.Mysql基础 1 Mysql概述 1.1 数据库相关概念 1 ...

  9. MySQL——基础篇

    MySQL--基础篇 一.数据库的相关概念 数据库(database) 保存有组织的数据的容器(通常是一个文件或一组文件). 表(table) 某种特定类型数据的结构化清单. 模式(schema) 关 ...

最新文章

  1. MIT:机器学习预测2018世界杯冠军
  2. vim复制内容到系统剪贴板
  3. Android 6.0动态权限申请
  4. python random randint_python中random.randint和random.randrange的区别详解
  5. 安装mysql二进制文件_MySQL二进制文件规范安装
  6. How to install Aptana Studio 3 on Ubuntu 12.04 LTS (Precise Pangolin)
  7. sae中使用django migrate导致13013的问题
  8. 悬崖帝国中文版下载|悬崖帝国中文破解版下载 v1.0绿色免安装版
  9. 对Proteus与Keil联调过程中遇到的怪异现象解决方法
  10. android 多版本打包后微信分享/登录授权失败问题
  11. Python多线程编程详解,文章比较长,需耐心浏览
  12. 56、公众聚集场所的防火巡查要求
  13. Position属性值的相关解析
  14. XTS05RSOT-143工作电压5V用于高速线路保护的2线ESD保护二极管阵列管XTS05R USB端口和以太网端口保护TVS二极管阵列,低泄漏电流和箝位电压25V结电容
  15. 基于matlab模拟心电信号,附赠代码
  16. python字典添加元素的2种方法_python中怎么向字典添加元素
  17. STC12CA560S2 ADC/PWM相关例程
  18. D3.js的v5版本入门教程(第十四章)—— 力导向图
  19. 马云麻计算机学,马云的专科学历不是你自我麻醉的毒药
  20. 实战案例!基于 K-Means 聚类算法的客户精准营销模型

热门文章

  1. Docker部署ddns-go,动态域名解析公网IPv6地址
  2. python:osmnx包下载城市路网数据
  3. 不能打开Dropbox分享链接的问题
  4. 回忆2022:润和软件与openEuler的那些事儿
  5. AP、mAP、MR-FPPI曲线、MR-2
  6. C语言中闰年的判断及打印了1000-2000年中的闰年
  7. 次世代教程_暗黑血统2次世代道具制作图文教程
  8. autohotkey更改win键盘快捷键为mac风格
  9. uniapp——商城购物车联动效果
  10. 【Java】图像透明渐变融合