关于MacBook Pro

mysql数据库手记(常用命令及使用相关tips)

2018-10-15  本文已影响204人  PeterPZ

一、mysql服务的启动和停止

在mac下启动


系统偏好设置中开启mysql.jpg 系统偏好设置中开启mysql服务.jpg

一般安装mysql都会使用dmg安装包进行安装,在系统偏好设置里的mysql直接启动或者利用命令行:

启动数据库

sudo /usr/local/mysql/support-files/mysql.server start

如果报错,基本上问题出在权限上
找到文件 /usr/local/mysql/data 设置为读写读写模式即可

sudo chmod -R 777 /usr/local/mysql/data

终止数据库

sudo /usr/local/mysql/support-files/mysql.server stop

重启数据库

sudo /usr/local/mysql/support-files/mysql.server restart

用Homebrew安装mysql开启关闭操作的备注:
查看brew安装的mysql信息

brew info mysql

cmake如果未链接先执行以下两个命令取消链接cmake并安装

brew unlink cmake 
brew install cmake 

开启数据库命令示范:

sudo brew services start mysql

二、登陆mysql

语法如下:

mysql -u用户名 -p用户密码

1、登陆本地数据库

键入命令mysql -uroot -p, 回车后提示你输入密码,输入12345,然后回车即可>进入到mysql中了,mysql的提示符是:

mysql>

2、连接到远程主机上的MYSQL

假设远程主机的IP为:0.0.0.0,用户名为admin,密码为123。则键入以下命令:

mysql -h0.0.0.0 -uadmin -p123

三、增加新用户

格式:
grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"

如,增加一个用户test密码为12345,让其可以在本机上登录, 并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令:

grant select,insert,update,delete on *.* to test@localhost Identified by "12345";

如果希望该用户能够在任何机器上登陆mysql,则将localhost改为"%"。

如果你不想test有密码,可以再打一个命令将密码去掉。

grant select,insert,update,delete on mydb.* to test@localhost identified by "";

备注:
全局管理权限:
FILE: 在MySQL服务器上读写文件。
PROCESS: 显示或杀死属于其它用户的服务线程。
RELOAD: 重载访问控制表,刷新日志等。
SHUTDOWN: 关闭MySQL服务。
数据库/数据表/数据列权限:
ALTER: 修改已存在的数据表(例如增加/删除列)和索引。
CREATE: 建立新的数据库或数据表。
DELETE: 删除表的记录。
DROP: 删除数据表或数据库。
INDEX: 建立或删除索引。
INSERT: 增加表的记录。
SELECT: 显示/搜索表的记录。
UPDATE: 修改表中已存在的记录。
特别的权限:
ALL: 允许做任何事(和root一样)。
USAGE: 只允许登录--其它什么也不允许做。

四: 操作数据库

1、 显示数据库列表

show databases;

缺省有两个数据库:mysql和test。 mysql库存放着mysql的系统和用户权限信息,我们改密码和新增用户,实际上就是对这个库进行操作。

2、 显示库中的数据表:

use mysql;
show tables;

3、 显示数据表的结构:

describe 表名;

4、 建库与删库:

create database 库名;
drop database 库名;

5、 建表与删表:

use 库名;
create table 表名(字段列表);

创建临时表

create temporary table 表名(字段列表); 

检查是否存在建表

create table if not exists 表名(字段列表); 

从已经有的表中复制表的结构

create table 表名2 select * from 表名1 where 条件; 

复制表

create table 表名2 select * from 表名1; 
drop table 表名;

6、对表重新命名

alter table table1 rename as table2; 

7、修改列的类型

alter table 表名1 modify id int unsigned;//修改列id的类型为int unsigned 
alter table 表名1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned 

8、创建索引

alter table 表名 add index ind_id (id); 
create index ind_id on 表名 (id); 

创建唯一索引

create unique index ind_id on 表名 (id);//建立唯一性索引

9、删除索引

drop index idx_id on 表名; 
alter table 表名 drop index ind_id; 

