MySQL常用的命令

启动:net start mySql;

进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;

列出数据库:show databases;

选择数据库:use databaseName;

列出数据表:show tables;

显示表格列的属性:show columns from tableName;

建立数据库:source fileName.txt;

匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;

增加一个字段:alter table tabelName add column fieldName dateType;

增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;

多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;

增加一个管理员帐户:grant all on . to user@localhost identified by "password";

每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;

查询时间:select now();

查询当前用户:select user();

查询数据库版本:select version();

查询当前使用的数据库:select database();

create database name; 创建数据库
use databasename; 选择数据库
drop database name 直接删除数据库,不提醒
show tables; 显示表
describe tablename; 表的详细描述
select 中加上distinct去除重复字段
mysqladmin drop databasename 删除数据库前,有提示。
select version(),current_date; 显示当前mysql版本和当前日期
  • 删除student_course数据库中的students数据表
rm -f student_course/students.*
  • 备份数据库:(将数据库test备份)
mysqldump -u root -p test>c:\test.txt
  • 备份表格:(备份test数据库下的mytable表格)
mysqldump -u root -p test mytable>c:\test.txt
  • 将备份数据导入到数据库:(导回test数据库)
mysql -u root -p test<c:\test.txt
  • 修改mysql中root的密码
shell>mysql -u root -p
mysql> update user set password=password(”xueok654123″) where user=’root’;
mysql> flush privileges //刷新数据库
mysql>use dbname; 打开数据库:
mysql>show databases; 显示所有数据库
mysql>show tables; 显示数据库mysql中所有的表:先use mysql;然后
mysql>describe user; 显示表mysql数据库中user表的列信息);
  • 从已经有的表中复制表的结构
create table table2 select * from table1 where 1<>1;
  • 复制表
create table table2 select * from table1;
  • 对表重新命名
alter table table1 rename as table2;
  • 对表重新命名
alter table table1 rename as table2;
  • 修改列的类型
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
alter table table1 change employee_name legal_name varchar(36) DEFAULT NULL COMMENT '姓名';
//修改列employee_name的名字为legal_name ,而且把属性修改为varchar(36)
  • 增加字段
// 增加一个字段
alter table tabelName add column legal_name varchar(36) DEFAULT NULL COMMENT '姓名';
// 增加多个字段
alter table tabelName
add column legal_name varchar(36) DEFAULT NULL COMMENT '姓名',
add column employee_code varchar(36) DEFAULT NULL COMMENT '工号';
  • 删除字段
ALTER TABLE emp2 DROP NAME
  • 创建索引
alter table table1 add index ind_id (id);
create index ind_id on table1 (id);
//建立唯一性索引
create unique index ind_id on table1 (id);
  • 删除索引
drop index idx_id on table1;
alter table table1 drop index ind_id;
//删除外键约束
ALTER TABLE emp2 DROP FOREIGN KEY fk_emp_dept
//删除主键约束
ALTER TABLE emp2 DROP PRIMARY KEY pk_emp_dept
  • 联合字符或者多个列(将列id与":"和列name和"="连接)
select concat(id,':',name,'=') from students;
  • grant授权
//创建一个可以从任何地方连接服务器的一个完全的超级用户,但是必须使用一个口令something做这个
mysql> grant all privileges on . to identified by ’something’ with
//增加新用户格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”
GRANT ALL PRIVILEGES ON . TO IDENTIFIED BY ’something’ WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON . TO ” IDENTIFIED BY ’something’ WITH GRANT OPTION;
//删除授权
mysql> revoke all privileges on . from ”;
mysql> delete from user where user=”root” and host=”%”;
mysql> flush privileges;
//创建一个用户custom在特定客户端it363.com登录,可访问特定数据库
mysql >grant select, insert, update, delete, create,drop on fangchandb.* to custom@ it363.com identified by ‘ passwd’

数据库优化

  • 使用索引的缺点

1.减慢增删改数据的速度;

2.占用磁盘空间;

3.增加查询优化器的负担;

当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;

  • 分析索引效率

在一般的SQL语句前加上explain

分析结果的含义:

1)table:表名;

2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;

3)possible_keys:查询可以利用的索引名;

4)key:实际使用的索引;

5)key_len:索引中被使用部分的长度(字节);

6)ref:显示列名字或者"const"(不明白什么意思);

7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;

