IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL基础 -> 正文阅读

[大数据]MySQL基础

MySQL基础

一、SQL基本分类

1、 DDL 数据定义语言:对数据库的创建和删除 以及对数据库表的创建删除和修改 关键字:create、drop
2、 DML 数据操作语言:对数据库表中数据的增 删 改 关键字:insert、delete、update
3、 DQL 数据查询语言:对数据库表中数据 查询 关键字:select
4、 DCL 数据控制语言:指定用户 分配权限 关键字:grant、revoke
5、 事务

二、常用SQL语句

在这里插入图片描述

DDL 数据定义语言

一、 库的基本操作
    1. 查看所有数据库
   	 show databases;
    2. 创建数据库
   	 create database [if not exists] 库名;
    3. 删除数据库
   	 drop database [if exists] 库名;
    4. 选中库
   	 use 库名;
    5. 查看创建数据库语句
     show create database 库名;
     
二、 表的操作
    1. 查看所有表
        show tables;
    2. 创建表
        create table if not exists 表名(列名 类型 【约束】,列名 类型 【约束】,....);
    3. 删除表
        drop table if exists 表名;
    4. 查看表结构 
        desc 表名;
    5. 查看创建表语句
        show create table 表名;
    6. 修改表
    	改表名: Alter table 表名 Rename to 新表名;
    	改列名: Alter table 表名 change 原列名 新列名 类型;
    	改类型: Alter table 表名 modify 列名 新类型;
    	添加列:  Alter table 表名 add 列名 类型;
    	删除列: Alter table 表名 drop 列名;

DML 数据操作语言

插入:
	insert into 表名 values(1,值2...);
	insert into 表名(1,列2...) values(1,值2...);
	insert into 表名(1,列2...) values(1,值2...)(1,值2...)... ;
	
修改:
	update 表名 set1=值,列2=值,...[where 条件];
		有where:修改筛选后的数据
		没有where:修改所有数据
        
删除:
	delete from 表名 where 条件;

删除所有:
	delete from 表名;
	truncate table 表名;
	
`【面试题1】
	简述delete删除和truncate删除的区别
		1. delete删除可以加where条件,truncate不可以加where条件
		2. delete支持事务,truncate不支持事务
		3. delete逐行删除,truncate删除整个表,再创建一个新表【truncate删除效率高】			
		4. delete删除后,自增长列从断点开始,
		   truncate删除后,自增列长从1开始`

DQL 数据查询语言

1、基础查询
	select 查询列表 from 表名;
	select * from 表名;
	select 查询列表 from 表名 where 条件;					
	select 查询列表 from 表名 where 条件 order by 排序列表;[asc升序(默认)  desc降序]
	select `distinct` 查询列表 from 表名; #去重
    
2、分页查询	
	select * from 表名 where 条件 limit offset(偏移量),size(查询个数);
    公式:offset=(page - 1)*size

3、连接查询
	内连接
    	隐式:select 查询列表 from1 别名1,表2 别名2... 
        	 where 连接条件 
             and 分组前筛选 group by 分组字段
             having 分组后筛选 
             order by 排序字段 limit 偏移量,个数;
             
        显式:select 查询列表 from1 别名1 [inner] join 表2 别名2... on 连接条件;
        
    外连接【查询主表所有数据】
    	select 查询列表 from1 别名1
        left|right [outer] join 表2 别名2
        on 连接条件 where 分组前筛选 group by 分组字段 having 分组后筛选
        order by 排序字段 limit 偏移量,个数;
        
          `查询结果 = 内连接 + 主表有,单从表没有`
          left:左边为主表
          right:右边为主表
 
 4、子查询(查询效率较低)
 	select(子查询)  from(子查询)  where(子查询);
	特点:
    	1、优先执行
        2、必须在小括号()内
        3、单列:结果只有1个,搭配 = > < >= <= <>
           多列:结果有多个,搭配 in、not in、any、all
	
`【面试2】:select语句书写顺序:
		select 查询列表
		  from 表名
		  where 条件
		  group by 分组字段
		  having 条件
		  order by 排序字段
		  limit 偏移量,个数;`

在这里插入图片描述

DCL 数据控制语言

查看当前数据库所有用户:
	select * from mysql.user;
创建新用户,默认无权限:
	create user '用户名' @'%|localhost' identified by '密码';
	%:支持远程登录
	localhost:本地登录
为用户分配权限:
	grant 权限[select insert update delete] on 数据库.表名 to '用户名' @'%|localhost'
取消用户权限:
	revoke 权限 on 数据库.表名 from '用户名' @'%|localhost';
删除用户:
	drop user '用户名' @'%|localhost';
