sql 一张表某一个主键的第一条数据_【数据分析师 Level 1 】9.MySQL简介

本文介绍了MySQL数据库的发展历程、下载安装,详细讲解了数据库、数据库管理系统与SQL的关系,以及SQL的基本概念和分类。深入探讨了MySQL的数据类型、数据完整性、表的增删改查、索引和存储引擎。此外,还涵盖了SQL的DML和DQL操作,包括数据的添加、更新、删除和查询。最后,提到了MySQL客户端工具和存储引擎的选择。

主流的关系型数据库

  • Oracle :运行稳定,可移植性高,功能齐全,性能超群,适用于大型企业
  • DB2:速度快,可靠性好,适用于海量数据,恢复性极强,适用于大中型企业
  • MySQL:开源、体积小、速度快,适用于中小型企业
  • SQL server:全面高效、界面友好易操作,但是不跨平台,适用于中小型企业

MySQL发展历程

最早是由瑞典MySQL AB公司开发,仅供内部使用,2000年基于GPL协议开放源码,2008年MySQL AB公司被Sun 公司收购,2009年Sun公司又被Oracle公司收购,有了Oracle公司的技术支持,MySQL在2010年以后发布了多个版本,在各方面加强了企业级的特性。

MySQL 下载与安装

数据库、数据库管理系统和SQL之间的关系

5f4e3810a7b0586cf1fa11d0b3a89cd4.png
  • 数据库是长期存储在计算机内,有组织的,统一管理的相关数据的集合
  • 数据库管理系统是用于管理数据库的软件,它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性
  • SQL是一种结构化查询语言(Structure Query Language)它是国际化标准组织(ISO)采纳的标准数据库语言

SQL 分类

  • 数据定义语言DDL
    • 用来创建、修改、删除数据中的各种对象,包括数据库、表、视图等等
    • 用于创建,修改,删除数据库中的各种对象(表、视图、索引等),常用命令有CREATE,ALTER,DROP
    • 数据库的增删选查
      • 查看数据库:
show databases;
        • 系统数据库:sys 库:MySQL5.7 增加了 sys 系统数据库,通过这个库可以快速的了解系统的元数据信息。information_schema 库:提供了访问数据库元数据的方式。
        • 用户数据库
      • 创建数据库:
create database 数据库名称; 
      • 数据库名称不能与SQL关键字相同,也不能重复
      • 查看创建好的数据库:
show create database 数据库名称;
alter database test character set utf8;
      • 选择进入数据库:
use 数据库名称; use test;
      • 删除数据库:
drop database 数据库名称; drop database test;
      • 数据库基本结构:

e251f64b7259af800a53fdd32843274d.png
        • 数据库:组织、存储和管理相关数据的集合,同一个数据库管理系统中数据库名必须唯一
        • 表:由固定列数和任意行数构成的数据集,同一个数据库中表名必须唯一
        • 列:一个字段,同一个表中列名必须唯一
        • 行:一条记录
    • 数据表的增删改查
      • 创建表:
create table 表名(字段名1 数据类型1 [约束条件1],字段名2 数据类型2 约束条件2);
        • 建表之前要先选择进入数据库:
use test;
        • 建表时可以不指定约束条件,但是必须指定字段的数据类型
        • 表名不能与SQL关键字相同,同一个数据库下的表名不能重复
      • 查看创建好的表:
 show create table 表名; show create table emp;
      • 查看当前数据库中所有表:
 show tables;
      • 查看表结构:
desc 表名; desc emp;
      • 修改表:修改数据库中已经存在的数据表的结构
        • 修改表名:
alter table 原表名 rename 新表名;
        • 修改字段名:
alter table 表名 change 原字段名 新字段名 数据类型[ 约束条件];
        • 修改字段类型:
alter table 表名 modify 字段名 数据类型[ 约束条件];
        • 添加字段:
alter table 表名 add 新字段名 数据类型 约束条件;
        • 修改字段的排列位置
          • 将某个字段改为第一列:
alter table 表名 modify 字段名 数据类型[ 约束条件] first;
          • 将某个字段改到另一个字段后面:
