MySQL常用命令
MySQL导入导出数据
导出数据
# 导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u[username] -p[password] --opt name_db > /backup/databases/name_db.sql.`date +"%Y-%m-%d-%H-%M-%S"`
# 导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u dbuser -p dbname users> /backup/databases/dbname_users.sql.`date +"%Y-%m-%d-%H-%M-%S"`
# 导出一个数据库结构
mysqldump -u dbuser -p -d --add-drop-table dbname > d:/dbname_db.sql.`date +"%Y-%m-%d-%H-%M-%S"`
# -d 没有数据
# --add-drop-table 在每个create语句之前增加一个drop table导入数据
# 常用source 命令
# 登录mysql数据库
mysql -u root -p
# 选择数据库
mysql>use 数据库
# 然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source d:/dbname.sql查找空表
未选择数据库
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_ROWS = 0 AND TABLE_SCHEMA = 'your_db_name' AND table_name LIKE '%Prefix_%' 已选择了数据库
SHOW TABLE STATUS WHERE Rows = 0;Windows下使用powershell和mysqldump导出指定tables结构
鉴于powershell坑爹的utf8字符集太烦了,所以选择使用批处理来导出tables结构
@echo off
::需要备份的数据表文件
set tables_file=test.txt
::需要备份的数据库名称
set db_name=test
::设置导出的文件名称
set outfile=result.sql
for /f "delims=[" %%i in (%tables_file%) do mysqldump.exe -d %db_name% --tables %%i >> %outfile%其中mysqldump没有输入账号密码,是因为How to perform a mysqldump without a password prompt?
在mysql配置文件中添加:
[mysqldump]
user=mysqluser
password=secret这样脚本运行的时候就不需要再输入用户密码了,防止其他用户使用ps ax命令查看历史命令记录从而获知账号密码
创建唯一索引(unique)
新建表时创建唯一索引
CREATE TABLE table_name
(
id INT NOT NULL,
name CHAR(30) NOT NULL,
UNIQUE INDEX UniqIdx(id) # UniqIdx 索引名称
);查看唯一索引(查看表结构)
mysql> show create table table_name \G
*************************** 1. row ***************************
Table: table_name
Create Table: CREATE TABLE `table_name` (
`id` int(11) NOT NULL,
`name` char(30) COLLATE utf8_unicode_ci NOT NULL,
UNIQUE KEY `UniqIdx` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
1 row in set (0.00 sec)在已存在的表上创建唯一索引
添加索引之前,查看指定表中创建的索引
mysql> SHOW INDEX FROM table_name \G
*************************** 1. row ***************************
Table: table_name
Non_unique: 1
Key_name: nameind
Seq_in_index: 1
Column_name: name
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
1 row in set (0.00 sec)Table 表示创建索引的表
Non_unique 表示索引非唯一,1代表非唯一索引,0代表唯一索引
Key_name 表示索引的名称
Seq_in_index 表示该字段在索引中的位置,单列索引值为1,组合索引为每个字段在索引定义中的顺序
Column_name 表示定义索引的列字段
Sub_part 表示索引的长度
Null 表示该字段是否能为空值
Index_type 表示索引类型
添加唯一索引
##使用 ALTER 添加索引
# UniqidIdx 表示索引名称
# name 表示要当作唯一索引的字段名称
mysql> ALTER TABLE table_name ADD UNIQUE INDEX UniqidIdx (name);
##
## 查看索引
mysql> SHOW INDEX FROM table_name \G
*************************** 1. row ***************************
Table: table_name
Non_unique: 0
Key_name: UniqidIdx
Seq_in_index: 1
Column_name: name
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
1 row in set (0.00 sec)
删除索引
ALTER TABLE table_name DROP INDEX index_name;
# 或者
DROP INDEX index_name ON table_name;注意:添加AUTO_INCREMENT约束字段的唯一索引不能被删除
常规操作
登录:mysql -u root -p [password]
指定IP地址和端口号登录MySQL数据库
命令格式为:mysql -h ip -u root -p -P 3306例如:mysql -h 127.0.0.1 -u root -p -P 3306
显示数据库列表:show databases;
切换数据库:use [database_name];
显示数据表:show tables;
建立数据库:create database [database_name];
建立数据表:create table [table_name];
删除数据库:drop database [database_name];
删除数据表:drop table [table_name];
查看用户权限show grants for 'user'@'localhost';
赋予用户权限GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost';
ALL 代表所有权限
*.* 代表所有数据库,你可以指定数据库和数据表,例如 shop.goods,这个表示 shop数据库的 goods 表
更改用户密码
对于 10.2.0 之前的 MariaDB 版本(MySQL 5.7.6 之前),不支持使用 ALTER USER 语法更改密码。取而代之的是 SET PASSWORD 命令。下面是使用该命令更改用户密码的方法:
SET PASSWORD FOR 'username'@'localhost' = PASSWORD('newpassword');在 10.2.0 及更高版本中(MySQL 5.7.6 之后)
ALTER USER 'username'@'hostname' IDENTIFIED BY 'newpassword';
FLUSH PRIVILEGES;
EXIT;列出所有用户
SELECT User, Host FROM mysql.user;
评论已关闭