MySQL应用管理常用命令2

1、创建数据库
mysql> create database martin;
Query OK, 1 row affected (0.05 sec)

mysql> show create database martin\G;
*************************** 1. row ***************************
       Database: martin
Create Database: CREATE DATABASE `martin` /*!40100 DEFAULT CHARACTER SET latin1 */
1 row in set (0.00 sec)

mysql> create database martin_gbk DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;     #gbk 代表字符集 gbk_chinese_ci代表校对规则
Query OK, 1 row affected (0.00 sec)

mysql> show create database martin_gbk\G;                                          
*************************** 1. row ***************************
       Database: martin_gbk
Create Database: CREATE DATABASE `martin_gbk` /*!40100 DEFAULT CHARACTER SET gbk */
1 row in set (0.00 sec)

mysql> create database martin_utf8 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;  #utf8 编码,字符集的不一致时数据库乱码的罪魁祸首
Query OK, 1 row affected (0.00 sec)

mysql> show create database martin_utf8\G;                                            
*************************** 1. row ***************************
       Database: martin_utf8
Create Database: CREATE DATABASE `martin_utf8` /*!40100 DEFAULT CHARACTER SET utf8 */
1 row in set (0.00 sec)

编译时候指定了特定的字符集,则以后创建的数据库就不需要指定字符集了

企业环境怎么创建数据库
1、根据开发的程序确定字符集  建议utf8
2、编译时候指定字符集
3、然后建库的时候默认创建即可

显示数据库
mysql> show  databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| martin             |
| martin_gbk         |
| martin_utf8        |
| mysql              |
| performance_schema |
| test               |
+--------------------+
7 rows in set (0.21 sec)

mysql> show  databases like ‘mar%‘;   
+-----------------+
| Database (mar%) |
+-----------------+
| martin          |
| martin_gbk      |
| martin_utf8     |
+-----------------+
3 rows in set (0.00 sec)

删除数据库
mysql> drop database martin;
Query OK, 0 rows affected (0.27 sec)

连接数据库
mysql> use mysql;
Database changed

查看当前连接的数据库
mysql> select database();
+------------+
| database() |
+------------+
| mysql      |
+------------+
1 row in set (0.00 sec)

查看当前的用户
mysql> select user();
+----------------+
| user()         |
+----------------+
| [email protected] |
+----------------+
1 row in set (0.00 sec)

查看当前数据库包含的表信息
mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
24 rows in set (0.03 sec)

删除用户
语法: drop user ‘user‘@‘主机名‘

mysql> select user,host from mysql.user; 
+--------+-----------+
| user   | host      |
+--------+-----------+
| root   | 127.0.0.1 |
| root   | ::1       |
| root   | centos02  |
| root   | localhost |
| system | localhost |
+--------+-----------+
5 rows in set (0.00 sec)

mysql> drop user ‘root‘@‘::1‘;
    
Query OK, 0 rows affected (0.05 sec)

mysql> select user,host from mysql.user;
+--------+-----------+
| user   | host      |
+--------+-----------+
| root   | 127.0.0.1 |
| root   | centos02  |
| root   | localhost |
| system | localhost |
+--------+-----------+
4 rows in set (0.00 sec)

创建mysql用户及赋予用户权限
mysql> grant all on martin.* to [email protected]‘localhost‘ identified by ‘123456‘;  #在创建用户时候同时进行授权
Query OK, 0 rows affected (0.05 sec)

mysql> select user,host from mysql.user;                                  
+--------+-----------+
| user   | host      |
+--------+-----------+
| root   | 127.0.0.1 |
| root   | centos02  |
| root   | localhost |
| system | localhost |
| zabbix | localhost |
+--------+-----------+
5 rows in set (0.00 sec)

mysql> show grants for [email protected]‘localhost‘;
+---------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                   |
+---------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO ‘zabbix‘@‘localhost‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘ |
| GRANT ALL PRIVILEGES ON `martin`.* TO ‘zabbix‘@‘localhost‘                                                    |
+---------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> grant all on martin.* to [email protected]‘localhost‘ identified by ‘123456‘;  #在创建用户时候同时进行授权
等同于下面两句话
mysql> create user [email protected]‘localhost‘ identified by ‘123456‘;  创建用户及设置用户密码

grant all on zabbix.* [email protected]‘localhost‘;  授权