alter table 表名 modify 要排序的字段名 数据类型[ 约束条件] after 参照字段;
        • 删除字段:
alter table 表名 drop 字段名;
        • 删除数据表:
 drop table 表名; drop table emp;
    • 数据类型
      • 数值型

505ad9481a1ef2796ecc795c9af33145.png
      • 字符串型

bd55fedd79ac5bcf7f20828bdf69aaee.png
      • 日期时间型

4aad48452cd117e3d682c71be19095d3.png
      • 常用数据类型
        • 字符串类型和日期时间类型都需要用引号括起来
        • int:4字节整数值
        • float:单精度浮点型,float(5,2)表示最多5位数,其中有两位小数
        • char:固定长度字符串型,如char(10),‘abc ’
        • varchar:可变长度字符串型,如varchar(10),‘abc’
        • text:长文本字符串型
        • date:日期型,‘yyyy-MM-dd’
        • time:时间型,‘hh:mm:ss’
        • datetime:日期时间型,‘yyyy-MM-dd hh:mm:ss’
    • 数据完整性
      • 主体完整性
        • 主键约束
          • 特点
          • 能够唯一地标识表中的一条记录
          • 非空不重复,要求主键列的数据必须是唯一的,并且不允许为空
          • 可以设置单字段主键,也可以设置多字段联合主键
          • 添加方法
create table 表名(字段1 数据类型 primary key,字段2 数据类型[,…]);
create table 表名(字段1 数据类型,字段2 数据类型[,…], primary key(主键字段));
create table 表名(字段1 数据类型,字段2 数据类型[,…], primary key(主键字段1, 主键字段2[,…]));
          • 删除方法
alter table 表名 drop primary key;
        • 唯一约束
          • 特点
          • 要求该列的值必须是唯一的
          • 允许为空,但只能出现一个空值
          • 添加方法
create table 表名(字段1 数据类型,字段2 数据类型 unique[,…]);
          • 删除方法
alter table 表名 drop index 唯一约束名;
          • 如果单个字段没有指定唯一约束名,则默认的唯一约束名为字段名。
          • 如果是多个字段组合为唯一约束时候,默认的唯一约束名为第一个字段的名称。
          • 如果指定了约束名,则删除的时候写约束名。
        • 自增字段
          • 特点
          • 指定字段的数据自动增长
          • 配合主键一起使用,并且只适用于整数类型
          • 默认从1开始,每增加一条记录,该字段的值会增加1
          • 添加方法
create table 表名(字段1 数据类型 primary key auto_increment,字段2 数据类型[,…]);
          • 设置自增字段的初始值
          • 设置自增字段的初始值:
Alter table 表名 auto_increment=n;
          • 删除方法
alter table 表名 modify 字段名 数据类型[ 约束条件];
      • 域完整性
        • 非空约束
          • 特点
          • 字段的值不能为空
          • 添加方法
create table 表名(字段1 数据类型,字段2 数据类型 not null[,…]);
          • 删除方法
alter table 表名 modify 字段名 数据类型[ 约束条件];
        • 默认约束
          • 特点
          • 指定某个字段的默认值,如果新插入一条记录时没有为默认约束字段赋值,那么系统就会自动为这个字段赋值为默认约束设定的值。
          • 添加方法
create table 表名(字段1 数据类型1,字段2 数据类型2 default 默认值[ ,…]);
          • 删除方法
alter table 表名 modify 字段名 数据类型[ 约束条件] ;
      • 参照完整性
        • 外键约束
          • 特点
          • 某一表中某字段的值依赖于另一张表中某字段的值
          • 主键所在的表为主表,外键所在的表为从表
          • 每一个外键值必须与另一个表中的主键值相对应
          • 添加方法
          • 先创建主键所在的主表,再创建外键所在的从表
creat table 表名(字段名1 数据类型1,字段名2 数据类型2,……, foreign key(字段名) references 主表(主键字段));
          • 删除方法