8)extra:MySQL的建议;

数据库优化

  • 使用较短的定长列

1.尽可能使用较短的数据类型;

2.尽可能使用定长数据类型;

好处

a)用char代替varchar,固定长度的数据处理比变长的快些;

b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;

c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;

d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;

  • 使用not null和enum

1.尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;

2.如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;

  • 使用optimize table

1.对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。

2.可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;

  • 使用procedure analyse()

可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;

第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;

select * from students procedure analyse();
select * from students procedure analyse(16,256);
  • 使用查询缓存

1.查询缓存的工作方式

第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。

2.配置缓存参数

变量:query_cache _type,查询缓存的操作模式

0:不缓存;

1:缓存查询,除非与select sql_no_cache开头;

2:根据需要只缓存那些以select sql_cache开头的查询;

query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。

  • 调整硬件

1.在机器上装更多的内存。

2.增加更快的硬盘以减少I/O等待时间。寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;

3.在不同的物理硬盘设备上重新分配磁盘活动。如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。

MySQL中的运算符

LEAST运算符

SELECT GREATEST(2,0),GREATEST('a','b','c'),GREATEST(10,NULL)
//返回值:2,c,NULL

语法格式为:LEAST(值1,值2,...值n),其中值n表示参数列表中有n个值。在有两个或多个参数的情况下,返回最小值;

由结果可以看到:

1.当参数中是整数或者浮点数时,LEAST将返回其中最小的值;

2.当参数为字符串时,返回字母中顺序最靠前的字符;

3.当比较值列表中有NULL时,不能判断大小,返回值为NULL

GREATEST运算符

SELECT LEAST(2,0),LEAST('a','b','c'),LEAST(10,NULL)
//返回值:0,a,NULL

语法格式为:GREATEST(值1,值2,...值n),其中n表示参数列表中有n个值。

在有两个或多个参数的情况下,返回最大值

由结果可以看到:

1.当参数中是整数或者浮点数时,GREATEST将返回其中最大的值;

2.当参数为字符串时,返回字母中顺序最靠后的字符;

3.当比较值列表中有NULL时,不能判断大小,返回值为NULL

REGEXP 运算符

SELECT 'ssky' REGEXP '^s','ssky' REGEXP 'y$' ,'ssky' REGEXP '.sky','ssky' REGEXP '[sg]',null REGEXP '[s]','s' REGEXP null;
//返回值:1,1,1,1,NULL,NULL

在SQLSERVER里是没有正则函数或者运算符的,MYSQL在这方面的确比较完善。用来匹配字符串,语法格式为:expr REGEXP 匹配条件,如果expr满足匹配条件,返回1;如果不满足,则返回0;

结果可以看到:

1.'^s'表示匹配任何以字母s开头的字符串,因此满足匹配条件,返回1;

2.'y$'表示匹配任何以字母y结尾的字符串,因此满足匹配条件,返回1;

3.'.sky'表示匹配任何以sky结尾,字符长度为4的字符串,因此满足匹配条件,返回1;

4.'^s'表示匹配任何以字母s开头的字符串,因此满足匹配条件,返回1;

5.'[ab]'表示匹配任何包含字母a或者b的字符串返回1;字符的范围可以使用一个'-',“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字

6.expr或匹配条件任意一个为NULL,则结果为NULL

特殊符号

INSERT INTO table_1(NAME) VALUES('\'')

下面的特殊字符需要在输入时加反斜线符号开头

输入单引号需要:'

输入双引号需要:''

输入反斜杠:

输入回车符:\r

输入换行符:\n

输入制表符:\tab

输入退格符:\b

字符串大小写转换

MySQL 字符串大小写转化函数有两对:lower(), uppper() 和 lcase(), ucase()

select lower('DDD');
//ddd
select upper('ddd');
//DDD

清除字符串首尾空格

MySQL 中的清除字符串首尾空格函数有三个:ltrim(), rtrim(), trim()

select concat('.', ltrim(' ddd '), '.');
// .ddd .
select concat('.', rtrim(' ddd '), '.');
//. ddd.
select concat('.', trim(' ddd '), '.');
//.ddd.

MySQL 中的 trim 字符串函数,实在是强大。它不仅能消除字符串首尾部的空格,还可以消除我们指定的任意字符

trim([{both | leading | trailing} [remstr] from] str)

