您的位置:首页 > 数据库 > MySQL

mysql知识整理

2018-03-20 14:11 239 查看
安装完mysql后如果只能在安装目录下启动,需要将安装路径放在path里。
windows系统mysql的启动:1,在服务里启动;2,手动启动,cmd-->mysql -h IP地址 -u 用户 -p 密码;
查看用户下有哪些数据库:select database();
进入某个数据库:use 数据库名;
查看该数据库下的表:show tables;

连接 mysql -h IP地址 -u 用户 -p 密码

创建用户create USER 'username'@'host' IDENTIFIDE BY 'password' 其中host指定该用户可以允许在那台主机上登陆,
如果是mysql所在的主机则可以填localhost,如果允许从任何主机上登陆则使用%表示;password可以不填,表示密码为空;

删除用户DROP USER 'username'@'host'

设置用户密码 SET PASSWORD FOR 'username'@'host' = PASSWORD('newPass') 如果是设置当前登录用户的密码则使用 SET PASSWORD = PASSWORD('newPass')

为用户授权 GRANT privileges ON dbName.tableName to 'username'@'host' identified by 'passwd' 其中privileges可以是select、update、insert、delete等,
如果允许授予所有权限则使用ALL;dbName表示对哪个库拥有权限,如果允许所有库都拥有权限则使用*;tableName表示对哪个表拥有权限,
如果允许所有表都有权限则使用*;

撤销权限 REVOKE privileges ON dbName.tableName FROM 'username'@'host' 其中privileges、dbName、tableName要与授权时填写的一致,否则撤销失败

查看授权信息 SHOW GRANTS for 'username'@'host'
刷新权限表 flush privileges

mysql操作权限:
ALL 拥有所有权限
ALTER 改表权限
ALTER ROUTINES 改存储过程权限
CREATE 建库、表、索引等权限
CREATE ROUTINES 建存储过程权限
CREATE TEMPORARY TABLES 建临时表权限
CREATE USER 建用户权限
CREATE VIEW 建视图权限
DELETE 删除记录权限
DROP 删除库、表权限
EXECUTE 执行存储过程权限
FILE 数据库文件权限,导入导出数据库文件权限
GRANT OPTION 赋予权限的权限
INDEX 索引权限
INSERT 插入权限
LOCK TABLES 锁表权限
PROCESS 查看所有进程列表的权限
RELOAD
REPLICATION CLIENT
REPLICATION SLAVE
SELECT 查询权限
SHOW DATABASES 查看所有数据库列表权限
SHOW VIEW 查看视图权限
SHUTDOWN 允许使用mysqladmin shutdown来关闭mysql
SUPER
UPDATE 修改权限
USAGE 无访问权限

