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

一、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 才能生效.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355

推荐阅读更多精彩内容