mysql> create user [email protected]‘localhost‘ identified by ‘123456‘;        创建用户不进行授权,默认是USAGE 权限
Query OK, 0 rows affected (0.00 sec)

mysql> 
mysql> 
mysql> show grants for [email protected]‘localhost‘;
+------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                   |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO ‘martin123‘@‘localhost‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘ |
+------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

授权局域网内主机远程连接数据库
mysql> grant all on martin.* to [email protected]‘172.16.80.%‘ identified by ‘123456‘;

通过实验获得 all privilege  到底有哪些权限

mysql> show grants for [email protected]‘localhost‘;
+---------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                   |
+---------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO ‘zabbix‘@‘localhost‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘ |
| GRANT ALL PRIVILEGES ON `martin`.* TO ‘zabbix‘@‘localhost‘                                                    |
+---------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> revoke insert on martin.* from  ‘zabbix‘@‘localhost‘;   #回收insert权限
Query OK, 0 rows affected (0.01 sec)

mysql> show grants for [email protected]‘localhost‘;                  
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                                                                                                                                      |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO ‘zabbix‘@‘localhost‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘                                                                                                                    |
| GRANT SELECT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `martin`.* TO ‘zabbix‘@‘localhost‘ |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

可以看到剩下的权限有
SELECT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE
CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER

mysql> select * from mysql.user\G;
*************************** 1. row ***************************
                  Host: localhost
                  User: root
              Password: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y

企业生产环境如何授权用户权限
1、博客 cms等产品的数据库授权:
对于web连接用户授权尽量采用最小化原则,很多开源软件都是web界面安装,因此在安全期间除了
select insert update delete 4个权限外,还需要create drop 等比较危险的权限
mysql> grant select,insert,update,delete,create,drop on blog.* to [email protected]‘172.16.80.%‘ identified by ‘123456‘;

2、生成数据库表后,要回收create drop授权
revoke  create on blog.* from blog @‘172.16.80.%‘;
revoke  drop on blog.* from blog @‘172.16.80.%‘;

创建表语法
create table 表名 (字段名1  类型1,字段名n,类型n);

mysql> create table student(id int(4) not null,name char(20) not null, age tinyint(20) not null default 0,dept varchar(16) default null);
Query OK, 0 rows affected (0.21 sec)

查看建表的结构
mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(4)      | NO   |     | NULL    |       |
| name  | char(20)    | NO   |     | NULL    |       |
| age   | tinyint(20) | NO   |     | 0       |       |
| dept  | varchar(16) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.03 sec)

查看已建表的语句
mysql> show create table student \G;
*************************** 1. row ***************************
       Table: student
Create Table: CREATE TABLE `student` (
  `id` int(4) NOT NULL,
  `name` char(20) NOT NULL,
  `age` tinyint(20) NOT NULL DEFAULT ‘0‘,
  `dept` varchar(16) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.03 sec)

为表的字段创建索引
索引就像书的目录一样,如果在字段上建立了索引,那么以索引列为查询条件时可以加快查询速度,这是mysql优化的重要内容之一

建立主键索引
mysql> create table student1(id int(4) not null AUTO_INCREMENT,
name char(20) not null, age tinyint(20) not null default 0,dept varchar(16) default null,
primary key(id),
key index_name(name)
);

primary key(id)  表示主键
key index_name(name)  name字段普通索引

mysql> desc student1;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(4)      | NO   | PRI | NULL    | auto_increment |
| name  | char(20)    | NO   | MUL | NULL    |                |
| age   | tinyint(20) | NO   |     | 0       |                |
| dept  | varchar(16) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