创建表格
create table tableName
{
columnName dataType [not null] [primary key]
}
删除表格
drop tableName
更改表格,添加列
alter table tableName
add column columnName dataType
更改表格,设置主键
alter table tableName
add primary key(columnName)
更改表格,删除主键
alter table tableName
drop primary key(columnName) 
建立索引
create index indexName on tableName(columnName)
删除索引
drop indexName
数据类型
smallint 16位整数
Integer 32位整数
decimal(p,s) 默认p=5,s=0;p表示最多有几位数,s表示小数点后最多有几位数
float 32位实数
double 64位实数
char(n) n表示字符串最大长度,n不能超过254
varchar(n) n表示字符串最大长度,n不能超过4000
graphic(n) n表示字符串最大长度,每个字符占2个字节,n不得超过127,用于存储汉字;
vargraphic(n) n表示字符串最大长度,每个字符占2个字节,n不能超过2000
date 包含年、月、日
time 包含时、分、秒
timestamp 包含年、月、日、时、分、秒、毫秒
聚合函数
count() 返回符合发条件的记录数
sum() 返回列的总和,列必须是数字
avg() 返回列的平均值,列必须为数字
min() 返回列的最小值,必须为数字
max() 返回列的最大值,必须为数字
bit_and() 返回列值的按位与运算结果
bit_or() 返回列值的按位或运算结果
bit_xor() 返回列值的按位异或运算结果
count(distinct columnName) 返回列中值不重复的记录数
group_concat()
stddev_pop()
stddev()
pop()
stddev_samp()
var_pop()
variance()
var_samp()
关键字
distinct去除重复的记录,返回唯一值
group by columnName 按列分组
where后的字句发生在分组之前,子句中不能出现聚合函数
having后的字句发生在分组之后,子句中可以出现聚合函数
where 和 having都是选择出符合条件的结果
compute by
函数
ASCII(str)返回字符串str最左边的字符的ASII值,如果str是空字符串则返回0,如果字符串是null返回null;
ORD(str)返回字符串str最左边字符的ASII值,如果字符不是多字节字符则与ASII函数相同,如果是多字节字符则返回该字符的所有字节的ASII值的和再乘以256
CONV(n,from_base,to_base)将数字n从原来的基数from_base转为目的基数to_base的数字字符串;如果n是16进制数,需要用引号括起来;如果n非数字,则返回0;如果from_base和to_base中有任何一个为0,则返回0;
如果from_base和to_base中有任何一个为null,则返回null;
bin(n)相当于conv(n,10,2),返回10进制数的2进制表示;
oct(n)相当于conv(n,10,8)
hex(n)相当于conv(n,10,16)
char(n1,n2...)参数对应的是ASCII值,返回ASCII值对应的字符组成的字符串;
concat(s1,s2...)将参数s1,s2等拼接成一个新的字符串,如果任何一个参数为null,则返回null
group_concat(s1,s2....)将s1,s2等 字段作为一组拼接成一个字符串
length(str)返回字符串str的长度,同octet_length(str)、char_length(str),但char_length(str)如果str中有多字节的字符,返回的结果里只算该字符的第一个字节;
locate(str1,str)返回str在str里第一次出现时的位置,如果没有就返回0;同position(str1 in str)
locate(str1,str,n)从位置n开始返回str1在str里第一次出现的位置;locate和positio
4000
n对于多字节字符都按一个字符算
instr(str,str1)返回str1在str里第一次出现的位置,
lpad(str,len,pstr)返回在str左边使用pstr填补知道str长度达到len为止的字符串,如果str的长度长于len,则截取str前len个字符,对于多字节字符安全;
left(str,len)返回str最左边len长度的字符串,right(str,len)返回str最右边len长度
substring(str,pos,len)从str的pos位置开始截取len长度的字符串返回,同substring(str from pos for len)、mid(str,pos,len)
substring(str,pos)、sunstring(str from pos)从pos位置开始截取str字符串并返回
substring_index(str,del,pos)如果pos是正整数,则从str的左边开始数,返回pos个del之前的字符串;如果pos是负数,则从str的右边开始数,返回pos个del之后的字符串
ltrim(str)返回去除str左边空格后的字符串
rtrim(str)返回去除str右面空格后的字符串
trim([both | leading | trailing] [del] from str) 如果设置both,则去除str前后的del字符串;如果设置leading,则去除str左面的del;如果设置trailing,则去除str右面的del;
如果什么都没设置,则默认是both,如果del没有指定,则默认是空格
soundex(str)返回与str的一个同音字符串?????
space(n) 返回n个空格的字符串
replace(str,del,tostr)将str里的del使用tostr替换
repeat(str,count)将str重复count次后返回
reverse(str)将str字符顺序颠倒后返回
insert(str,pos,len,str1)将str从pos位置开始的len长度的字符串替换成str1
elt(n,str1,str2...)返回第n个字符串
field(str,str1,str2...)返回str出现在后面一组字符串里的位置
find_in_set(str,strlist)strlist是一个字符串,该串是有多个子串拼接成的,以逗号分隔,函数返回str出现在strlist里的位置
make_set(bit,str1,str2...)bit是十进制数,计算时会转成二进制数,str1对于二进制数的第1位,str2对于二进制数的第2位,以此类推,对应位的数字是0表示不拼接到结果字符串中,
对应位的数字是1,表示拼接到结果字符串中,字符串中的各个字符串以逗号分隔,如果子串中有null则不拼,例如make_set(7,"a",null,"c")结果为a,c
export_set(bit,on,off,[del,count])使用on或off拼接字符串,以del分隔,总共要拼接count个,del不设置默认为逗号,count不设置默认为64,bit是10进制数,计算时将其转成了二进制,
二进制数的每一位如果是1,则拼接on,否则拼接off
lcase(str)和lower(str)都是将字符串str转成小写,相反的函数是ucase(str)和upper(str)
load_file(fileName)加载文件,文件必须可读,有操作权限,文件大小不得大于max_allowed_packet,max_allowed_packet通过show variables like '%max_allowed_packet%'可以查看,修改max_allowed_packet配置:
1.修改my.cnf 或者my.ini 在[mysqlid]下加max_allowed_packet=值;
2.set global max_allowed_packet=值;

