Mysql

概念

数据库DB

概念:

在计算机中,以一定组织和结构,存储和管理数据的软件服务。

特点:

持久化:长久保存数据

分类:

关系型数据库:以关系表形式保存数据【MySQL】
非关系型数据库:通常以键值对形式存储【Resid】
DBA
DBS
DBMS

常见的数据库

关系性数据库:
	MySQL:轻量关系数据库,开源免费的
	Oracle:大型面向对象的关系型数据库,功能十分强大,商业软件。
	SQL Server:C++、C#, .net,商业
	SQLite:
非关系型数据库:
Redis:基于键值对的,内存型数据库。快
MongoDb:基于键值对的。

数据库安装

MySQL:

安装MySQL程序
配置MySQL服务:系统服务中可以看到
命令行工具
可视化的客户端工具:
	Navivat

命令行

SQL语句不区分大小写
连接数据库

mysql -u用户名 -p密码

显示当前服务下的所有数据库

show databases;

切换数据库

use 数据库名;

展示当前数据库下的所有表

show tables;

启动和停止服务:使用的是windows的命令net
启动服务

net start 服务名

停止服务

net stop 服务名

MySQL的数据类型

1)数值

tinyint
smallint
int
bigint

  • 与java中的byte、short、int、long一致

float
double
decimal #表示的是精确值——BigDecimal

2)字符串

char 设置长度,有自动补充的功能
varchar
tinytext //不需要指定长度
text
longtext//不需要指定长度

3)时间日期

Date 年月日
Time 时分秒
Datetime 年月日时分秒
Timestamp 时间戳

4)二进制

binary
blob
tinyblob
longblob

SQL语句

DDL

数据定义语言

数据库

  1. 创建数据库

     create database 数据库名;
    
  2. 删除数据库

     drop database 数据库名;
    
  3. 查看数据库

     show databases;
    
  4. 切换数据库

     use 数据库名;
    

数据表

数据表的曾删改查

  1. 创建

     create table 表名(
     ## 列、属性  定义类似于Kava定义一个变量
     列的名字 数据类型(长度,精度) 约束条件,
     ···,
     列名 数据类型(长度,精度) 约束条件
     };
    
  2. 查看
    查看当前库中所有表

     show tables;
    

    查看表结构

     desc 表名;
    
  3. 修改

     alter 表明 修改操作;
     	1)添加字段
     		alter table 表名 add 字段名 数据类型(长度,精度) 约束;
     	2)删除字段
     		alter table 表名 drop 字段名;
     	3)修改字段
     		
     		alter table 表名 change 旧字段名 新字段名;
     		alter table 表名 modify 字段名;
    
  4. 删除

     drop table 表名;
    

DML

数据管理语言,负责对数据表的增、删、改
数据表:分为列和行
列:字段Filed
行:记录row

insert into 表名(字段列表)  value/values(值列表);
例如:insert into score(id,name,sex,age,score) value(1,'tom','男',18,90.5);

在这里插入图片描述

1)字段列表可以不用写,相当于把每一个都添加
2)字段列表中有些字段可以不写——自增主键、允许空的、默认值的
	alter table score modify id int auto_increment;
	alter table score modify score double(4,1) not null default 0;
3)批量添加多条记录都放在value/values 后面,每一条使用都好进行分隔。
	insert into score (name) value ('James'),('Lucy'),('Merry');

delete from 表名 where 条件;
1)当有where子句时,只有符合条件的记录才会被删除。
2)当没有where时,所有记录都会被删除
3)当删除之后,自增主键还会延续之前的值

truncate 表名:将表重构,相当于将表删除,再重新创建。
与delete的区别
1)truncate是重构表,delete是删除记录,如果要删除所有的记录truncate会更快。
2)trancate只能删除所有,delete可以删除部分。
3)truncate自增主键会归零,delete还会沿用之前的值。
4)truncate不能回滚,delete可以回滚。

回滚:
在这里插入图片描述

数据管理语言

update 表名 set 字段=值 where 条件;

DQL

数据查询语言

DCL

数据控制语言

权限

Navicat

查询

