最近学习mysql数据库,收获不少,在此记录,以便日后查阅。

1.启动服务

windows:  net start/stop mysql
linux:            service mysqld start/stop

2.登录数据库

如果是windows系统,需要将mysql.exe的完整路径加入PATH环境变量里面,这个是要重启系统才能生效的。

mysql -u $user -p 回车输入密码即可

注:$user为你登录mysql的用户,-u和$user间可加空格也可不加,-p后面也可紧挨着输入密码,但此处为明文不安全,建议是回车后再输入。

3.添加用户

如果直接操作mysql.user表,一则字段比较多插入起来比较麻烦,二则有些字段数据类型特殊常常容易报错,采用下面的命令更方便

grant all privileges on $dbname.$tbname to $user@$host identified by '$password';

注: $dbname 数据库名 可为*表示所有数据库

$tbname 表名    可为*表示所有表

$user 新添加的用户名

$host 登录数据库的主机,如果是本地则为localhost不用加引号,如果是远程则为‘%’,要加引号,这点要注意

$password 新添加用户的密码

all privileges 也可为其他权限如select,update,insert,delete等

通常会在执行完这个后加一个 flush privileges 命令,但是感觉没什么用

4.常用命令

常用查看命令
show variables like "%$keyword%";       查看环境变量,$keyword表示搜索的关键字,此处like用法同where语句
show databases;                                         查看有哪些数据库
show tables;                                                 (只有进入到某一个数据库中才能) 查看有哪些数据表
\s                                                                    查看最常用的环境变量
字符集相关

show variables like "%char%";      查看数据库的各种编码

show create database $db;           查看数据库$db编码格式

show create table $table;               查看数据表$table编码格式

set character_set_server='utf8';      设置服务器字符集

set NAMES utf8;                                 等价于同时修改client、connection、results这三个的字符集

alter database `db-name` default character set utf8 collate utf8-general-ci;    修改已经创建的数据库的字符集

帮助的使用

? contents                         查看有哪些内容可以得到帮助,这是一个树状结构,每个分支都可以用?来获得帮助

? keyword                         keyword就是你要获得帮助的内容,甚至可以包括命令的用法比如 :? show会告诉你show命令可以show哪些东西

5.安全模式

先关闭mysql的服务,然后

windows: mysqld-nt  --skip-grant-tables  运行这个命令,然后在新命令行里面就可以mysql -u root -p不用密码进入系统

linux:         mysqld_safe  --skip-grant-tables &  运行这个命令,然后就可以同上不用密码进入系统

6.Data definition language

create schema/database $dbname;                        创建数据库

use $dbname;                                                                进入数据库

drop database $dbname;                                            删除数据库

drop table [ if exists ] $tbname;                                    删除表

desc/describe $tbname;                                              查看表结构

CREATE TABLE [ IF NOT EXISTS ] $tbname (

        field1 数据类型 [ 属性 ] [ 索引 ],

        field2 数据类型 [ 属性 ] [ 索引 ],

        field3 数据类型 [ 属性 ] [ 索引 ],

        ...

        fieldn 数据类型 [ 属性 ] [ 索引 ]

) [ 表类型 ] [ 表字符集 ];

创建表:.建议sql关键字用大写,表名和字段名等自定义名称用小写,要有意义,可以是英文组合或英文缩写

数据类型:

1.数值型

整型(整数)

非常小的整型           1个字节             TINYINT

较小的整型               2个字节             SMALLINT

中等大小的整型       3个字节             MEDIUMINT

标准的整型               4个字节             INT

大得整型                   8个字节             BIGINT

浮点型(小数)

FLOAT( M, D )                        4个字节

DOUBLE( M, D )                    8个字节

DEMICAL( M, D )                    M+2字节    (定点数以字符串来存储数据)

注:  实际数据超过定义的精度时会四舍五入,比较浮点数时不要使用等号

2.字符型

CHAR( M )                M最大255,固定长度字符串      永远占M个字节                      会自动删除尾部空格        速度更快但占用空间大

VARCHAR( M )           M最大255,可变长度字符串      占的字节数为字符个数+1    不会删除尾部的空格        速度慢点单可以节省空间