存储过程:
1.定义
create procedure 过程名(参数)
begin
过程体
end
2.申明分割符
delimiter 分隔符;
由于mysql默认的分隔符是";",所以需要在创建存储过程之前先申明下分隔符,以免与过程体中的";"冲突,导致编译出错,在存储过程结束后再还原分隔符;
3.参数设置
[in|out|inout] 参数名 数据类型
多个参数之间使用","分隔;in表示是输入参数,是默认值;out表示是要输出的参数;inout表示在调用存储过程时给定值,在过程体中可以改变值并返回;
4.定义变量
declare 变量名 数据类型 [default 默认值]
5.变量赋值
set 变量名=值;
6.设置用户变量
set @变量名=值;
7.调用存储过程
call 存储过程名(传入参数)
8.流程控制语句
if 表达式 then 语句1 else 语句2 end if;

case 值
when 值1 then 语句1 
when 值2 then 语句2
else 语句3
end case;

while 表达式 do
语句
end while;

repeat
语句
until 表达式
end repeat;

标志:loop
语句
iterate 标志
leave 标志
end loop

9.游标使用
游标定义: declare 游标名 cursor for 语句
游标结束判断:DECLARE  CONTINUE HANDLER FOR NOT FOUND  SET 条件;
游标使用:open 游标名
游标遍历: fetch 游标名 into 参数; repeat 循环语句;fetch 游标名 into 参数; until 条件 ;end repeat;
游标关闭:close游标名

mysql异常 :
异常:java.sql.SQLException: Parameter number X is not an OUT parameter 
 解决办法:检查存储过程在数据库里是否存在。检查调用语法是否正确
 
mysql数据库文件导出:
导出整个数据库
mysqldump -u username -p dbName > dbName.sql
导出数据库结构
mysqldump -u username -p -d dbName > dbName.sql
导出整个表
mysqldump -u username -p dbName tableName > tableName.sql
导出表结构
mysqldump -u username -p -d dbName tableName > tableName.sql

查看系统配置:
查看最大等待时间:show global variables like 'wait_timeout';
查看最大连接数show variables like 'max_connections';
查看最大使用连接数show global status like 'max_used_connections';

索引:
一、索引的数据类型选择
1.尽量使用小数据类型,小数据类型占用磁盘、内存、CPU的空间更小,处理起来更快;
2.尽量选择简单数据类型,简单数据类型处理起来更快,尽量使用mysql的日期类型来存储时间,尽量使用整形来存储ip;
3.尽量避免null值,null值会使索引更难优化,null会使索引、索引统计信息及比较运算更加复杂,尽量使用空0、字符串代替null;

查询mysql数据存放路径方法
1、查看my.ini配置文件datadir配置项
2、登录MySQL服务使用命令show variables like 'datadir'查询

mysql启动报错Starting MySQL... ERROR! The server quit without updating PID file (/home/opaqdata/data/slave1.pid).
解决办法echo never > /sys/kernel/mm/transparent_hugepage/enabled

解决navicat连接mysql时出现数据库打不开的问题:为navicat所在主机授予访问权限。

mysql5.6.6后加强的密码安全控制。
可以通过SHOW VARIABLES LIKE 'validate_password%';sql语句查看具体密码策略;
其中validate_password_policy表示安全策略级别,有0(low)、1(MEDIUM)、2(STRONG),默认值是1即MEDIUM
validate_password_dictionary_file表示用于验证密码强度的字典文件路径
validate_password_length表示密码最小长度
validate_password_mixed_case_count表示至少包含小写字母和大写字母的个数
validate_password_number_count表示至少包含数字个数
validate_password_special_char_count表示至少包含特殊字符个数
默认策略是medium,即至少包含大、小写字母、数字、特殊字符、满足最小长度;
low策略,只校验密码长度,其它无要求,密码长度可以为0,即密码可以为空;
STRONG策略,在medium基础上还需要设置字典文件
以上参数都是全局变量,因此可以通过set global设置具体值;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 mysql