alter table 表名 drop foreign key 外键约束名;
          • 先删除从表,再删除主表。
          • 先删除外键约束,再删除表。
      • 用户自定义完整性
        • 检查约束
          • 特点:指定需要检查的限定条件
    • 视图
      • 视图是存储在数据库中的虚拟表,视图中不保存数据,内部封装了一条SELECT语句,数据来源于查询的一个或多个基本表。
      • 创建视图:
create view 视图名 as select 查询语句;
      • 查看视图结构:
desc 视图名;
      • 查询视图中的记录:
select 字段名1[,字段名2,...] from 视图名[ where 筛选条件];
      • 修改视图:
create [or replace or alter] view 视图名 as select 查询语句;
      • 删除视图:
drop view 视图名;
    • 索引
      • 索引的意义
        • 用于快速找出在某个字段中有特定值的行。
        • 如果不使用索引,MySQL必须从第一条记录开始检索表中的每一条记录,直到找出相关的行,那么表越大,查询数据所花费的时间就越多。
      • 索引的优缺点
        • 优点
          • 通过索引对数据进行检索,大大提高了数据的查询效率
        • 缺点
          • 创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加
          • 索引也需要占空间的,创建的索引太多,索引文件也会占用数据库的存储空间
          • 当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度
      • 索引的分类
        • 普通索引
          • 一个索引只包含一个字段
        • 唯一索引
          • 索引字段的取值不能重复,可以有空值,但空值也只能出现一次
        • 主键索引
          • 索引字段的取值不能为空,也不能重复
        • 组合索引
          • 一个索引包含多个字段
          • 只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用
        • 全文索引
          • 仅限MyISAM引擎,只能在CHAR,VARCHAR,TEXT类型的字段上使用
          • 通过关键字符,就能找到该字段所属的记录行
        • 空间索引
          • 仅限MyISAM引擎
          • 对空间数据类型的字段建立的索引,且要求索引字段的取值不能为空
      • 索引的操作
        • 创建索引:
create index 索引名 on 表名(字段名);
        • 自动创建索引
          • 在表中定义了主键约束时,会自动创建一个对应的主键索引
          • 在表中定义了外键约束时,会自动创建一个对应的普通索引
          • 在表中定义了唯一约束时,会自动创建一个对应的唯一索引
        • 查看索引:
show index from 表名;
        • 删除索引:
drop index 索引名 on 表名;
        • 创建索引的原则
          • 需要创建索引的情况
          • 主外键和唯一约束的字段自动创建索引
          • 频繁作为查询条件的字段应该创建索引
          • 查询中排序的字段应该创建索引
          • 查询中分组或统计的字段应该创建索引
          • 不需要创建索引的情况
          • 表中记录太少不需要创建索引
          • 需要频繁增删改的字段不适合创建索引
          • where子句中用不到的字段不需要创建索引
          • 重复值较多的字段不需要创建索引
  • 数据操作语言DML
    • 用来对数据库中的表进行更改操作,比如增加数据、删除数据、修改数据等
    • 添加数据
    • 字段名与字段值的数据类型、个数、顺序必须一一对应
      • 指定字段名插入:
insert into 表名(字段1[,字段2,…]) values(字段值1[,字段值2,…]), (字段值1[,字段值2,…])[,…]);
      • 字段列的数量和值的数量必须相同,且列和值要对应上
      • 不指定字段名插入:
insert into 表名 values(字段值1[,字段值2,…]), (字段值1[,字段值2,…])[,…]);
      • 需要为表的每一个字段指定值,并且值的顺序必须和数据表中字段定义时的顺序相同
      • 批量导入:
load data infile ‘文件路径.csv’into table 表名 fields terminated by ‘,' ignore 1 lines;
      • 路径中不能有中文,并且要用反斜杠
    • 更新数据
update 表名 set 字段名1=字段值1, 字段名2=字段值2,…;
      • 设置数据库安全权限:
 set sqlsafeupdates=0;
    • 删除数据
