mysql常用命令锦集
最近学习mysql数据库,收获不少,在此记录,以便日后查阅。
1.启动服务
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 "%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
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.数据库的备份与恢复
导入数据到一个表: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常用命令锦集相关推荐
- 超详细的Linux常用命令锦集,推荐收藏!!!【持续更新】
目录 Linux系统简介 Linux常用命令大全 一.系统操作相关命令 1.系统信息处理 2.系统重启及关机 二.文件操作相关命令 1.文件及目录操作 2.文件搜索操作 3.文件挂载系统 4.文件权限 ...
- MySQL常用命令合集及语法
– 1 DDL(数据定义语言) 用于创建和删除数据库对象等操作 – 命令举例 create database(创建数据库) alter database(修改数据库) drop database(删除 ...
- MySql常用命令集Mysql常用命令showdatabases;显示数据库createdatab
MySql 常用命令集 Mysql常用命令 show databases; 显示数据库 create database name; 创建数据库 use databasename; 选择数据库 drop ...
- MYSQL常用命令(转载)
1.导出整个数据库 mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1) mysqld ...
- Mysql常用命令行大全
Mysql常用命令行大全 第一招.mysql服务的启动和停止 net stop mysql net start mysql 第二招.登陆mysql 语法如下: mysql -u用户名 -p用户密码 键 ...
- Centos7常用命令合集
Centos7常用命令合集 管理centos服务器的时候常会对文件进行一些常规操作,除了ftp之外了解在ssh下必要的文件操作命令那也是必不可少的,以下摘录一些常用的文件操作命令: 文件操作: ls ...
- MYSQL常用命令大全(收集的超全)!
文章目录 一.MYSQL常用命令 1: 1.导出整个数据库 2.导出一个表 3.导出一个数据库结构 4.导入数据库 启动与退出 二.库操作 1.创建数据库 2.显示所有的数据库 3.删除数据库 4.连 ...
- Linux手册大合集,收藏!Linux常用命令合集
收藏!Linux常用命令合集 1. 帮助命令 1.1 man 命令名称,man 的意思是 manual,即手册,对于大多数命令都可以使用这个命令来查看其使用的方法. 1.2 help 命令名称 或者 ...
- 收藏!Linux 常用命令合集
收藏!Linux常用命令合集 1. 帮助命令 1.1 man 命令名称,man 的意思是 manual,即手册,对于大多数命令都可以使用这个命令来查看其使用的方法. 1.2 help 命令名称 或者 ...
最新文章
- Chrome v28 会在pwd目录下生成libpeerconnection.log文件
- python爬取贴吧所有帖子-python爬取贴吧帖子
- html5 css 万能的position大法
- 2012传统行业转型年:整合拓展互联网发展渠道
- mongo oplog 整理
- “爱因斯坦兄弟”事件轰动纽约时报!双胞胎乱写博士论文,整容后越黑越红,竟然名利双收..........
- IE下的一个安全BUG —— 可实时跟踪系统鼠标位置
- 适用电商BANNER的超酷炫抽象系几何时尚流行系列,PSD炫彩流体海报模板。
- hive 修改分桶数 分桶表_疯狂Hive之DDL操作二(三)
- Python3.4 枚举类型的使用
- 水下清淤机器人_国产第五代箱涵清淤机器人真机亮相上海城市管网展恒通环境展位...
- c语言字符串注入命令,C语言基础之输入输出、常量定义、随机数、动态链接库的注入、数据类型介绍、goto语句的使用...
- Vuex5.0?大菠萝Pinia挺好的~
- 不知道是真是假的流量购买---有待考察
- python允许无止境的循环_ParisGabriel:Python无止境 day07
- 模拟电路设计(39)---一文搞懂直流电源EMI滤波器
- 单车骑行红叶谷70KM
- OPPO R8107刷机教程 救砖解锁 刷机包下载
- Burp Suite爆破模块中的四种模式的区别详解和演示(暴力破解)
- windows10如何安装IIS6.0