TEXT                       保存大量文本数据(文章,日记)             2^16-1长度

MEDIUMTEXT

LONGTEXT      2^32-1

BLOB                     保存二进制数据(照片、电影、压缩包)  2^16-1长度

MEDIUMBLOB

LONGBLOB     2^32-1

ENUM   枚举   1-2个字节              最多65535个成员     eg:   ENUM( "Monday",  "Tuesday" )     一次只能用一个枚举中的值

SET       集合   1,2,3,4,8个字节    最多64个成员           eg:   SET( 'a', 'b', 'c' )     一次可以用多个集合中的值,多个值之间用逗号隔开

3.日期型

DATE                  YYYY-MM-DD (-可以省略)

TIME                    hh:ii:ss           (:可以省略)

DATETIME          YYYY-MM-DD hh:ii:ss

TIMESTAMP       YYYYMMDDhhiiss

YEAR                  YYYY

建议不要使用上面这些类型,用整数int来存时间戳

属性:

1.UNSIGNED   无符号。只能用于数值型,让空间增加一倍

2.ZEROFILL      前导零。只能用于数值型,自动成为无符号的

3.AUTO_INCREMENT 自动增长。每增加一条就会自动增加1,字段值不允许重复,当插入该字段为0、NULL、‘’或留空时也会执行自动加1

4.NULL/NOT NULL       默认可以为NULL。创建表时每个字段不要插入NULL,最好都设置为NOT NULL

5.DEFAULT ‘0’/‘’/‘0.0’     默认值。当不插入该字段值时的默认值

索引:

1.主键索引   PRIMARY KEY 确定一个表里一条特定数据记录的位置,一个表只有一列是主键,主键值唯一不为空。可以写在字段后面也可以写在,最下面。

2.唯一索引   UNIQUE           确保该字段不重复。每个表可以有多个

3.常规索引   KEY        最重要的技术,提升数据库的性能。提高查找的速度,减慢数据列上插入删除和修改的速度。和表一样是独立的数据对象,可以在创建表时建立(在最下面加一行 KEY/INDEX  field1(field1) ),也可以独立使用CREATE INDEX  ind1 on $tbname (field1, field2,...)。

4.全文索引   FULLTEXT  只能用于MyISAM类型的表,只能用于char varchar text这样的文本类型。也可以多个数据列上使用。

表类型:

show engines     查看数据库支持哪些类型

主要使用一下俩个

MyISAM(default)  快速读取 有些功能不支持 ,不支持事务、数据行锁定、外键约束

InnoDB                占用空间大,不支持全文索引

7.Data Malipulation Language

ALTER:

ALTER TABLE $tbname {  

                                                ADD $field TYPE  |                 添加字段

DROP $field |                         删除字段

MODIFY $field TYPE |            修改字段类型

CHANGE $fieldold $fieldnew TYPE  修改字段名和类型

 }

[ AFTER $field | FIRST ];

ALTER TABLE $tbnameold RENAME AS $tbnamenew;        改表名

INSERT:

INSERT INTO $tbname [ ( field1, field2,..., fieldn  ) ]  VALUES ( 'value1', 'value2',..., 'valuen' )  [ ('vala1', 'vala2', ..., 'valan') ] ;

注:1.如果没有给出表的字段值,则值表必须全部给出且按默认顺序

2.建议所以字段名不加引号,所以值加引号

3.给出字段列表时,值要与字段列表对应即可,可不按表顺序来

4.可一次插入多个值

UPDATE:

UPDATE $tbname SET field1='val1', field2='val2' [ WHERE 条件 ];

DELETE:

DELETE FROM $tbname [ WHERE 条件 ];

TRUNCATE:

TRUNCATE TABLES $tbname;   清空一个表

8.Data Query Language

SELECT [ ALL | DISTINCT ]
{ * | table.* | [ table. ] field1 [ AS alias1], ... }
FROM  $tbname1 [ AS alias1 ], $tbname2 [ AS alias2 ]

WHERE 条件

ORDER BY field [ DESC | ASC ]

LIMIT $begin, $length