利用alter命令修改id列为自增主键列 (一般在建表的时候就该创建主键,所以一般不这样使用)
mysql> desc student; 
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(4)      | NO   |     | NULL    |       |
| name  | char(20)    | NO   |     | NULL    |       |
| age   | tinyint(20) | NO   |     | 0       |       |
| dept  | varchar(16) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> 
mysql> 
mysql> alter table student change id id int primary key auto_increment;
Query OK, 0 rows affected (0.22 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc student;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | char(20)    | NO   |     | NULL    |                |
| age   | tinyint(20) | NO   |     | 0       |                |
| dept  | varchar(16) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

增加索引
mysql> alter table student add index index_name(name);
Query OK, 0 rows affected (1.63 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc student;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | char(20)    | NO   | MUL | NULL    |                |
| age   | tinyint(20) | NO   |     | 0       |                |
| dept  | varchar(16) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

删除索引
mysql> alter table student drop index index_name;      
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc student;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | char(20)    | NO   |     | NULL    |                |
| age   | tinyint(20) | NO   |     | 0       |                |
| dept  | varchar(16) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

问题1:既然索引可以加快查询速度,那么给所有的列建索引吧?
解答:因为索引不但占用系统空间,更新数据库时还需要维护索引数据的,因此,索引是一把双刃剑,并不是越多越好

问题2:需要在哪些列上创建索引?
解答:select user,host from mysql.user where host=... 索引一定要创建在where后的条件列上,而不是select后的选择数据的列
时间: 2024-10-25 09:24:14

MySQL应用管理常用命令2的相关文章

MySQL应用管理常用命令

登录mysqlmysql -urot -p  单实例 mysql -uroot -p -S /data/3306/mysql.sock  多实例MySQL帮助命令helpmysql> helpFor information about MySQL products and services, visit:   http://www.mysql.com/For developer information, including the MySQL Reference Manual, visit:  

MySQL应用管理常用命令1

8.登录mysql mysql -urot -p  单实例 mysql -uroot -p -S /data/3306/mysql.sock  多实例 9.MySQL帮助命令help mysql> help For information about MySQL products and services, visit:    http://www.mysql.com/ For developer information, including the MySQL Reference Manual

MySQL应用管理常用命令3

insert插入语句 mysql> create table test (id int(4) not null auto_increment,name char(20) not null,primary key (id)); mysql> insert into test(id,name) values(1,'martin'); Query OK, 1 row affected (0.03 sec) mysql> insert into test(name) values('martin

linux日常管理常用命令--w

linux日常管理常用命令--w 命令:w(linux管理员最常用的命令) [[email protected] ~]# w 14:45:41 up 2 min,  2 users,  load average: 0.10, 0.10, 0.04 USER     TTY      FROM              [email protected]   IDLE   JCPU   PCPU WHAT root     tty1     -                14:44   54.

linux系统-用户管理-常用命令

linux系统-用户管理-常用命令 一 用户 1 useradd 用户名 [-参数].. 2 passwd 改密码 3 usermod 修改用户的信息 [-G 添加用户到用户组] [-L禁用用户][-U恢复用户] 二 用户组 1 groupadd 组名 [-参数] 添加用户组 2 groupdel  删除用户组 3 groupmod 设置信息 三 用户与用户组 1 添加用户到用户组:gpasswd -a 用户组 用户 2 用户组删除用户:gpasswd -d 用户 3 设置用户组管理员:gpas

web管理常用命令

实时查看正在执行的sql语句 # /usr/sbin/tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | egrep -i 'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL' 查看http连接 netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"t&q

Mysql数据库操作常用命令

转自微信公众号“MySQL数据库”:http://mp.weixin.qq.com/s?__biz=MzIyNjIwMzg4Ng==&mid=2655293044&idx=1&sn=e312934e5115105fdbe5da12af150276&scene=0#wechat_redirect [全了]Mysql数据库操作常用命令 2016-07-21 MySQL数据库 1.MySQL常用命令 create database name; 创建数据库 use database

Linux学习笔记一 磁盘管理常用命令

Linux学习笔记一 磁盘管理常用命令 Linux系统下,一切均是文件,磁盘是一种特殊的块设备文件. 常用的硬盘接口类型 并口:IDE ,SCSI 串口:SATA,SAS 磁盘设备文件设备文件的命令规则: IDE: 设备名为/dev/hda, /dev/hdb-.  (末尾的a ,b-代表不同的IDE硬盘) SCSI:设备名为/dev/sda, /dev/sdb-.(末尾的a,b-代表不用的SCSI硬盘 机械式硬盘: track: 磁道(盘面上由外向里划分成不同的磁道) cylinder: 柱面

查看mysql状态的常用命令

在mysql客户端输入"show status"之后将会看到如下输出: 如果想要查看某个具体的值,可以使用如下命令: show status LIKE "%具体变量%"; Aborted_clients 由于客户没有正确关闭连接已经死掉,已经放弃的连接数量. Aborted_connects 尝试已经失败的MySQL服务器的连接的次数. Connections 试图连接MySQL服务器的次数. Created_tmp_tables 当执行语句时,已经被创造了的隐含临