MySQL知识手册
文章平均质量分 70
MySQL知识手册
wangyanglongcc
数仓工程师,多年数据处理、分析经验。擅长数仓ETL,数仓模型设计建设。
对微软云产品较为熟悉,如Azure Data Factory,Azure Databricks,SqlServer等。
对Python,Sql,Excel等较为熟悉。
展开
-
备份-mysqlpump
mysqlpump备份与mysqldump相似,但它提供了一些其他功能,常用的有以下几种。并行备份在备份的时候可以指定线程的数量,从而起到加速备份的作用。如mysqlpump --default-parallelism=4 > full_backup.sql甚至可以指定备份每个数据库的线程数,在使用的时候可以对较大的数据库多分配些线程数。mysqlpump --parallel-schemas=3:db1 --parallel-schemas=2:db2,db3 --default-pa原创 2020-07-19 22:25:52 · 366 阅读 · 0 评论 -
备份-mysqldump
备份时需要先指定用户名和密码,然后再接其他参数mysqldump -uroot -pxxxx完整备份所有数据库语法:mysqldump --all-databases > 导出文件名mysqldump --all-databases > all_databases.sql备份指定数据库语法:mysqldump --databases + 数据库名 > 导出文件名mysqldump --databases employees > employees.sql原创 2020-07-19 22:25:00 · 115 阅读 · 0 评论 -
MySQL的系统参数文件读取优先级
Linux/etc/my.cnf -> /etc/mysql/my.cnf -> /usr/local/mysql/etc/my.cnf -> ~/.my.cnfWindowsC:\WINDOWS\my.ini -> C:\WINDOWS\my.cnf -> C:\my.ini -> %MySQL安装目录%\my.ini -> %MySQL安装目录%\my.cnf如果这几个配置文件里都有一个共同参数,那么MySQL会以读取到的最后一个配置文件的参数为准。原创 2020-07-19 21:39:52 · 237 阅读 · 0 评论 -
MySQL中带有自增键,删除部分数据后,再将MySQL重启后,自增键是继续编还是重新编
如果表的类型是MyISAM,则会在现有的基础上继续编。因为MyISAM表会把自增主键的最大ID记录到数据文件里,重启MySQL自增主键的最大ID也不会丢失。如果表的类型是InnoDB,则会重新编。因为InnoDB只是会把自增主键的最大ID记录到内存中,所以重启数据库或者对表进行OPTIMIZE操作,都会导致最大的ID丢失。如一张表里有自增ID主键,往里面INSERT了20条数据后,删除第13,14,15条记录后,再把MySQL重启,再INSERT一条记录,则当表的类型是MyISAM时,这条记录的ID是2原创 2020-07-19 21:23:55 · 879 阅读 · 2 评论 -
MySQL中char和varchar有什么区别
char是一种固定长度的类型,varchar是一种可变长度的类型。char列的长度固定为创建表时的长度,其范围为0~255。当保存为char类型时,在它们右边填充空格以达到指定的长度。当检索到char值时,尾部的空格被删除掉。在存储或检索的过程中不进行大小写转换。varchar列中的值为可变长字符串,其范围为0~65535。varchar的最大有效长度由最大行大小和使用的字符集确定。对于MyISAM表,推荐char类型;对于InnoDB表,推荐varchar类型。另外,在进行检索的时候,若列值的尾.原创 2020-07-19 21:16:27 · 570 阅读 · 0 评论 -
MySQL计算连续3天登陆的用户
解题思路根据user_id对用户登陆日期进行开窗分组排序,再用登陆日期减去序号rn,如果连续的话,登陆日期减去序号的值应该是相同的。开始解题创建数据集USE demo;DROP TABLE IF EXISTS login3days;CREATE TABLE login3days(user_id varchar(20),login_date date);INSERT INTO login3days VALUES ('a','2020-07-01'),('a','2020-07-02'),('原创 2020-07-12 00:22:03 · 6452 阅读 · 3 评论 -
计划任务(事件)
计划任务(事件)与Linux服务器上的cron,Window的Schedule一样,MySQL中的事件(EVENTS)是用来在指定的时间,处理计划任务的。在开始使用EVENTS之前,要确保事件调度线程是启用的,如果没有启用,通过以下命令进行启用。默认是启用的。set global event_schedule = ON;1. 创建计划任务如每天像表demo.demo中插入一条数据drop event if exists insert1line_everyday;delimiter $$ --原创 2020-07-07 23:21:09 · 552 阅读 · 0 评论 -
触发器
触发器用于在触发器事件之前或之后激活某些内容。概念触发器Trigger是数据库提供给数据库管理员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,是用户定义在表上的一类由事件驱动的特殊过程。触发器的执行不是由程序调用,也不是由手工启动,而是由事件来触发的。其中,事件是指用户对表的增INSERT、删DELETE、改UPDATE等操作。触发器经常被用于加强数据的完整性约束和业务规则等。触发器可以是INSERT、DELETE或UPDATEINSERT:无论何时通过INSERT、REPLA.原创 2020-07-07 00:36:54 · 481 阅读 · 0 评论 -
函数
就像存储过程一样,我们也可以创建函数。两者主要的区别在于,函数应该有一个返回值,并且可以在SELECT中调用。通常创建函数是为了简化复杂的计算。创建方法使用 CREATE FUNCTION + 函数名 进行创建如DROP FUNCTION IF EXISTS get_sal_level; -- 如果函数已经存在则删除DELIMITER $$ -- 更改结束分隔符为$$CREATE FUNCTION get_sal_level(emp int) RETURNS VARCHAR(10)DET原创 2020-07-06 23:39:12 · 165 阅读 · 0 评论 -
存储过程
假设你需要在数据库中执行一系列的SQL语句,那么可以将所有的语句封装到单个程序中,并在需要时调用这个程序,而不是每次发送所有的SQL语句。存储过程处理的是一组SQL语句。概念存储过程是用户定义的一系列SQL语句的集合,实际特定表或其他对象的任务,用户可以调用存储过程,而函数通常是数据库已经定于的方法,它接收参数并返回某种类型的值,并且不涉及特定用户表。存储过程用于执行特定的操作,可以接收输入参数、输出参数,返回单个或多个结果集。在创建存储过程时,既可以指定输入参数IN,也可以指定输出参数OUT,通.原创 2020-07-06 23:07:48 · 535 阅读 · 0 评论 -
索引的使用原则
建议 在WHERE子句或者连接条件经常引用的列上建立索引,特别是大表的字段,应该建立索引。 经常出现在关键字GROUP BY | ORDER BY | DISTINCT后面的字段,最好建立索引。 表的主键、外键必须建立索引。 创建了主键和唯一性约束后会自动创建唯一索引。 如果单字段查询很少甚至没有,那么可以建立复合索引;否则考虑单字段索引。 如果复合索引中包含的字段经常单独出现在WHERE子句中,那么仔细考虑其必要性,考虑减少复合的字段。 建议不(原创 2020-07-06 00:46:03 · 217 阅读 · 0 评论 -
索引的概念及其优缺点
概念数据库中索引(index)的概念与目录的概念十分类似。如果某列出现在查询的条件(where)中,而该列的数据是无序的,那么查询时只能从第一行开始一行一行地匹配。创建索引就是对某些特定列中的数据排序,生成独立的索引表。当在某列上创建索引后,如果该列出现在查询条件中,那么数据库系统会自动地引用该索引。先从索引表中查询出符合条件记录的ROWID,由于ROWID是记录的物理地址,因此可以根据ROWID快速地定位到具体的记录。当表中的数据非常多时,引用索引带来的查询效率非常可观。在处理一个请求时,数据库可原创 2020-07-06 00:45:27 · 1145 阅读 · 0 评论 -
事务的隔离级别
隔离级别当多个线程都开启事务操作数据库中的数据时,数据库系统要能进行隔离操作,以保证各个线程获取数据的准确性,所以对于不同的事务,采用不同的隔离级别会有不同的结果。如果不考虑事务的隔离性,则会发生以下情况: 现象 简介 举例 Dirty Read脏读 一个事务读取了已被另一个事务修改,但尚未提交的数据。当一个事务正在多次修改某个数据,而这个事务中这多次的修改都还未提交,这时另一个并发的事务来访问该数据时,就好原创 2020-07-05 21:24:38 · 97 阅读 · 0 评论 -
事务的ACID特性
名称 简介 举例 Atomicity原子性 所有的SQL语句要么全部成功,要么全部失败,不会存在部分更新。 假设有以下场景,A转账100元给B。这里有两个动作:一是A账号减少100元,二是B账号增加100元,这两个动作不可分割。 Consistency一致性 事务只能以允许的方式改变受其影响的数据。 假设A和B两者的钱加在一起一共100元,那么无论A和B之间如何转账,转几次账,原创 2020-07-04 23:19:21 · 115 阅读 · 0 评论 -
Oracle|MySQL|SQL Server的事务隔离级别
支持的隔离级别及默认值 Oracle MySQL SQL Server 支持 Read Committed提交读 Serializable可串行化 Read Uncommitted未提交读 Read Committed提交读 Repeatable Read可重复读 Serializable可.原创 2020-07-04 22:59:08 · 231 阅读 · 0 评论 -
视图
视图是一个基于SQL语句的结果集的虚拟表。它像一个真正的表一样具有行和列,在查询的时候与表基本没有差异。但它提供了两点好处:一是隐藏了SQL的复杂性,二是更重要的一点,它提供了额外的安全性。概念视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口,它不同于基本表,是一个虚拟表,其内容由查询定义。在数据库中,存放的知识视图的定义而已,而不是存放数据,这些数据仍然存放在原来的基本表结构中。只有视图在使用的时候,才会执行视图的定义,从基本表中查询数据。视图一般用于查询。作用 隐藏了数据的复杂性原创 2020-07-04 20:49:13 · 157 阅读 · 0 评论 -
分组统计
分组统计最常跟聚合函数COUNT、SUM、AVG、MIN、MAX一起使用。SUM、AVG、MIN、MAXselect emp_no ,SUM(salary) AS salary_sum ,AVG(salary) AS salary_avg ,MIN(salary) AS salary_min ,MAX(salary) AS salary_max from salaries where from_date > '2002-01-01' group by emp_no lim原创 2020-06-17 23:54:55 · 512 阅读 · 0 评论 -
简单查询
1. 查询所有列的数据用*代表所有列。select * from 表名2. 选择列select 字段1,字段2,字段3… from 表名3. 选择行等值select … from 表名 where 字段 = 条件如查询salaries表中salary超过10000的信息select * from salaries where salary > 10000;IN:检查一个值是否在一组值中如查询表employees中姓名为kangkang,jack原创 2020-06-17 23:38:21 · 281 阅读 · 0 评论 -
表-数据的导入与导出
1. 数据导入使用load data infile语句加载数据load data infile '/mysql_data/employee_name.csv' into table employee_namesfields terminated by ','optionally enclosed by '"'lines terminated by '\n';文件名可以是一个完整的路径,指定其确切的位置。如果是相对目录,则会被解析于相对于客户机程序启动的目录。这里建议使用绝对路径。如果文件原创 2020-06-16 23:23:10 · 381 阅读 · 0 评论 -
表-插入、更新、删除行
1. 插入数据通过使用insert语句,在表中添加记录。-- 通过显式地指明字段间的对应关系。insert ignore into `demo`.`customers`(first_name,second_name,country)values('Andy','Perera','China'),('Bob','Ven','Alustralia');-- 如果插入的字段个数与表字段完全对应,则不需要指定列名insert ignore into `demo`.`customers`values原创 2020-06-16 22:51:10 · 209 阅读 · 0 评论 -
表-创建、查看
1. 创建表创建表时,需要指定表名、字段名、字段的数据类型等信息。如create table if not exists `demo`.`first_table`(id int unsigned auto_increment primary key,first_name varchar(20),last_name varchar(20),country varchar(20)) engine=InnoDB;常用的数据类型如下:数字:tinyint , smallint , medium原创 2020-06-16 22:48:10 · 235 阅读 · 0 评论 -
库、表、视图-数据库
数据库创建数据库create database 数据库名-- 创建一个名为demo的数据库create database demo;如果库名中包含特殊字符,则需要用反标记字符(`)将其引起来。如创建一个叫做my.demo的数据库,由于.是特殊字符,则需要使用如下命令:create databse `my.demo`;通常情况下是不建议库名中包含特殊字符的。在不同数据库中切换use 数据库名use demo;use `my.demo`;查看当前连接到哪个数据库原创 2020-06-16 00:11:05 · 179 阅读 · 0 评论 -
配置本地免密登陆和用户&数据库提示
在$HOME目录下配置.my.cnf文件cd $HOMEpwdvi .my.cnf[client]host=localhostuser=${yourusername}password=${"yourpassword"}[mysql]prompt="[\\u] [\\d]>" # 在使用mysql时会显示当前用户和使用的数据库名,起到友好提示作用如[client]host=localhostuser=dbadminpassword="1234"[mysql]promp原创 2020-06-11 22:00:45 · 300 阅读 · 0 评论 -
配置mysql编码为utf-8
首先通过命令查看编码show variables like '%char%';mysql8.0开始默认编码就是utf8了,如果之前的版本不是utf8,则可以通过修改/etc/my.cnf中的配置信息,设置其编码方,统一为utf8。vim /etc/my.cnf在[client]、[mysql]、[mysqld]中添加以下信息[client]default-character-set=utf8[mysqld]character_set_server=utf8character_set_c原创 2020-06-11 21:59:47 · 1171 阅读 · 0 评论 -
mysql安全安装
在mysql安装完成后,使用mysql_secure_installation命令进行安全性安装设置mysql_secure_installationSecuring the MySQL server deployment.Enter password for user root:这里输入用户密码The ‘validate_password’ component is installed on the server.The subsequent steps will run with the exi原创 2020-06-11 21:59:00 · 936 阅读 · 0 评论 -
mysql自定义安装与初始化配置
自定义安装1. 从mysql官网下载安装包,点击这里跳转下载下载完成后,将文件上传到服务器root目录下。2. 创建mysql用户先创建mysql组,再创建mysql用户并添加到mysql组中。groupadd mysqluseradd mysql -r -g mysql# 验证用户组和用户id mysql3. 创建程序、数据存放目录mkdir /home/mysql/{program,data,conf} -pmkdir /home/mysql/data/mysqldata原创 2020-06-11 21:58:08 · 458 阅读 · 0 评论 -
mysql默认安装信息查询
1. mysql安装位置whereis mysqlwhich mysql/usr/bin/mysql才是mysql的安装目录。在/etc/my.cnf中也可以查看2. 数据存放位置show global variables like "%datadir%";3. 查看mysql字符编码show variables like '%char%';原创 2020-06-11 21:57:09 · 160 阅读 · 0 评论 -
重置root密码
1. 停止服务器的运行sudo systemctl stop mysqldps aux | grep mysqld |grep -v grep2. 使用–skip-grant-tables选项启动服务器sudo -u mysql /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --user=mysq...原创 2020-03-16 12:43:00 · 206 阅读 · 0 评论 -
直接修改用户密码
用法:ALTER USER 'username'@'ip' IDENTIFIED WITH mysql_native_password BY 'newpassowd'; FLUSH PRIVILEGES;如修改developer用户的密码,首先以root或管理员用户登录mysql,然后执行以下语句ALTER USER 'developer'@'*' IDENTIFIED WITH ...原创 2020-03-16 12:41:40 · 380 阅读 · 0 评论 -
创建管理员SUPER用户
在访问数据库时,为了获取较大的权限,有时候我们会直接使用root用户,但其实这是不应该的。而一般用户权限又可能不足,故我们需要创建一个管理员账户来管理服务器。1. 新建一个dbadmin用户create user 'dbadmin'@'%' identified with mysql_native_password by 'db@Admin123';2. ALL表示除GRANT权限之外...原创 2020-03-16 12:40:42 · 395 阅读 · 0 评论 -
查看和删除用户
查看用户select user,host from mysql.user;删除用户用法:drop user ‘username’@‘ip’;如删除developer用户drop user 'developer'@'%';可以看出用户developer被删除了。...原创 2020-03-16 12:39:32 · 151 阅读 · 0 评论 -
查看与撤销用户的授权
通过show grants for ‘username’@'ip’查看用户授权信息;通过revoke xxx from ‘username’@'ip’撤销用户权限。如:创建用户create user 'readonly'@'%' identified with mysql_native_password by 'Aa123456,';用户授权 grant select,delet...原创 2020-03-04 14:10:45 · 276 阅读 · 0 评论 -
锁定与解锁用户
如果发现账号存在问题,可以使用alter user xxx account lock将其锁定。锁定后的用户将无法进行任何操作。alter user 'readonly'@'%' account lock;然后我们从shell登陆时,会收到该账户已被锁定的报错信息。当确认账户没问题后,也可以解锁该账户。alter user 'readonly'@'%' account unlock;...原创 2020-03-04 14:11:06 · 800 阅读 · 0 评论 -
给用户授权
在开发工作中,有时候我们需要限制用户访问特定的数据库或表,或限制特定操作,如SELECT、INSERT、UPDATE等操作。在用户创建完成后,就需要对用户进行授权了。同时,为其他用户授权的先决条件是,当前用户具有GRANT权限。在初始化阶段,可以使用root用户进行授权,也可以先通过root用户创建管理员账户,再使用管理员账户来管理用户。用法:grant 权限 on db_name.table...原创 2020-03-04 14:06:50 · 1547 阅读 · 0 评论 -
创建用户
创建用户的语句基本格式为:create user if not exists ‘username’@‘ip’ identified with mysql_native_password by pwd创建仅本地localhost访问用户方法:create user if not exists ‘username’@‘localhost’ identified with mysql_na...原创 2020-02-26 19:13:09 · 1276 阅读 · 0 评论