使用MySQL

这里介绍使用命令行的方式,可视化界面的操作请参考msql工具
目的:连接和登录MySQL,如何用USE 选择数据库,如何用SHOW 查看MySQL数据库、表和内部信息。

连接

  1. #链接本地
  2. mysql -u root -p
  3. # 链接远程计算机
  4. mysql -h 110.110.110.110 -u root -p 123;
  5. exit # 退出

数据库/表操作

查看有什么数据库

  1. mysql> show databases;
  2. +--------------------+
  3. | Database |
  4. +--------------------+
  5. | information_schema |
  6. | mysql |
  7. | performance_schema |
  8. | sys |
  9. +--------------------+
  10. 4 rows in set (0.07 sec)

进入数据库

  1. mysql> use mysql;
  2. Database changed

查看有什么表

  1. mysql> show tables;
  2. +---------------------------+
  3. | Tables_in_mysql |
  4. +---------------------------+
  5. | columns_priv |
  6. | db |
  7. | engine_cost |
  8. | event |
  9. | user |
  10. +---------------------------+
  11. 31 rows in set (0.01 sec)

查看表有什么列

  1. mysql> show columns from db;
  2. +-----------------------+---------------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +-----------------------+---------------+------+-----+---------+-------+
  5. | Host | char(60) | NO | PRI | | |
  6. | Db | char(64) | NO | PRI | | |
  7. | User | char(32) | NO | PRI | | |
  8. | Select_priv | enum('N','Y') | NO | | N | |
  9. | Insert_priv | enum('N','Y') | NO | | N | |
  10. +-----------------------+---------------+------+-----+---------+-------+
  11. 22 rows in set (0.00 sec)

show支持的其他命令

  1. mysql> help show;
  2. Name: 'SHOW'
  3. Description:
  4. SHOW has many forms that provide information about databases, tables,
  5. columns, or status information about the server. This section describes
  6. those following:
  7. SHOW {BINARY | MASTER} LOGS
  8. SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
  9. SHOW CHARACTER SET [like_or_where]
  10. SHOW COLLATION [like_or_where]
  11. SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [like_or_where]
  12. SHOW CREATE DATABASE db_name
  13. SHOW CREATE EVENT event_name
  14. SHOW CREATE FUNCTION func_name
  15. SHOW CREATE PROCEDURE proc_name
  16. ………………………………

示例:

显示表的创建信息:

  1. show create table db;
  2. CREATE TABLE `db` (
  3. `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
  4. `Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
  5. `User` char(32) COLLATE utf8_bin NOT NULL DEFAULT '',
  6. `Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  7. `Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  8. `Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  9. `Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  10. PRIMARY KEY (`Host`,`Db`,`User`),
  11. KEY `User` (`User`)
  12. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Database privileges'

显示mysql当前状态(配置)信息:

  1. mysql> SHOW STATUS;
  2. +-----------------------------------------------+--------------------------------------------------+
  3. | Variable_name | Value |
  4. +-----------------------------------------------+--------------------------------------------------+
  5. | Aborted_clients | 0 |
  6. | Aborted_connects | 0 |
  7. | Binlog_cache_disk_use | 0 |
  8. | Binlog_cache_use | 0 |
  9. | Binlog_stmt_cache_disk_use | 0 |
  10. | Binlog_stmt_cache_use | 0 |
  11. | Bytes_received | 1029 |
  12. | Bytes_sent | 29084 |
  13. | Com_admin_commands | 0 | |

显示所有授权信息

  1. mysql> show grants;
  2. +---------------------------------------------------------------------+
  3. | Grants for root@localhost |
  4. +---------------------------------------------------------------------+
  5. | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
  6. | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
  7. +---------------------------------------------------------------------+
  8. 2 rows in set (0.00 sec)

基础

登录

密码

  1. # 修改密码
  2. update user set password=password('123') where user='root' and host='localhost';
  3. flush privileges;
  4. # 重置密码步骤:
  5. # 关闭服务
  6. net stop mysql
  7. # 启动服务
  8. mysqld --console --skip-grant-tables
  9. # 修改密码
  10. use mysql;
  11. update user set password=password('abc') WHERE User='root';

管理用户

创建

  1. CREATE USER 'usernamexxx'@'hostxxx' IDENTIFIED BY 'passwordxxx';

示例:

  1. 1. CREATE USER 'jack'@'localhost' IDENTIFIED BY '123456'; # 本地用户登录
  2. 2. CREATE USER 'rose'@'192.168.38.110_' IDENDIFIED BY '123456'; # 指定IP白名单
  3. 3. CREATE USER 'rose'@'%' IDENTIFIED BY '123456'; # 开放所有IP
  4. 4. CREATE USER 'rose'@'%' IDENTIFIED BY ''; # 不设置密码,和下面一样
  5. 5. CREATE USER 'rose'@'%';

授权
参考:https://blog.csdn.net/huxinguang_ios/article/details/80887175

  1. GRANT privilegesxxx ON databasenamexxx.tablenamexxx TO 'usernamexxx'@'hostxxx'

示例:

  1. GRANT SELECT, INSERT ON DbXXX.user TO 'jack'@'%';
  2. GRANT ALL ON *.* TO 'jack'@'%';
  3. GRANT ALL ON DbXXX.* TO 'jack'@'%';
  4. # 增加一个用户test1密码为abc
  5. grant select,insert,update,delete on *.* to [email=test1@%]test1@%[/email] Identified by abc”;
  6. # 增加一个用户test2密码为abc,让他只可以在localhost上登录
  7. grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email] identified by abc”;