GROUP BY field

HAVING [ 分组的条件 ]

1.字段field列出要查询得字段,可以为每个字段或表起别名

2.DISTINCT作用整个表,取消重复的数据

3.列也可以使用表达式和函数 count(), avg(), sum(), max(), min()

4.WHERE条件可以保护逻辑运算符( && AND , || OR, ! NOT ),比较运算符(>, >=, <, <=, =, !=, <>, <=> 可判断是否为NULL)

 LIKE / NOT LIKE / IS NULL / IS NOT NULL / BETWEEN...AND/ IN / REGEXP ( like可以用通配符_单个字符  %0个或任意多个字符 )

5.LIMIT用于部分显示,$begin表示开始的行(第一行为0行),$length表示显示的行数

6.ORDER为按列排序,DESC降序,ASC升序

9.MYSQL内置函数

1.字符串函数

concat ( str1, str2, ...)    字符串连接函数

insert ( str, x, y, insert )  将str从x位置开始y个字符串长度替换为insert(默认从1开始)

LOWER(str) / UPPER(str)   将字符串全部转成小写/大写

LEFT (str, x) / RIGHT (str, x)  分别返回最左和最右的x个字符,如果x为空则返回空

LPAD (str, n, pad) / RPAD ( str, n, pad )  用字符串PAD对str最左和最右进行填充直到长度为n个字符

trim (str) / ltrim (str) / rtrim (str)   去掉字符串空格

replace ( str, a, b ) 将str中所有字符串a替换为b

strcmp ( str1, str2 )  s1<s2返回-1, s1>s2返回1, s1=s2返回0

substring ( str, x, y ) 返回str中从x开始y个长度字符串

2.数值函数

ABS(x)  返回绝对值

ceil(x)    向上取整

floor(x)   向下取整

mod(x, y)  返回x/y的模(余数)

rand()    返回0~1之间的随机数

round(x, y)   返回参数x的有y位小数的四舍五入的值

truncate(x, y)   返回参数x的截断的y位小数的结果

3.时间函数

curdate()   日期

curtime()   时间

now()         日期+时间

unix_timestamp(now())  返回时间戳

from_unixtime()     根据时间戳返回时间

week(now())/ year()/ hour()/ minute()/ monthname(now())

date_format(now(), "%Y-%M-%D %h-%i-%s")

4.其他函数

database()    PASSWORD()  md5()

version()   user()

inet_aton('192.168.1.100')   将网络转成数字

inet_ntoa(3232235)  将数字转成网络

10.视图

1.什么是视图
视图是存放数据的一个接口,也可以说是虚拟表,这些数据可以是从一个或几个基表(视图)的数据,也可是用户自己定义的数据,其实视图里面不存放数据,数据据还是存在基表里面,基表数据发生变化,视图里的数据也随之变量,视图里数据变化,基表也会变化。

2.视图的作用
1. 视图可以让查询变得很清楚(复杂的SQL语句变得很简单)
2. 保护数据库的重要数据, 给不同的人看不同的数据

3.创建视图
CREATE [or REPLACE] [algorithm={merge|temptable|undefined}]
VIEW view_name [(column_list)] 
AS select_statement 
[with [cascaded|local] check option]

注:1.加上or replace可以替换已经存在的视图

2.column_list类似于别名,这里的列名要用数组1左边的那个引号括起来

3.视图有三种类型
            Merge: 会将引用视图的语句的文本与视图定义结合起来,使用得视图定义的某一部分取代语句的对应部分
                    Temptable:临时表,比较少用。
                    undefined : 没定义的时候倾向于Megre 
                4.with local check option     [local]只要满足本视图的条件就可以更新
           with cascaded check option  [cascaded]则是必须满足所有针对视图的条件,才可以更新

4.视图的操作

和基本表一样,查询、插入、更新、删除。

查看 show tables;

show table status like ‘stu2’  \G; 通过状态来分别基本表和视图

show  create view stu2 \G; 查看创建视图时的语句

select * from information_schema.views \G;  查看系统的全部视图