简单查询

  • 基本语法

     select 字段列表 
     from 表名
     where 条件 
     group by 字段列表 
     having 条件 
     order by 字段列表 desc/asc 
     limit m,n
    
  • 最简单的查询

     select * from 表名;
     *:通配符,代表表中所有字段
     
     - 筛选字段:
     select 字段1,字段2 from 表名;
     
     - 字段加别名(as可省略)
     Select name as '姓名'  from 表名;
    
  • where字句
    从表中筛选记录

  1. 比较运算符 >、>=、<、<=、=、!=、<>
    select * from score where age <20;
  2. 逻辑运算符 and、or、not
  3. 控制判断 is null、is not null
  4. 模糊查询 like ‘表达式’
    %:代表任意个,任意字符
    _:代表一个任意的字符
  5. 范围
    between …and…
    相当于 >=a and <=b
  6. 集合
    in (1,2,3,4,5)
    not in()
  • 分组
  1. 聚合函数
    多条记录在聚合时,会变成一条记录。
聚合函数作用特点
count()统计数量字段名【不会计算null】、* 、1 【代表查询结果的第一列,统计时最快】
sum()求和
avg()求平均值忽略null值
max()求最大值
min()求最小值
  1. 分组
    根据查询结果中 ,对指定字段值相同的记录,分成一组,合并成一条。

     distinct:合并相同的字段
     group by 字段名1,字段名2;
     group by 字段的下标;【下标从1开始】
    
  2. 分组与聚合函数
    对分组后的每一组进行聚合

  • having
    对分组后的数据进行筛选。
    where对分组前的数据进行筛选

where与having的区别

  1. 语法:where要写在group的前面;having要写在group by的后面。
  2. 执行时间:where在从表中提取记录时进行执行,在分组之前。Having在groupby
    执行之后执行
  3. 聚合函数:where不能使用聚合函数;having可以使用聚合函数。
  • 排序order by
    让查询结果按照指定的字段或升序或降序进行排列。

order by 排序字段 asc/desc
默认升序
每一个字段的排序规则必须单独指定
排序字段也可以使用字段下标

  • limit
    经常用于数据的分页操作

      limit m;取前m条
      limit m,n;//从m开始取,取n条
      【m从0开始】
    

限制数量

子查询

子查询:在一个SQL语句中,包含了另一个Select语句。
增删改查中都可以只用子查询。

  • select
    select (字段列表) from 表 where …()子查询

查询成绩比jack高的人

select * from score where score >(select score from score where name=''jack);

 insert iinto 表名 values(子查询);
 insert into 表名(字段列表) select (字段列表) from 表2;
  • delete
    delete from 表 where …(子查询)
  • update
    update 表名 set 字段=值,字段=值 where …(子查询)
  • select
  1. where 字段 比较运算符 子查询

     子查询只可有一个字段
     子查询只可有一个结果
    
  2. where in /not in (子查询)

     字段中只能有一个字段
    
  3. where exists / not exists (子查询)

     存在
     select * from score  where exists (select * from class where id=score.class_id);
     先执行父传下,每筛选一条记录都会单独执行一次子查询,效率会很低
     通常可以转换成in或者是not in的。
    
  4. where 字段 比较运算符 any/all(子查询)

     any:只需要子查询中的任意一条记录满足比较的运算符,即成立。
     all:所有的子查询的记录都要满足比较运算符,才成立。
    
  • 作为表

    select * from (子查询) as 别名;

  • 作为筛选的字段

      select (子查询)
    

    在这里插入图片描述

  • 拼接
    行拼接 union | union all 重复的出现
    union:会合并相同的记录
    union all:不会合并相同的记录
    两者列的数量必须相同
    在这里插入图片描述

连接查询

多表连查

笛卡尔积

select * from 表1,表2;
在这里插入图片描述

内连接

inner join/join
select * from 表1 inner join 表2 on 1.id=2.id;
在这里插入图片描述
效果与笛卡尔积是一样的,只有符合连接条件的记录,才会出现在查询的结果中。

外连接

有一个主表,一个从表
主表中的每一条记录,都会出现在查询结果中。
如果主表中的记录,在从表中没有记录,此时将以null进行填充

  1. 左外连接 left outer join
    左表是主表

     select * from table1 left [outer] join table2 on
    
  2. 右外连接 right outer join
    右表是主表

  3. 全外连接 【MySQL中不支持,SQLServer中支持,MySQL中有limit,SQLServer没有,但有top】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值