常用操作

数据库

  1. # 查看
  2. SHOW databases; # 查看所有数据库
  3. SHOW CREATE DATABASE 数据库名 # 查看某个数据库的定义信息
  4. SELECT DATABASE(); # 查看正在使用的数据库
  5. # 创建
  6. create database db2 # 创建
  7. CREATE DATABASE IF NOT EXISTS db2; # 创建:避免报错
  8. # 删除
  9. drop database mydatabase # 删除数据库
  10. # 切换
  11. use mydatabase # 切换使用数据库

数据表

  1. # 新建表
  2. create table 表名 # 新建
  3. CREATE TABLE 新表名 LIKE 旧表名; # 根据已有表结构
  4. # 查看表
  5. show tables; # 查看数据库中的所有表:
  6. desc 表名 # 查看表结构,(等效于show columns from 表名)
  7. # 修改表
  8. rename table 原表名 to 新表名;
  9. # 删除表
  10. drop table name # 删除
  11. DROP TABLE IF EXISTS 表名; # 不会报错

约束

  • 常用约束
  1. 主键:PRIMARY KEY
  2. 外键:FOREIGN KEY REFERENCES
  3. 默认值:DEFAULT
  4. 唯一值:UNIQUE
  5. 不为空:NOT NULL
  6. 自增长:AUTO_INCREMENT
  • 常用操作
  1. # 默认约束名
  2. 字段 DEFAULT 123 # 默认值
  3. # 自定义约束名
  4. CONSTRAINT 约束名 PRIMARY KEY (firstName) # 主键
  5. CONSTRAINT 约束名 FOREIGN KEY (in_dpt) REFERENCES department(dpt_name) # 外键
  6. # 后期添加约束
  7. ALTER TABLE Persons ADD PRIMARY KEY (firstName,lastName) # 无名称
  8. ALTER TABLE Persons ADD [CONSTRAINT 名称] UNIQUE (Id_P) # 添加时有名称
  9. # 删除约束
  10. ALTER TABLE Persons DROP PRIMARY KEY 名称 # 删除主键

索引

  1. # 增加索引
  2. alter table 表名 add index 索引名 (字段名1[,字段名2 …]);
  3. # 删除索引
  4. alter table 表名 drop index 索引名;

字段

  1. # 新建字段
  2. alter table 表名 add 字段 类型; # 字段增加
  3. # 修改字段
  4. ALTER TABLE 表名 MODIFY 列名 数据类型; # 字段修改
  5. ALTER TABLE 表名 CHANGE 列名 新列名 数据类型; # 字段修改
  6. # 删除字段
  7. ALTER TABLE table_name DROP 列名; # 字段删除

视图

  1. # 创建视图
  2. CREATE OR REPLACE VIEW view_name AS
  3. SELECT column_name(s)
  4. FROM table_name
  5. WHERE condition
  6. # 删除视图
  7. drop view 视图名

存储过程

  1. CREATE DEFINER=`root`@`%` PROCEDURE `myproc`(in p varchar(20))
  2. BEGIN
  3. -- 定义所有变量
  4. DECLARE v1 varchar(20);
  5. DECLARE n int;
  6. -- 赋值
  7. set n=200;
  8. -- 循环
  9. while(n >= 0) do
  10. -- 执行sql,注意引号的使用
  11. insert into ceshi2(`udata`) values(p);
  12. set n=n-1;
  13. end while;
  14. -- 判断
  15. IF i< 10 then
  16. -- 字符串拼接
  17. SET tblname = CONCAT(dbname,'.order_release_record_',tableNm,'_0',i);
  18. ELSE
  19. SET tblname = CONCAT(dbname,'.order_release_record_',tableNm,'_',i);
  20. END IF;
  21. END

其他

编码

  • 修改库和表的编码 ```

    修改数据库编码

    ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;

修改表编码

ALTER TABLE 表名 character set 字符集;

  1. > 当我们使用DOS命令行进行SQL语句操作如有有中文会出现乱码,导致SQL执行失败
  2. - 查看编码设置

show variables like ‘character%’;

  1. - 临时设置(退出dos无效)
  2. ```mysql
  3. set character_set_client=gbk;
  4. set character_set_connection=gbk;
  5. set character_set_results=gbk;
  • 永久设置(不推荐)

    修改MySQL安装目录下的my.ini文件,重启服务所有地方生效。此方案将所有编码都修改了[不建议]