//清除字符串首部字符
select trim(leading '.' from '..ddd..');
结果: ddd..
//清除字符串尾部字符。
select trim(trailing '.' from '..ddd..');
结果:..ddd
//清除字符串首尾部字符。
select trim(both '.' from '..ddd..');
结果:ddd

字符串截取

MySQL 字符串截取函数:left(), right(), substring(), substring_index()。还有 mid(), substr()。其中,mid(), substr() 等价于 substring() 函数,substring() 的功能非常强大和灵活。

字符串左截取:left(str, length)

select left('sqlstudy.com', 3);
//结果:sql

字符串左截取:right(str, length)

select left('sqlstudy.com', 3);
//结果:com

字符串截取:substring(str, pos); substring(str, pos, len)

//从字符串的第 4 个字符位置开始取,直到结束
select substring('sqlstudy.com', 4);
//结果:study.com
//从字符串的第 4 个字符位置开始取,只取 2 个字符
select substring('sqlstudy.com', 4, 2);
//结果:st
//从字符串的第 4 个字符位置(倒数)开始取,直到结束
select substring('sqlstudy.com', -4);
//结果:.com

我们注意到在函数 substring(str,pos, len)中, pos 可以是负值,但 len 不能取负值。

字符串截取:substring_index(str,delim,count)

// 截取第二个 '.' 之前的所有字符。
select substring_index('www.sqlstudy.com.cn', '.', 2);
//结果:www.sqlstudy
//截取第二个 '.' (倒数)之后的所有字符。
select substring_index('www.sqlstudy.com.cn', '.', -2);
//结果:.com.cn
//如果在字符串中找不到 delim 参数指定的值,就返回整个字符串
select substring_index('www.sqlstudy.com.cn', '.coc', 1);
//结果:. www.sqlstudy.com.cn

GROUP_CONCAT()函数

MYSQL中可以在GROUP BY中使用GROUP_CONCAT()函数,将每个分组中各个字段的值显示出来

SELECT s_id,GROUP_CONCAT(f_name) AS NAMES FROM fruits GROUP BY s_id
//group by中使用with rollup,增加了最后一行,表示total列的所有值的总和
SELECT s_id ,COUNT(1) AS total FROM fruits GROUP BY s_id WITH ROLLUP

注意:当使用ROLLUP时,不能同时使用ORDER BY子句进行结果排序,即ROLLUP和ORDER BY是互相排斥的!

子查询

ANY关键字接在一个比较操作符的后面,表示若与子查询返回的任何值比较为TRUE,则返回TRUE。返回tbl2表的所有num2列,然后将tbl1中的num1的值与之进行比较,只要大于num2的任何一个值,即为符合查询条件的结果

SELECT num1 FROM tbl1 WHERE num1>ANY(SELECT num2 FROM tbl2)

ALL关键字接在一个比较操作符的后面,表示与子查询返回的所有值比较为TRUE,则返回TRUE

SELECT num1 FROM tbl1 WHERE num1>ALL(SELECT num2 FROM tbl2)

