Linux下Mysql数据库常见管理语句操作

一>登录mysql数据库(help 命令,例如:help grant)

1>单实例登录:mysql -u root -p


二>修改mysql数据库管理员密码

法一:用mysqladmin更改

A>单实例:

mysqladmin -u root -p '123456' password '1234567'

B>多实例:

mysqladmin -u root -p '123456' password '1234567' -S /data/3306/mysql.sock

法二:用sql语句更改(此法适合密码丢失后通过--skip-grant-tables参数启动数据库后修改密码)

update mysql.user set password=PASSWORD('1234567') where user='root'

法三:用set语句修改

set password=password("123456");


三>创建不同字符集数据库

1>创建默认字符集数据库

mysql> create database oldboy;-------创建名为oldboy的数据库

Query OK, 1 row affected (0.00 sec)

mysql> show create database oldboy\G              -----查看oldboy库的建库语句,默认是utf-8的字符集,因为编译安装mysql时指定了utf-8

*************************** 1. row ***************************

       Database: oldboy

Create Database: CREATE DATABASE `oldboy` /*!40100 DEFAULT CHARACTER SET utf8 */

1 row in set (0.01 sec)


2>创建字符集为gbk的数据库

mysql> create database oldboy_gbk DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

Query OK, 1 row affected (0.07 sec)

mysql> show create database oldboy_gbk\G

*************************** 1. row ***************************

       Database: oldboy_gbk

Create Database: CREATE DATABASE `oldboy_gbk` /*!40100 DEFAULT CHARACTER SET gbk */

1 row in set (0.01 sec)

总结:企业里怎么创建数据库?

1>根据开发的程序确定字符集(建议utf-8)

2>编译安装数据库的时候指定字符集,例如:DEFAULT_CHARSET=utf8

 DEFAULT_COLLATION=utf8_general_ci\

    然后建库的时候默认创建即可,即create database oldboy

3>编译安装的时候没有指定字符集或者指定了和程序不同的字符集,指定字符集创建数据库即可

create database oldboy_gbk DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;----创建gbk字符集数据库

create database oldboy_utf8 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;----创建utf8字符集数据库

当然,数据库要支持创建数据库的字符集。


四>显示mysql数据库

mysql> show databases;----显示所有数据库

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| oldboy             |

| oldboy_gbk         |

| performance_schema |

| test               |

+--------------------+

6 rows in set (0.00 sec)


mysql> show databases like 'old%';----模糊查询显示数据库

+-----------------+

| Database (old%) |

+-----------------+

| oldboy          |

| oldboy_gbk      |

+-----------------+

2 rows in set (0.06 sec)

mysql> select database();----显示当前数据库

+------------+

| database() |

+------------+

| oldboy     |

+------------+

1 row in set (0.00 sec)


五>删除mysql数据库

mysql> drop database test;

Query OK, 0 rows affected (0.26 sec)


六>连接mysql数据库

mysql> use oldboy;

Database changed

mysql> select user();---查看用户

+----------------+

| user()         |

+----------------+

| root@localhost |

+----------------+

1 row in set (0.07 sec)


mysql> select now();---查看时间

+---------------------+

| now()               |

+---------------------+

| 2018-09-11 21:18:30 |

+---------------------+

1 row in set (0.06 sec)


mysql> select version();---查看数据库版本

+-----------+

| version() |

+-----------+

| 5.5.32    |

+-----------+

1 row in set (0.07 sec)


七>查询当前的数据库包含的表的信息

mysql> use oldboy;----连接oldboy库

Database changed

mysql> show tables;

Empty set (0.06 sec)


八>创建mysql用户及赋予用户权限

创建oldboy用户,对oldboy库具备所有权限,允许从localhost主机登录管理数据库,密码是oldboy123

mysql> grant all privileges on oldboy.* to 'oldboy'@'localhost' identified by 'oldboy123';--创建用户并赋予权限

Query OK, 0 rows affected (0.09 sec)

mysql> flush privileges;-----权限生效

Query OK, 0 rows affected (0.07 sec)

mysql> show grants for oldboy@localhost;----显示oldboy权限

+---------------------------------------------------------------------------------------------------------------+

| Grants for oldboy@localhost                                                                                   |

+---------------------------------------------------------------------------------------------------------------+

| GRANT USAGE ON *.* TO 'oldboy'@'localhost' IDENTIFIED BY PASSWORD '*FE28814B4A8B3309DAC6ED7D3237ADED6DA1E515' |

| GRANT ALL PRIVILEGES ON `oldboy`.* TO 'oldboy'@'localhost'                                                    |

+---------------------------------------------------------------------------------------------------------------+

2 rows in set (0.00 sec)


九>授权局域网内主机远程连接数据库

根据grant命令语法,我们知道test@'localhost'位置为授权访问数据库的主机,localhost可以用域名,IP地址或者ip段来替代

百分号匹配法:

mysql> create user oldgirl@'192.168.0.%' identified by '123456';