select 特殊用法

  1. select version(); #输出版本
  2. select database(); # 输出当前数据库
  3. select now(); # 显示当前时间:2017-11-29 14:33:26
  4. SELECT DAYOFMONTH(CURRENT_DATE); # 显示日
  5. SELECT MONTH(CURRENT_DATE); # 显示月
  6. SELECT YEAR(CURRENT_DATE); # 显示年
  7. SELECT "welecome to my blog!"; # 显示字符串
  8. select ((4 * 4) / 10 ) + 25; # 当作计算器

导入导出

不包括数据库名,包括表视图

  • sql文件
  1. # 数据库内导入
  2. source c:/school.sql
  3. # 数据库外导入
  4. mysql -uroot -proot day03<d:\day03.sql
  5. ===================================
  6. # 导出整个数据库
  7. mysqldump -u 用户名 -p 数据库名 > 导出的文件名
  8. # 导出一个表
  9. mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
  10. #导出一个数据库结构.
  11. mysqldump -u user_name -p -d add-drop-table database_name > outfile_name.sql
  1. # 文本-->数据库
  2. LOAD DATA INFILE '文件路径和文件名' INTO TABLE 表名字;
  3. # 数据库 --> 文本
  4. SELECT FROM 表名字 INTO OUTFILE '文件路径和文件名' ;

注释

  1. 1 创建表的时候写注释
  2. create table test1
  3. ( field_name int comment '字段的注释'
  4. )comment='表的注释';
  5. alter table test1 comment '修改后的表的注释'; 修改表的注释
  6. alter table test1 modify column field_name int comment '修改后的字段注释'; # 修改字段的注释
  7. show create table test1; 查看表注
  8. show full columns from test1; # 查看字段注释

蠕虫复制

在已有的数据基础之上,将原来的数据进行复制

  1. INSERT INTO student2 SELECT * FROM student;

新建表示例

  1. drop database if exists school; //如果存在SCHOOL则删除
  2. create database school; //建立库SCHOOL
  3. use school; //打开库SCHOOL
  4. create table teacher //建立表TEACHER
  5. (
  6. id int(3) auto_increment not null primary key,
  7. name char(10) not null,
  8. address varchar(50) default ‘深圳’,
  9. year date
  10. ); //建表结束
  11. //以下为插入字段
  12. insert into teacher values(”,’allen’,'大连一中’,'1976-10-10′);
  13. insert into teacher values(”,’jack’,'大连二中’,'1975-12-23′);

设置执行日志

参考:https://blog.csdn.net/qidaif/article/details/80931703
默认没有开启日志,如果我们想要知道所有查询情况,需要打开。
1、查看是否打开

  1. SHOW VARIABLES LIKE "general_log%";
  1. +------------------+----------------------------------+
  2. | Variable_name | Value |
  3. +------------------+----------------------------------+
  4. | general_log | OFF |
  5. | general_log_file | /var/lib/mysql/galley-pc.log |
  6. +------------------+----------------------------------+
  7. 2 rows in set (0.00 sec)

2.1、临时打开

  1. mysql> SET GLOBAL general_log = 'ON';
  2. mysql> SET GLOBAL general_log_file = '/var/log/mysql/general_log.log';

2.2、永久打开

配置my.cnf文件

  1. general_log = 1
  2. general_log_file = /var/log/mysql/general_sql.log

查看mysql库大小,表大小,索引大小

通过MySQL的 information_schema 数据库,可查询数据库中每个表占用的空间、表记录的行数。

  • 查看库大小

    1. select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES where table_schema='jishi';
  • 查看表大小

    1. select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES where table_schema='jishi' and table_name='a_ya';
  • 查看指定库的索引大小

    1. SELECT CONCAT(ROUND(SUM(index_length)/(1024*1024), 2), ' MB') AS 'Total Index Size' FROM TABLES WHERE table_schema = 'jishi';
  • 查看指定表的索引大小

    1. SELECT CONCAT(ROUND(SUM(index_length)/(1024*1024), 2), ' MB') AS 'Total Index Size' FROM TABLES WHERE table_schema = 'test' and table_name='a_yuser';
  • 查看整个库的使用情况(行数、大小、索引)

    1. SELECT CONCAT(table_schema,'.',table_name) AS 'Table Name', CONCAT(ROUND(table_rows/1000000,4),'M') AS 'Number of Rows', CONCAT(ROUND(data_length/(1024*1024*1024),4),'G') AS 'Data Size', CONCAT(ROUND(index_length/(1024*1024*1024),4),'G') AS 'Index Size', CONCAT(ROUND((data_length+index_length)/(1024*1024*1024),4),'G') AS'Total'FROM information_schema.TABLES WHERE table_schema LIKE 'memory';

    image.png