delete from 表名[ where 条件字段=条件值];
truncate 表名;
      • delete和truncate区别
        • delete可以添加删除条件删除表中部分数据,truncate只能删除表中全部数据。
        • delete删除表中数据保留表结构,truncate直接把表删除(drop)然后再创建一张新表,执行速度比delete快。
  • 数据查询语言DQL
    • 用来查询数据库表中的记录,由select 组成的查询语句块
    • 用来查询数据库表中的记录,基本结构:
SELECT <字段名> FROM <表或视图名> WHERE <查询条件>
      • 单表查询
        • 虚拟结果集
          • select语句执行后服务器会按照要求检索表中数据,并将检索结果发送到客户端,这个以表的形式展示出来的临时结果集,
          • 它是存放在内存中,不是在磁盘中的,执行其他操作之后这个结果集就没有了,所以它是临时存在的虚拟结果集,而不是一个真实的表。
        • 全表查询
          • 全表查询:
select * from 表名;
        • 查询指定列
          • 查询指定列:
select 字段1[,字段2,…] from 表名;
        • 查询不重复的数据
          • 查询不重复的数据:
select distinct 字段名 from 表名;
        • 设置别名
          • 当我们的列名或表名很长的时候,可以使用as关键字给一个列或者表添加别名,增强SQL语句的可读性。
          • 设置别名:
select 字段名 as 列别名 from 原表名 [as ]表别名;
        • 条件查询
          • 条件查询:
select 字段1[,字段2,…] from 表名 where 筛选条件;
          • 运算符
          • 算术运算符

3667505a0eda0b77871673de15536691.png
          • 比较运算符

fe2c6b5760028f1e939ec9f254b677b1.png
          • 逻辑运算符

f5752a408460dddb7019aafd89df7f8e.png
        • 空值查询
          • 空值查询:
select 字段1[,字段2,…] from 表名 where 空值字段 is[ not] null;
        • 模糊查询
          • 模糊查询:
select 字段1[,字段2,…] from 表名 where 字符串字段[ not] like 通配符;
          • 百分号(%)通配符:匹配0个或多个字符
          • 下划线(_)通配符:匹配一个字符
        • 聚合运算
          • 聚合运算:将多行数据进行聚集计算为一行
          • 聚合函数会对null以外的数据进行聚合运算

fa5b8707a3ec0e0c53af80dd0cc2dccb.png
        • 分组查询
        • 分组后筛选
        • 查询结果排序
        • 限制查询结果数量
        • select语句书写顺序
        • select语句执行顺序
      • 多表查询
        • 连接查询
          • 表之间关系
          • 一对一

099d2ea9266682d28a42507947ace27e.png
          • 一对多

28a4405d1ead78c0952e4bdd45bbfb4b.png
          • 多对多

72be9041e725231fc233de90168e4c45.png
          • 连接方式
          • 内连接
          • 按照连接条件连接两个表,返回满足条件的行

2c35a89946df0ffc7d685b893b1fe9b5.png
select 字段1[,…] from 表1[ inner] join 表2 on 连接条件;

968bccebe40c39962707d4e471a09c61.png
          • 左连接

3b014de0efd308df65e2aa167de8f891.png
          • 结果中除了包括满足连接条件的行外,还包括左表的所有行

8558d24d3e0a74cfb294c6e639e8129b.png
select 字段1[,…] from 表1 left join 表2 on 连接条件;
          • 右连接
          • 结果中除了包括满足连接条件的行外,还包括右表的所有行

fecb01a6905b6e650286814abf86df76.png
select 字段1[,…] from 表1 right join 表2 on 连接条件;

c7b0ae0bc962596b073dc7d2e0c1b5a7.png
          • 笛卡尔积
          • 假设集合A={a,b},集合B={1,2,3},则两个集合的笛卡尔积为{(a,1),(a,2),(a,3),(b,1),(b,2),(b,3)}
select 字段1[,…] from 表1,表2[,…];

da2c562b297ec16d171a83e2158d4054.png
          • 消除笛卡尔积:
select 字段1[,…] from 表1,表2[,…] where 筛选条件;
          • 逐行判断,相等的留下,不相等的排除