查看用户权限:
	show grants for '用户名' @'%|localhost';

三、数据类型和变量

数据类型:

  ① 整型:tinyint/smallint/int/bigint    等同于 java 中  byte short int long
    
  ② 浮点型:float double

  ③ 字符型
        varchar(n)  变长字符串   n必选  保存字符最大个数        性能低
        char(n)	    定长字符串    n可选 默认为1 保存字符最大个数   性能高
        text        长文本
        char 最多存放255个字符
        varchar最多可以存放65532个字符


  ④ 日期
        date       日期 年月日  
        time       时分秒

        datetime   日期 年月日时分秒   8 个字节  1900  9999
                2020-10-15 11:43:12
        timestamp  时间戳  4个字节   1970开始 2038年

【面试题3】:datetime和timestamp的区别?

datetime和timestamp都可以表示YYYY-MM-DD HH:MM:SS的数据,区别:
	1、大小不同
		datetime占8个字节
		timestamp占4个字节
	2、范围不同
		datatime:1000-01-01 到 9999-12-31
		timestamp:1970-01-01 到 2038-01-19
	3、时区
		datetime存储和时区无关
		timestamp存储和时区有关

变量:

全局变量:
	声明、修改:set @变量名 = 值;
	查看:select @变量名;

局部变量:
	声明:Declare 变量名 类型 [default 值];
	修改:set 变量名 = 值;
	查看:select 变量名;

四、mysql的常见约束

自增标识【不是约束】:auto_increment

常见约束:
	非空约束:not null		不能为null
    唯一约束:unique			不能重复,支持多个null
    主键约束:primary key	不能重复,且不能为null。【本质是索引,提高查询效率】
    默认约束:default		指定默认值
    外键约束:foreign key	限定两个表的关系【`同一数据库,外键名唯一`】

约束操作:
	建表时操作:
    	外键约束:constraint 索引名 foreign key(外键列) references 主键表(主键列)
		非外键约束:类型后加约束即可
    建表后操作:
    	主键、唯一: Alter table 表名 add|drop 约束名(字段名);
        非空、默认、自增:
        外键:

五、常见函数

1、单行函数

length():获取长度
lower():转小写
upper():转大写
concat(str1,str2,...):凭借字符串
replace():替换
trim():去掉左右两侧的空格
lpad(str,len,padstr):左填充
rpad(str,len,padstr):右填充
	  str:原字符
	  len:长度
	  padstr:填充的字符
substring(str,index,len):截取字符串
	  index:起始索引
	  len:指定长度

2、日期函数

now():当前时间
year(now()):当前年份
month(now()):当前月份
day(now()):当前天
Datediff(expr1,expr2):两个日期之间的天数差
data_add(expr1,值,单位):查询未来时间
data_sub(expr1,值,单位):查询过去时间

3、多行函数【分组函数、聚合函数】

sum(字段):求和
avg(字段):平均值
max(字段):最大值
min(字段):最小值
count(字段):非空个数

`【面试4】where 和 having 的区别?
	where:行过滤,在分组order by 前面,不能和分组函数联用
	having:组过滤,在分组order by 后面,可以和分组函数联用`

4、数学函数

ceil() 向上取整
floor() 向下取整
round() 四舍五入
abs()  取绝对值
rand() 生成随机数 [0,1)

六、流程控制

1、if结构
 第一种:
 	if(布尔表达式,分支1,分支2);【类似于Java中的三目运算符】
	  	  若布尔表达式为true,返回分支1
	  	  若布尔表达式为false,返回分支2
第二种:
	Begin
		if 条件1 then 语句1;
	elseif 条件2 then 语句2;
	...
	[else 语句n]
	End if
	End
	  
2、case结构: 
	case
		when 条件1 then 值或表达式1
		when 条件2 then 值或表达式2
		...
	else 值或表达式
	end

3、while循环结构:
	Begin
	while 循环条件 do
		循环体
	End while
	End
	

七、TCL 事务控制语言

 事务:
 	完成某个功能的整个最小执行单元,要么都发生,要么都不发生
 	
 分类:
 	隐式事务:没有明显的开启和结束标记,如insert、delete、update等
 	显式事务:有明显的开启和结束标记
 	
 事务的ACID特性:
 	原子性:不可分割,要么都发生,要么都不发生
 	一致性:整个事务过程中,数据保持一致
 	隔离性:事务与事务之间,互不干扰
 	持久性:数据持久化保存
 	
 创建事务的步骤:
 	1、禁用自动提交		set auto_commit = 0;
 	2、开启事务			 start  transaction;
 	3、编写事务流程		sql 语句;
 	4、结束事务(提交|回滚)commit|rollback;
 
 事务的隔离级别:
 	read uncommitted	读未提交	脏读、不可重复读、幻读
 	read committed		读已提交	不可重复读、幻读
 	repeatable read[默认]可重复度	   幻读
 	Serializable		串行化
  查看隔离级别:select @@tx_isolation;
  设置隔离级别:set session(当前窗口)|global(所有) transaction isolation level 隔离级别;