Query OK, 0 rows affected (0.01 sec)


mysql> flush privileges;

Query OK, 0 rows affected (0.01 sec)

网段授权:

mysql> create user oldgirl1@'192.168.0.0/255.255.255.0' identified by '123456';----创建oldgril1用户允许从192.168.0.网段连接

Query OK, 0 rows affected (0.00 sec)


mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)



十>确定mysql的授权授权列表

mysql> show grants for oldboy@localhost;

+---------------------------------------------------------------------------------------------------------------+

| Grants for oldboy@localhost                                                                                   |

+---------------------------------------------------------------------------------------------------------------+

| GRANT USAGE ON *.* TO 'oldboy'@'localhost' IDENTIFIED BY PASSWORD '*FE28814B4A8B3309DAC6ED7D3237ADED6DA1E515' |

| GRANT ALL PRIVILEGES ON `oldboy`.* TO 'oldboy'@'localhost'                                                    |

+---------------------------------------------------------------------------------------------------------------+

2 rows in set (0.06 sec)

mysql> REVOKE INSERT ON oldboy.* FROM 'oldboy'@'localhost';  ----收回insert权限

Query OK, 0 rows affected (0.08 sec)


mysql> show grants for oldboy@localhost;

+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| Grants for oldboy@localhost                                                                                                                                                                                                      |

+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| GRANT USAGE ON *.* TO 'oldboy'@'localhost' IDENTIFIED BY PASSWORD '*FE28814B4A8B3309DAC6ED7D3237ADED6DA1E515'                                                                                                                    |

| 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 `oldboy`.* TO 'oldboy'@'localhost' |

+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

2 rows in set (0.00 sec)



十一>mysql创建表

DROP TABLE IF EXISTS `bm_jgbm`;