edb3f9dcb42380958a8fab2721b8486f.png
          • 消除笛卡尔积

41d24032954f3277ef7b61eec1a54576.png
          • 自连接
          • 连接条件
          • 等值连接
          • 通过设置表别名,将同一张表虚拟为多张表进行连接
          • 表1.key=表2.key
          • 不等值连接
          • 表1.key 比较 表2.key
        • 合并查询
          • 把多条select语句的查询结果合并为一个结果集

6b74d104bd8758d8742c90bd061f0560.png
          • 被合并的结果集的列数、顺序和数据类型必须完全一致
union去重:select 字段1[,字段2,…] from 表名 union select 字段1[,字段2,…] from 表名; 
select * from t1 union select * from t2;

f088a26f03de089fb497245dc73d4fa1.png
          • union all不去重:
select 字段1[,字段2,…] from 表名 union all select 字段1[,字段2,…] from 表名; 
select * from t1 union all select * from t2;

b0a0ea68df62ee8de3d0261c250dd663.png
      • 子查询
        • 一个select语句中包含另一个或多个完整的select语句
        • 子查询分类
          • 标量子查询:返回的结果是一个数据(单行单列)
          • 行子查询:返回的结果是一行(单行多列)
          • 列子查询:返回的结果是一列(多行单列)
          • 表子查询:返回的结果是一张临时表(多行多列)
        • 子查询常用操作符

ae3f55a2dfd76428076ea6d798f0e3e4.png
      • 常用函数
        • 字符串函数

fafad451e81be0cb1d8e127ab7a9b609.png
        • 数字函数

56f5b384e2f542035279eab3a4c88227.png
        • 日期时间函数

6bde4cef203e9027bd47f687ca24e082.png
        • 开窗函数

697e16a4d799db04199936f409b1cc29.png
      • 查询结果保存
        • 保存到一个新的表:
create table 新表名 as select 查询语句;
        • 保存为外部文件:
select 查询语句 into outfile 保存路径;
  • 数据控制语言DCL
    • 用来定义数据库的访问权限和安全级别
      用来定义数据库访问权限和安全级别,常用命令:GRANT,REVOKE

SQL 书写要求

SQL语句可以单行或多行书写,用分号结尾。
SQL关键字用空格分隔,也可以用缩进来增强语句的可读性。
SQL对大小写不敏感。
用#或-- 单行注释,用/* */多行注释,注释语句不可执行。

MySQL 客户端常用工具

  • MySQLd
    • MySQL 服务核心进程。在 linux 环境下,启动时会被 MySQLd_safe 调用。只有它成功启动, 数据库实例才能正常运作。
  • MySQLd_safe
    • MySQL 实例的安全启动脚本,在 unix 和 netware 中推荐使用 MySQLd_safe 来启动
    • MySQLd 服务器。MySQLd_safe 增加了一些安全特性,例如当出现错误时重启服务器并向错误日志文件写入运行时间信息。它是 MySQLd 的守护进程。
  • 命令行(CMD)
  • 图形化工具(IDE)
    • MySQL workbench
    • Navicat
    • SQLyog

修改密码

存储引擎

  • InnoDB:事务型数据库的首选引擎,也是MySQL的默认事务型引擎,支持事务安全表(ACID),支持行锁定和外键
    • 使用场景:由于其支持事务处理、外键、支持崩溃修复能力和并发控制。
    • 如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。
    • 如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。
  • MyISAM:在Web,数据仓储和其他应用环境下最常使用的存储引擎之一,拥有较高的插入、查询速度,但是不支持事务和外键
    • 使用场景:如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。
  • MEMORY:将表中的数据存储到内存中,未查询和引用其他表数据提供快速访问
    • 使用场景:如果需要该数据库中一个用于查询的临时表。
  • ARCHIVE:仅仅支持最基本的插入和查询,它使用zilib压缩率,在记录被请求时会实时压缩,所以它经常被用来当做仓库使用
    • 使用场景:由于高压缩和快速插入的特点Archive非常适合作为日志表的存储引擎,但是前提是不经常对该表进行查询操作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值