5.更改视图
ALTER [or replace] [algorithm={merge|temptable|undefined}]
VIEW view_name [(column_list)] 
AS select_statement 
[with [cascaded|local] check option]

11.数据库的备份与恢复

1.使用phpmyadmin或者workbench等图形化工具
2.拷贝数据库安装目录下的data文件夹中的内容,其中每一个文件夹对应一个数据库。此方法可能会因为数据库的不同版本等原因不兼容
3.使用命令行:
备份: mysqldump -u $user -p --default-character-set=gbk -d $dbname > $path
$user登录mysql的用户,要有足够的权限; -p后面输入密码可以回车后再输入; 其后的参数表示导出的字符集;
$dbname表示要备份的数据库名; $path为你生成的备份文件的绝对路径,包含文件名的
也可用-E -R等参数导出事件过程等,具体可以参考mysqldump命令
恢复: mysql -u $user -p $dbname < $path
   或者source $path

导入数据到一个表:LOAD DATA INFILE '$filename' INTO TABLE $tbname 

                                    FIELDS TERMINATED BY ','

                                    ENCLOSED BY '"'

                                    LINES TERMINATED BY '\r\n';

$filename 数据所在文件名,$tbname数据表名, 第二行表示每个字段的分隔符,第三行表示每个字段被双引号括起来,第四行表示每行以什么结束

12.更改数据库存放路径

Linux:

1、home目录下建立data目录
cd /home
mkdir data

2、把MySQL服务进程停掉:
service mysqld stop

3、把/var/lib/mysql整个目录移到/home/data
mv /var/lib/mysql /home/data/
或者 cp -R /var/lib/mysql /home/data/
这样就把MySQL的数据文档移动到了/home/data/mysql下

4、找到my.cnf配置文档
假如/etc/目录下没有my.cnf配置文档,请到/usr/share/mysql/下找到*.cnf文档,拷贝其中一个到/etc/并改名为my.cnf)中。命令如下:
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

5、编辑MySQL的配置文档/etc/my.cnf
为确保MySQL能够正常工作,需要指明mysql.sock文档的产生位置。修改socket=/var/lib/mysql/mysql.sock一行中等号右边的值为:/home/mysql/mysql.sock 。操作如下:
vi  my.cnf    (用vi工具编辑my.cnf文档,找到下列数据修改之)
# The MySQL server
[mysqld]
port=3306
#socket  = /var/lib/mysql/mysql.sock(原内容,为了更稳妥用“#”注释此行)
socket  = /home/data/mysql/mysql.sock   (加上此行)
datadir = /home/data/mysql
  

6、修改MySQL启动脚本/etc/init.d/mysql
最后,需要修改MySQL启动脚本/etc/init.d/mysql,把其中datadir=/var/lib/mysql一行中,等号右边的路径改成您现在的实际存放路径:home/data/mysql。
vi /etc/init.d/mysql
#datadir=/var/lib/mysql    (注释此行)
datadir=/home/data/mysql   (加上此行)
如果是CentOS还要改 /usr/bin/mysqld_safe 相关文件位置;

7.最后 做一个mysql.sock 链接:
ln -s /home/data/mysql/mysql.sock /var/lib/mysql/mysql.sock

8、重新启动MySQL服务
/etc/init.d/mysql start

9.假如工作正常移动就成功了,否则对照前面的7步再检查一下。