八、视图View

1、概念:
	虚拟表,和普通表一样使用。简化查询过程,提高数据安全性。
	只保存SQL逻辑(select语句),不保存查询结果(数据)。
	
2、作用
	① 防止未经许可的用户访问敏感数据,确保数据安全性
	② 封装SQL语句,简化查询过程
	③ 视图可对用户屏蔽真实表结构
	
3、语法
	创建视图: create view 视图名 as select语句;
    查询视图: select * from 视图名;
    查看视图结构: desc 视图名;
    修改视图: Alter view 视图名 as SQL语句;
    删除视图: Drop view 视图名;

4、视图和表的比较
		  创建			是否占用物理空间		    使用
视图   create view		 只保存SQL逻辑	   一般用于查询,不用于增删改
表	  create table		  保存了真实数据	  增删改查

九、存储过程

概念:
	类似于Java中的方法,存储预编译的SQL语句集,便于外部程序调用。
	
优点:
	1、提高代码复用性
	2、安全性高,可以屏蔽基础表,只对外提供存储过程相关权限
	3、存储过程只在创建时编译一次,而sql语句每次使用都要编译
	4、访问多张表时,sql语句需要多次连接数据库,而存储过程只需要连接一次
	
缺点:
	移植性差、调试不方便
	
语法:
	1、创建:
		create procedure 存储过程名(参数类型[in|out|inout] 参数名 数据类型,...)
		Begin
			存储过程体;(SQL语句集)
		End
		
		【说明】 in:输入参数,调用者向存储过程存入值
				out:输出参数,存储过程向调用者返回值
				inout:输入输出参数,既传入,也能返回
				BEGIN ... END: 存储过程开始和结束符号 
	2、调用:Call 存储过程名(实参列表);
	3、删除:Drop procedure 存储过程名;

十、触发器

概念:
	监视某种情况,并触发某种操作,是与表事件相关的特殊存储过程。
    不是程序调用,也不是手工启动,而是由事件触发(insert、delete、update)

语法:
	1、创建:  create trigger 触发器名 触发时机[before|after] 触发事件[insert|delete|update] 
		      on 表名 for each row
              Begin
           	    执行语句列表;
              End
    2、查看:  show triggers;
    3、删除:  Drop trigger 触发器名;

关于new和old:
	在insert型触发器中,new表示Before或After的新数据
    在delete型触发器中,old表示Before或After的原数据
    在update型触发器中,old表示原数据,new表示新数据

十一、索引【优化数据库查询的机制】

分类:
	普通索引:仅加速查询
	唯一索引:加速查询 + 列值唯一(可以有null) 
	主键索引:加速查询 + 列值唯一(不可以有null)
	组合索引:多列组成一个索引

语法:
	1、创建
		普通索引:create index 索引名 on 表名(字段名);
		唯一索引:create unique index 索引名 on 表名(字段名);
		组合索引:create index 索引名 on 表名(字段名1,字段名2,...);
	2、查看:  show index from 表名;
	3、删除:  Drop index 索引名 on 表名;

注意事项:
	1、不在索引上做任何操作(计算、函数、类型转换等),否则会导致全表查询,索引失效
	2、使用不等于(!=或<>)时,索引失效,全表查询
	3、is not null无法使用索引,但is null可以使用
	4、like以通配符开头,索引会失效.('%abc...')

列值唯一(可以有null)

主键索引:加速查询 + 列值唯一(不可以有null)
组合索引:多列组成一个索引

语法:
1、创建
普通索引:create index 索引名 on 表名(字段名);
唯一索引:create unique index 索引名 on 表名(字段名);
组合索引:create index 索引名 on 表名(字段名1,字段名2,…);
2、查看: show index from 表名;
3、删除: Drop index 索引名 on 表名;

注意事项:
1、不在索引上做任何操作(计算、函数、类型转换等),否则会导致全表查询,索引失效
2、使用不等于(!=或<>)时,索引失效,全表查询
3、is not null无法使用索引,但is null可以使用
4、like以通配符开头,索引会失效.(’%abc…’)



在这里插入图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-01-29 23:09:14  更:2022-01-29 23:09:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 14:39:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码