Mysql常用用法总结

版本 日期 状态 修订人 摘要
V1.0 2016-03-28 创建 HunterFu 创建文档

在日常工作中,会简单的使用一下mysql,故对常见命令操作总结一下,常用方式如下

mysqldump 命令的使用

  1. 备份和导出数据库

    mysqldump -h database_ip -u Username -p --opt databasename > backup-file.sql
    
  2. 只导出数据库表结构

    mysqldump -h database_ip -d -u Username -p databasename >database_structure.sql
    
  3. 只导出数据库中的某个表

    mysqldump --opt --add-drop-table -u Username -p  databasename tablename > dump.sql
    
  4. 如果不想手工输入密码 请使用--password 参数

    mysqldump -h database_ip -u Username --password=123456 --opt databasename > backup-file.sql
    mysqldump -h database_ip -d -u Username --password=123456 databasename >database_structure.sql
    
  5. 修改root用户密码

    mysqladmin -u root password "123456"
    

mysql 命令使用

  1. 创建数据库表

    mysql> create database metl character set utf8 collate utf8_general_ci;
    

    注意后面这句话 “collate utf8_general_ci”,大致意思是在排序时根据utf8变码格式来排序
    那么在这个数据库下创建的所有数据表的默认字符集都会是utf8了

    mysql> create table my_table (name varchar(20) not null default '')  default charset utf8; 
    

    查看创建的数据库的默认编码

    MariaDB [(none)]> show create database cboard;
    +----------+-----------------------------------------------------------------+
    | Database | Create Database                                                 |
    +----------+-----------------------------------------------------------------+
    | cboard   | CREATE DATABASE `cboard` /*!40100 DEFAULT CHARACTER SET utf8 */ |
    +----------+-----------------------------------------------------------------+
    
  2. 将查询结果保存到文件

    select title from book into outfile '/tmp/outfile.txt';
    
  3. 查找表中多余的重复记录,重复记录是根据某个字段(peopleId)来判断

    select * from people where peopleId in (select  peopleId  from  people  group  by  
    peopleId  having  count(peopleId) > 1);
    
  4. 查询表中不重复记录(排除重复记录)

    select * from phome_ecms_wma where title in (select distinct title from phome_ecms_wma);
    
  5. 删除表中重复记录,重复记录是根据某个字段(title)来判断

    select *,count(distinct title) INTO OUTFILE '/tmp/table.bak' from phome_ecms_wma group by title;
    delete from phome_ecms_wma;
    LOAD DATA INFILE '/tmp/table.bak' REPLACE INTO TABLE phome_ecms_wma  character set utf8;
    
  6. 随机选取记录

    mysql> SELECT *FROM url  ORDER BY RAND() LIMIT 5;
    
  7. 查询数据库当前编码

    mysql> show variables like "character_set%";
    
  8. 修改表字段类型

    mysql> alter table  table_name change last_action last_action datetime NOT NULL default '0000-00-00 00:00:00';
    
  9. 给表添加一个新字段

    mysql> ALTER TABLE host ADD ks_mac VARCHAR(100);
    
  10. 从表中删除一个字段

    mysql> ALTER TABLE table_name DROP field_name; 
    
  11. 重命名表

    mysql>alter table t1 rename t2;
    
  12. 给字段加索引

    mysql> alter table tablename add index 索引名 (字段名1[,字段名2 …]);
    mysql> alter table tablename add index emp_name (name);
    
  13. 加主关键字的索引

    mysql> alter table tablename add primary key(id);
    
  14. 加唯一限制条件的索引

    mysql> alter table tablename add unique emp_name2(cardnumber);
    
  15. 删除某个索引

    mysql>alter table tablename drop index emp_name;
    
  16. 远程访问mysql 设置(单独一个IP)

    mysql> CREATE DATABASE IF NOT EXISTS database_test;
    mysql> GRANT ALL PRIVILEGES ON database_test.* to root@192.168.1.9  IDENTIFIED BY '123456';
    mysql> FLUSH PRIVILEGES;
    
  17. 授权远程访问(一个网段)

    mysql> grant all privileges on *.* to root@'192.168.124.%' identified by '123456';
    mysql> FLUSH PRIVILEGES;
    

shell 命令中 mysql 使用

mysql -u root -p -e 'CREATE DATABASE IF NOT EXISTS database_test;'
mysql -u root -p -e "GRANT ALL PRIVILEGES ON database_test.* to root@'%' IDENTIFIED BY '123456';"