如果登录报错,很有可能是目录的属主和权限不对。
chown -R mysql:mysql /home/data/mysql/  ← 改变数据库的归属为mysql
chmod 700 /home/data/mysql/test/  ← 改变数据库目录属性为700
chmod 660 /home/data/mysql/test/*  ← 改变数据库中数据的属性为660

Windows:

如果是windows系统就要注意下面这些

a.假设你的mysql安装在c:\mysql,数据目录就是c:\mysql\data,现在你想在D 盘建立一个名为foo的数据库,路径为d:\data\foo. 
b.首先:保证d:\data\foo目录存在,如果没有就创建或 者你c:\mysql\data下面有,就把它剪切过来,当然在停止mysql的情况下作移动,否则是不起任何作用的。 
c.再次: 在c:\mysql\data目录下建立一个文本文件命名为foo.sym,文件名与数据库名相同,后缀名为sym,里面的内容为:D:\data \foo\,就是foo数据库的绝对路径。

13.查看数据库的状态以及日志

命令: show processlist; 
如果是root帐号,你能看到所有用户的当前连接。如果是其它普通帐号,只能看到自己占用的连接。 
show processlist;只列出前100条,如果想全列出请使用show full processlist;

命令: show status;

命令:show status like '%下面变量%';

Aborted_clients 由于客户没有正确关闭连接已经死掉,已经放弃的连接数量。 
Aborted_connects 尝试已经失败的MySQL服务器的连接的次数。 
Connections 试图连接MySQL服务器的次数。 
Created_tmp_tables 当执行语句时,已经被创造了的隐含临时表的数量。 
Delayed_insert_threads 正在使用的延迟插入处理器线程的数量。 
Delayed_writes 用INSERT DELAYED写入的行数。 
Delayed_errors 用INSERT DELAYED写入的发生某些错误(可能重复键值)的行数。 
Flush_commands 执行FLUSH命令的次数。 
Handler_delete 请求从一张表中删除行的次数。 
Handler_read_first 请求读入表中第一行的次数。 
Handler_read_key 请求数字基于键读行。 
Handler_read_next 请求读入基于一个键的一行的次数。 
Handler_read_rnd 请求读入基于一个固定位置的一行的次数。 
Handler_update 请求更新表中一行的次数。 
Handler_write 请求向表中插入一行的次数。 
Key_blocks_used 用于关键字缓存的块的数量。 
Key_read_requests 请求从缓存读入一个键值的次数。 
Key_reads 从磁盘物理读入一个键值的次数。 
Key_write_requests 请求将一个关键字块写入缓存次数。 
Key_writes 将一个键值块物理写入磁盘的次数。 
Max_used_connections 同时使用的连接的最大数目。 
Not_flushed_key_blocks 在键缓存中已经改变但是还没被清空到磁盘上的键块。 
Not_flushed_delayed_rows 在INSERT DELAY队列中等待写入的行的数量。 
Open_tables 打开表的数量。 
Open_files 打开文件的数量。 
Open_streams 打开流的数量(主要用于日志记载) 
Opened_tables 已经打开的表的数量。 
Questions 发往服务器的查询的数量。 
Slow_queries 要花超过long_query_time时间的查询数量。 
Threads_connected 当前打开的连接的数量。 
Threads_running 不在睡眠的线程数量。 
Uptime 服务器工作了多少秒。

查看MySQL是否启用了查看慢SQL的日志文件

(1) 查看慢SQL日志是否启用

mysql> show variables like 'log_slow_queries'; 
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| log_slow_queries | ON    |
+------------------+-------+
1 row in set (0.00 sec)

(2) 查看执行慢于多少秒的SQL会记录到日志文件中
mysql> show variables like 'long_query_time';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| long_query_time | 1     |   
+-----------------+-------+
1 row in set (0.00 sec)

这里value=1, 表示1秒

2. 配置my.ini文件(inux下文件名为my.cnf), 查找到[mysqld]区段,增加日志的配置,如下示例:
[mysqld]
log="C:/temp/mysql.log"
log_slow_queries="C:/temp/mysql_slow.log"
long_query_time=1
 
log指示日志文件存放目录;
log_slow_queries指示记录执行时间长的sql日志目录;
long_query_time指示多长时间算是执行时间长,单位s。
 
Linux下这些配置项应该已经存在,只是被注释掉了,可以去掉注释。但直接添加配置项也OK啦。

mysql常用命令锦集相关推荐

  1. 超详细的Linux常用命令锦集,推荐收藏!!!【持续更新】

    目录 Linux系统简介 Linux常用命令大全 一.系统操作相关命令 1.系统信息处理 2.系统重启及关机 二.文件操作相关命令 1.文件及目录操作 2.文件搜索操作 3.文件挂载系统 4.文件权限 ...

  2. MySQL常用命令合集及语法

    – 1 DDL(数据定义语言) 用于创建和删除数据库对象等操作 – 命令举例 create database(创建数据库) alter database(修改数据库) drop database(删除 ...

  3. MySql常用命令集Mysql常用命令showdatabases;显示数据库createdatab

    MySql 常用命令集 Mysql常用命令 show databases; 显示数据库 create database name; 创建数据库 use databasename; 选择数据库 drop ...

  4. MYSQL常用命令(转载)

    1.导出整个数据库 mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1) mysqld ...

  5. Mysql常用命令行大全

    Mysql常用命令行大全 第一招.mysql服务的启动和停止 net stop mysql net start mysql 第二招.登陆mysql 语法如下: mysql -u用户名 -p用户密码 键 ...

  6. Centos7常用命令合集

    Centos7常用命令合集 管理centos服务器的时候常会对文件进行一些常规操作,除了ftp之外了解在ssh下必要的文件操作命令那也是必不可少的,以下摘录一些常用的文件操作命令: 文件操作: ls ...

  7. MYSQL常用命令大全(收集的超全)!

    文章目录 一.MYSQL常用命令 1: 1.导出整个数据库 2.导出一个表 3.导出一个数据库结构 4.导入数据库 启动与退出 二.库操作 1.创建数据库 2.显示所有的数据库 3.删除数据库 4.连 ...

  8. Linux手册大合集,收藏!Linux常用命令合集

    收藏!Linux常用命令合集 1. 帮助命令 1.1 man 命令名称,man 的意思是 manual,即手册,对于大多数命令都可以使用这个命令来查看其使用的方法. 1.2 help 命令名称 或者 ...

  9. 收藏!Linux 常用命令合集

    收藏!Linux常用命令合集 1. 帮助命令 1.1 man 命令名称,man 的意思是 manual,即手册,对于大多数命令都可以使用这个命令来查看其使用的方法. 1.2 help 命令名称 或者 ...

最新文章

  1. Chrome v28 会在pwd目录下生成libpeerconnection.log文件
  2. python爬取贴吧所有帖子-python爬取贴吧帖子
  3. html5 css 万能的position大法
  4. 2012传统行业转型年:整合拓展互联网发展渠道
  5. mongo oplog 整理
  6. “爱因斯坦兄弟”事件轰动纽约时报!双胞胎乱写博士论文,整容后越黑越红,竟然名利双收..........
  7. IE下的一个安全BUG —— 可实时跟踪系统鼠标位置
  8. 适用电商BANNER的超酷炫抽象系几何时尚流行系列,PSD炫彩流体海报模板。
  9. hive 修改分桶数 分桶表_疯狂Hive之DDL操作二(三)
  10. Python3.4 枚举类型的使用
  11. 水下清淤机器人_国产第五代箱涵清淤机器人真机亮相上海城市管网展恒通环境展位...
  12. c语言字符串注入命令,C语言基础之输入输出、常量定义、随机数、动态链接库的注入、数据类型介绍、goto语句的使用...
  13. Vuex5.0?大菠萝Pinia挺好的~
  14. 不知道是真是假的流量购买---有待考察
  15. python允许无止境的循环_ParisGabriel:Python无止境 day07
  16. 模拟电路设计(39)---一文搞懂直流电源EMI滤波器
  17. 单车骑行红叶谷70KM
  18. OPPO R8107刷机教程 救砖解锁 刷机包下载
  19. Burp Suite爆破模块中的四种模式的区别详解和演示(暴力破解)
  20. windows10如何安装IIS6.0

热门文章

  1. linux命令行修改鼠标,Ubuntu系统里设置鼠标灵敏度
  2. 2017年4月26号课堂笔记
  3. python字符串长度补齐_Python补齐字符串长度的实例
  4. 月老办事处源码/脱单盲盒源码/交友盲盒源码/恋爱盲盒公众号版源码
  5. 那位退回了小黄车押金的大哥,已经花了两千块钱了
  6. OpenCV-python 证件照换底-利用函数inRange及滑动条creatTrackbar分割
  7. Windows10怎么进入安全模式
  8. HFSS一些使用技巧总结
  9. Xposed 之旅 -- 查看微信群成员入群方式
  10. 关于安防设备里的系统时间同步问题