CREATE TABLE `bm_jgbm` (

  `bm` varchar(20) NOT NULL,

  `mc` varchar(100) DEFAULT NULL,

  `version` int(10) DEFAULT '1',

  PRIMARY KEY (`bm`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;


十二>mysql查看表结构

mysql> desc user;  -----查看表结构

+------------------------+-----------------------------------+------+-----+---------+-------+

| Field                  | Type                              | Null | Key | Default | Extra |

+------------------------+-----------------------------------+------+-----+---------+-------+

| Host                   | char(60)                          | NO   | PRI |         |       |

| User                   | char(16)                          | NO   | PRI |         |       |

| Password               | char(41)                          | NO   |     |         |       |

| Select_priv            | enum('N','Y')                     | NO   |     | N       |       |

| Insert_priv            | enum('N','Y')                     | NO   |     | N       |       |

| Update_priv            | enum('N','Y')                     | NO   |     | N       |       |

| Delete_priv            | enum('N','Y')                     | NO   |     | N       |       |

| Create_priv            | enum('N','Y')                     | NO   |     | N       |       |

| Drop_priv              | enum('N','Y')                     | NO   |     | N       |       |

| Reload_priv            | enum('N','Y')                     | NO   |     | N       |       |

| Shutdown_priv          | enum('N','Y')                     | NO   |     | N       |       |

| Process_priv           | enum('N','Y')                     | NO   |     | N       |       |

| File_priv              | enum('N','Y')                     | NO   |     | N       |       |

| Grant_priv             | enum('N','Y')                     | NO   |     | N       |       |

| References_priv        | enum('N','Y')                     | NO   |     | N       |       |

| Index_priv             | enum('N','Y')                     | NO   |     | N       |       |

| Alter_priv             | enum('N','Y')                     | NO   |     | N       |       |

| Show_db_priv           | enum('N','Y')                     | NO   |     | N       |       |

| Super_priv             | enum('N','Y')                     | NO   |     | N       |       |

| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N       |       |

| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N       |       |

| Execute_priv           | enum('N','Y')                     | NO   |     | N       |       |

| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N       |       |

| Repl_client_priv       | enum('N','Y')                     | NO   |     | N       |       |

| Create_view_priv       | enum('N','Y')                     | NO   |     | N       |       |

| Show_view_priv         | enum('N','Y')                     | NO   |     | N       |       |

| Create_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |

| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N       |       |

| Create_user_priv       | enum('N','Y')                     | NO   |     | N       |       |

| Event_priv             | enum('N','Y')                     | NO   |     | N       |       |

| Trigger_priv           | enum('N','Y')                     | NO   |     | N       |       |

| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N       |       |

| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |

| ssl_cipher             | blob                              | NO   |     | NULL    |       |

| x509_issuer            | blob                              | NO   |     | NULL    |       |

| x509_subject           | blob                              | NO   |     | NULL    |       |

| max_questions          | int(11) unsigned                  | NO   |     | 0       |       |

| max_updates            | int(11) unsigned                  | NO   |     | 0       |       |

| max_connections        | int(11) unsigned                  | NO   |     | 0       |       |

| max_user_connections   | int(11) unsigned                  | NO   |     | 0       |       |

| plugin                 | char(64)                          | YES  |     |         |       |

| authentication_string  | text                              | YES  |     | NULL    |       |

+------------------------+-----------------------------------+------+-----+---------+-------+

42 rows in set (0.07 sec)


十三>mysql创建索引

DROP TABLE IF EXISTS `t_sy_institution`;

CREATE TABLE `t_sy_institution` (

  `id` int(20) NOT NULL DEFAULT '0',

  `parentid` int(20) DEFAULT NULL,

  `name` varchar(100) DEFAULT NULL,

  `s_state` int(4) DEFAULT NULL,

  `zjbzxbm` varchar(20) DEFAULT NULL COMMENT '在住建部制定的编码文档编码表中对应的机构编码',

  `jglb` varchar(4) DEFAULT '01',

  PRIMARY KEY (`id`),

  UNIQUE KEY `zjbzxbm_index` (`zjbzxbm`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

总结:

1>在表的单列或多列上创建索引(建立在表的字段上的一种快速的地址对应关系),可以加快查询速度,分为主键索引,普通索引。索引占用系统空间(空间),更新数据库时需要维护索引(时间),

索引并不是越多越好。索引一定要创建在where后的条件列,数十到几百行的小表上无需建立索引,更新频繁,读取少的表上要少建立索引。尽量选择在唯一值多的大表的字段上建立索引。

2>创建索引相关命令集合:

创建主键索引

alter table student change id id int primary key auto_increment;

删除主键索引

alter table student drop primary key

创建普通索引

alter table student add index index_dept(dept(8))

根据列的前n个字符创建索引

create index index_dept on student(dept(8))

根据多个列创建联合索引

create index ind_name_dept on student(name,dept);

根据多个列的前n个字符创建索引

create index ind_name_dept on student(name(8),dept(10));

删除普通索引

Alter table student drop index index_dept

drop index ind_name_dept on student

创建唯一索引

create unique index uni_ind_name on student(name);



十四>DML语句之insert

1>建立test表

mysql> CREATE TABLE test(

    ->   id int(4) NOT NULL AUTO_INCREMENT,

    ->   name char(20) NOT NULL,

    ->   PRIMARY KEY (id)

    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Query OK, 0 rows affected (0.22 sec)

2>按规矩指定所有列名,并且每列都插入值

mysql> insert into test(id,name) value(1,"oldboy");

Query OK, 1 row affected (0.32 sec)

3>由于id列为自增的,所以只在name列插入值

mysql> insert into test(name) value("oldboy");

Query OK, 1 row affected (0.07 sec)

4>如果不指定列,就要按规矩为每列都插入适当的值

mysql> insert into test values(3,'oldboy');

Query OK, 1 row affected (0.01 sec)

5>批量插入数据方法提升效率。

mysql> insert into test values(4,'woshishei'),(5,'nimei');

Query OK, 2 rows affected (0.01 sec)

Records: 2  Duplicates: 0  Warnings: 0

6>数据插入成功,然后备份上述数据,留着备用。备份后检查备份的sql数据内容;过滤无用信息。

msyqldump是导出sql语句的形式备份。

mysqldump -uroot -p123456 -B mysql >/opt/mysql_bak.sql



十五>mysql用explain去查看执行计划(有没有走索引)

mysql> select * from test;

+----+-----------+

| id | name      |

+----+-----------+

|  1 | oldboy    |

|  2 | oldboy    |

|  3 | oldboy    |

|  4 | woshishei |

|  5 | nimei     |

+----+-----------+

5 rows in set (0.07 sec)


mysql> explain select * from test where name='oldboy'\G;

*************************** 1. row ***************************

           id: 1

  select_type: SIMPLE

        table: test

         type: ALL

possible_keys: NULL

          key: NULL

      key_len: NULL

          ref: NULL

         rows: 5

        Extra: Using where

1 row in set (0.01 sec)


ERROR: 

No query specified


mysql> create index index_name on test(name);

Query OK, 0 rows affected (0.22 sec)

Records: 0  Duplicates: 0  Warnings: 0


mysql> desc test;

+-------+----------+------+-----+---------+----------------+

| Field | Type     | Null | Key | Default | Extra          |

+-------+----------+------+-----+---------+----------------+

| id    | int(4)   | NO   | PRI | NULL    | auto_increment |

| name  | char(20) | NO   | MUL | NULL    |                |

+-------+----------+------+-----+---------+----------------+

2 rows in set (0.01 sec)


mysql> explain select * from test where name='oldboy'\G;

*************************** 1. row ***************************

           id: 1

  select_type: SIMPLE

        table: test

         type: ref

possible_keys: index_name

          key: index_name

      key_len: 60

          ref: const

         rows: 3

        Extra: Using where; Using index

1 row in set (0.01 sec)


ERROR: 

No query specified


猜你喜欢

转载自blog.51cto.com/11218855/2270401