MySQL核心知识的更多相关文章

  1. mysql 核心知识要点

    整体知识介绍:mysql基本操作和使用,mysql优化(索引,分表等),mysql部署(读写分离,负载均衡等) 数据库基本介绍:数据库概念,常用数据库,web应用三大软件分工,PHP动态语言特点(处理 ...

  2. Linux(1)- 服务器核心知识、Linux入门、VMware与centeos安装、远程连接linux、linux基本命令使用

    一.服务器核心知识 1.电脑和电脑的硬件组成 现在的人们几乎无时无刻不在使用着电脑!不管是桌上型电脑(桌机).笔记型电脑(笔电).平板电脑,还是智慧型手机等等,这些东西都算是电脑.虽然接触这么多,但是 ...

  3. 零基础的学习者应该怎么开始学习呢?Python核心知识学习思维分享

    近几年,Python一路高歌猛进,成为最受欢迎的编程语言之一,受到无数编程工作者的青睐. 据悉,Python已经入驻部分小学生教材,可以预见学习Python将成为一项提高自身职业竞争力的必修课.那么零 ...

  4. Docker 核心知识回顾

    Docker 核心知识回顾 最近公司为了提高项目治理能力.提升开发效率,将之前的CICD项目扩展成devops进行项目管理.开发人员需要对自己的负责的项目进行流水线的部署,包括写Dockerfile ...

  5. Mysql数据库知识-Mysql索引总结 mysql mysql数据库 mysql函数

    mysql数据库知识-Mysql索引总结: 索引(Index)是帮助MySQL高效获取数据的数据结构. 下边是自己整理的资料与自己的学习总结,,做一个汇总. 一.真的有必要使用索引吗? 不是每一个性能 ...

  6. 网络基础知识、ASP.NET 核心知识(1)*

    为什么要写网络? 我原本的计划是这样的,连续两天梳理ASP.NET开发的核心知识.说到这呢,有人问了.“不是说好了做ASP.NET笔记吗?为啥要写网络基础知识?是不是傻?” 原因是这样的.作为网站开发 ...

  7. Mysql存储过程知识,案例--mysql存储过程基本函数

    Mysql存储过程知识,案例: create procedure delete_setting(in p_settingid integer) begin delete from setting wh ...

  8. Vuex核心知识(2.0)

    Vuex 是一个专门为 Vue.js 应该程序开发的状态管理模式,它类似于 Redux 应用于 React 项目中,他们都是一种 Flux 架构.相比 Redux,Vuex 更简洁,学习成本更低.希望 ...

  9. MySQL高级知识(十六)——小表驱动大表

    前言:本来小表驱动大表的知识应该在前面就讲解的,但是由于之前并没有学习数据批量插入,因此将其放在这里.在查询的优化中永远小表驱动大表. 1.为什么要小表驱动大表呢 类似循环嵌套 for(int i=5 ...

  10. MySQL高级知识(十五)——主从复制

    前言:本章主要讲解MySQL主从复制的操作步骤.由于环境限制,主机使用Windows环境,从机使用用Linux环境.另外MySQL的版本最好一致,笔者采用的MySQL5.7.22版本,具体安装过程请查 ...

随机推荐

  1. Qt中跨进程Socket通信以及socket跨线程通信

    一 QTcpServer 创建流程 创建套接字服务器 QTcpServer 对象, 通过 QTcpServer 对象设置监听,即:QTcpServer::listen() 基于 QTcpServer: ...

  2. Java反射获取方法参数名

      正常环境下,获取不到参数的名称,使用java反射时,第一个参数名是arg0,第二个参数是arg1,与我们代码中写的对不上. java反射过程中,需要我们做好判断: if(!parameter.is ...

  3. GPIO原理及配制方法

    GPIO原理及配制方法 引用地址: ARM SOC芯片的GPIO结构示意图 @@@ GPIO的八种模式 1,输入浮空模式 2,输入上拉模式 3,输入下拉模式 4,模拟输入模式 5,开漏输出模式 6,开 ...

  4. python multiprocessing多进程 cannot pickle '_io.TextIOWrapper' object

    Python 3.9.6 在windows下使用multiprocessing多进程报如下错误,但linux下正常 Traceback (most recent call last): File &q ...

  5. linux清除恶意程序流程-kdevtmpfsi清除

    TOP命令查看发现kdevtmpfsi进程跑满CPU, 处理如下: 解决过程 1.清除被新增的用户名和密码# 找到账户ID和权限组都是0跟root同级别的和不认识的, 删掉保存.   more /va ...

  6. WEB的安全性测试要素【转】

    原文链接:http://www.cnblogs.com/zgqys1980/archive/2009/05/13/1455710.html WEB的安全性测试要素 1.SQL Injection(SQ ...

  7. GraalVM, Native Image, Java on Truffle, LLVM runtime, WebAssembly, JavaScript and Node.js关系是什么

    GraalVM, Java on Truffle, LLVM runtime, WebAssembly, JavaScript and Node.js关系是什么 GraalVM是一个JDK发行版,支持 ...

  8. rsyslog由于RateLimit丢失日志的处理

    问题 问题的发现:在我们的docker应用中,配置了rsyslog作为日志输出:当应用产生的日志在某段时间内量比较大时,就发现会丢日志. 原因 问题的原因:日志的输出路径,应用程序把日志输出到syst ...

  9. mybatis-关联查询4-多对多查询

    三张表的关联查询  

  10. rar 压缩解压

    rar wget https://www.rarlab.com/rar/rarlinux-x64-612.tar.gz # 压缩文件 rar a -r test.rar file # 解压文件 unr ...