10、 清空表中记录:

delete from 表名;

11、 显示表中的记录:

select * from 表名;

12、联合字符或者多个列(将列id与":"和列name和"="连接)

select concat(id,':',name,'=') from students; 

13、limit(选出10到20条)<第一个记录集的编号是0>

select * from students order by id limit 9,10; 

14、往表中加入记录

insert into 表名 values ("参数1","参数2");

15、更新表中数据

update 表名 set 参数1="值1" where 参数2='值2';

16、退出MYSQL

 exit

其它:

show processlist;列出每一笔联机的信息。 
show varlables;列出mysql的系统设定。 
show tables from db_name;列出db_name中所有数据表; 
show [full] columns from table_name;列出table_name中完整信息,如栏名、类型,包括字符集编码。 
show index from table_name; 列出table_name中所有的索引。 
show table status;;列出当前数据库中数据表的信息。 
show table status from db_name;;列出当前db_name中数据表的信息。 
alter table table_name engine innodb|myisam|memory ;更改表类型 
explain table_name / describe table_name ; 列出table_name完整信息,如栏名、类型。 
show create table table_name 显示当前表的建表语句 
alter table table_name add primary key (picid) ; 向表中增加一个主键 
alter table table_name add column userid int after picid 修改表结构增加一个新的字段 
alter table table_name character set gb2312 改变表的编码 
select user(); 显示当前用户。 
select password(’root’); 显示当前用户密码 
select now(); 显示当前日期 
flush privileges 在不重启的情况下刷新用户权限 
mysqld –default-character-set=gb2312 ;设置默认字符集为gb2312 

五、导出和导入数据

1、 导出数据:

mysqldump --opt test > mysql.test

即将数据库test数据库导出到mysql.test文件,后者是一个文本文件

如:mysqldump -u root -p123456 --databases dbname > mysql.dbname
就是把数据库dbname导出到文件mysql.dbname中。

2、备份数据库

mysqldump -u root 库名>xxx.data

3、恢复数据库

mysql -u root -p 库名 < xxx.data

4、导入数据:

mysqlimport -u root -p123456 < mysql.dbname

5、 将文本数据导入数据库:

文本数据的字段数据之间用tab键隔开。

use test;
load data local infile "文件名" into table 表名;

6、用文本方式将数据装入数据库表中(例如~/Desktop/mysql.txt)

LOAD DATA LOCAL INFILE "~/Desktop/mysql.txt" INTO TABLE MYTABLE;

7、导入.sql文件命令(例如~/Desktop/mysql.sql)

use database;
source ~/Desktop/mysql.sql;

六、注意点

1、使用索引的缺点
  1)减慢增删改数据的速度;
  2)占用磁盘空间;
  3)增加查询优化器的负担;
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
  
2、分析索引效率
  方法:在一般的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的建议;
  
3、使用较短的定长列
  1)尽可能使用较短的数据类型;
  2)尽可能使用定长数据类型;
  a)用char代替varchar,固定长度的数据处理比变长的快些;
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
  
4、使用not null和enum
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
  
5、使用optimize table
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
  
6、使用procedure analyse()
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
  select * from students procedure analyse();
  select * from students procedure analyse(16,256);
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
  
7、使用查询缓存
  1)查询缓存的工作方式:
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
  2)配置缓存参数:
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
  
8、调整硬件
  1)在机器上装更多的内存;
  2)增加更快的硬盘以减少I/O等待时间;
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
  3)在不同的物理硬盘设备上重新分配磁盘活动;
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。

9、安全

刚安装好的MySql包含一个含空密码的root帐户和一个匿名帐户,这是很大的安全隐患,对于一些重要的应用我们应将安全性尽可能提高,在这里应把匿名帐户删除、 root帐户设置密码,可用如下命令进行:

use mysql; 
delete from User where User=”"; 
update User set Password=PASSWORD(’newpassword’) where User=’root’; 

改完重启 mysql 才能生效.

上一篇下一篇

猜你喜欢

热点阅读