1. 程式人生 > >Linux運維必會MySQL 30道基礎命令

Linux運維必會MySQL 30道基礎命令

linux運維必會mysql 30道基礎命令

1.1登錄數據庫

mysql-uroot -poldboy123 -S/data/3306/mysql.sock

1.2查看數據庫版本及當前登錄用戶是什麽?

mysql> select version();

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

| version() |

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

| 5.6.36 |

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

mysql>select user();

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

| user() |

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

| root@localhost |

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

1.3創建GBK字符集的數據庫oldboy,並查看已建庫的完整語句

mysql> create database oldboy2 character set gbk collate gbk_chinese_ci;

Query OK, 1 row affected (0.06 sec)

mysql> show databases;

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

| Database |

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

| information_schema |

| mysql |

| oldboy |

| oldboy2 |

| performance_schema |

| world |

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

mysql> show create database oldboy;

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

| Database | Create Database |

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

| oldboy |CREATE DATABASE `oldboy` /*!40100 DEFAULT CHARACTER SET utf8 */ |

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

1.4創建用戶oldboy,使之可以管理數據庫oldboy

grant all on oldboy2.* to oldboy2@‘localhost‘identified by ‘123‘

1.5查看創建的用戶oldboy擁有哪些權利

mysql>show grants for oldboy2@‘localhost‘;

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

| Grants for oldboy2@localhost |

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

| GRANT USAGE ON *.* TO ‘oldboy2‘@‘localhost‘IDENTIFIED BY PASSWORD ‘*23AE809DDACAF96AF0FD78ED04B6A265E05AA257‘ |

| GRANT ALL PRIVILEGES ON `oldboy2`.* TO‘oldboy2‘@‘localhost‘ |

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

1.6查看當前數據庫裏有哪些用戶

mysql>select user,host from mysql.user;

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

| user |host |

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

| oldboy1 | 10.0.0.% |

| root |127.0.0.1 |

| oldboy |172.16.1.% |

| oldboy2 | localhost |

| root |localhost |

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

1.7進入oldboy數據庫

mysql> use oldboy2

1.8創建一innodb引擎字符集為GBKtest,字段為idnamevarchar(16),查看建表結構及語句

1.8.1創建

mysql> use oldboy2

Database changed

mysql> create table test(

-> id int(4),

-> name varchar(16)

-> ) engine=innodb default charset=gbk;

Query OK, 0 rows affected (0.09 sec)

mysql> show tables;

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

| Tables_in_oldboy2 |

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

| test |

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

1.8.2查看表結構

1.8.2.1 方法一:

mysql> desc test;

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

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

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

| id |int(4) | YES | |NULL | |

| name |varchar(16) | YES | | NULL | |

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

1.8.2.2 方法二:

mysql>show columns from test;

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

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

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

| id |int(4) | YES | |NULL | |

| name |varchar(16) | YES | | NULL | |

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

1.8.3查看表結構SQL語句

mysql>show create table test;

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

| Table | Create Table |

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

| test |CREATE TABLE `test` (

`id`int(4) DEFAULT NULL,

`name`varchar(16) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=gbk |

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

1.9插入一條數據1,oldboy

mysql> insert into test values(1,‘oldboy‘);

mysql> select * from test;

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

| id |name |

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

| 1 |oldboy |

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

1.10批量插入數據 2,老男孩,3etiantian.要求中文不能亂碼

mysql> insert into test values(2,‘老男孩‘),(3,‘etiantian‘);

mysql> select * from test ;

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

| id |name |

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

| 1 |oldboy |

| 2 | 老男孩 |

| 3 |etiantian |

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

1.11查詢插入的所有記錄,查詢名字為oldboy的記錄。查詢id大於1的記錄

1.11.1查看插入的所有記錄

mysql>select * from test

-> ;

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

| id |name |

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

| 1 |oldboy |

| 2 | 老男孩 |

| 3 |etiantian |

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

1.11.2查詢名字為oldboy的記錄

mysql> select * from test where name=‘oldboy‘;

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

| id |name |

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

| 1 |oldboy |

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

1.11.3查看id大於1的記錄

mysql>select * from test where id>1;

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

| id |name |

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

| 2 | 老男孩 |

| 3 |etiantian |

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

1.12把數據id等於1的名字oldboy更改為oldbgirl

updatetest set name=‘oldgirl‘ where id=1;

mysql>select * from test;

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

| id |name |

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

| 1 |oldgirl |

| 2 | 老男孩 |

| 3 |etiantian |

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

1.13在字段name前插入age字段,類型tinyint(2)

mysql>alter table test add age tinyint(2)after id;

mysql> desc test;

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

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

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

| id |int(4) | YES | |NULL | |

| age |tinyint(2) | YES | |NULL | |

| name |varchar(16) | YES | | NULL | |

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

1.14備份oldboy庫及Mysql

mysqldump –B –compact oldboy > /opt/bak.sql

1.15刪除表中的所有數據,並查看

1.15.1delete是邏輯刪除表中的數據,一列一列的刪除表中的數據,速度比較慢

delete from rest;

1.15.2truncate是物理刪除表中的數據,一次性全部都給清空表中數據,速度很快

truncate table test;

1.16刪除表testoldboy數據庫並查看

1.16.1刪除表

drop table test;

1.16.2刪除數據庫oldboy

mysql> show databases;

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

| Database |

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

| information_schema |

| mysql |

| oldboy |

| performance_schema |

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

4 rows in set (0.00 sec)

mysql> drop database oldboy;

mysql> show databases;

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

| Database |

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

| information_schema |

| mysql |

| performance_schema |

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

1.17linux命令行恢復以上刪除數據

mysql -uroot -poldboy123 -S/data/3306/mysql.sock</opt/bak.sql

1.18GBK字符集修改為UTF8(可選,註意此題有陷阱)

1.18.1查看一下字符集

mysql> mysql> show variables like‘character_set%‘;

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

| Variable_name | Value |

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

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database | utf8 |

| character_set_filesystem | binary |

| character_set_results | utf8 |

| character_set_server | utf8 |

| character_set_system | utf8 |

| character_sets_dir |/application/mysql-5.6.36/share/charsets/ |

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

1.18.2設置字符集

mysql> set global character_set_database =utf8;

1.19Mysql密碼丟了,如何找回實戰

1.20Mysql內中文數據亂碼的原理及如何防止亂碼

1.20.1數據庫字符集

mysql> show variables like ‘character_set%‘;

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

| Variable_name | Value |

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

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database | utf8 |

| character_set_filesystem | binary |

| character_set_results | utf8 |

| character_set_server | utf8 |

| character_set_system | utf8 |

| character_sets_dir |/application/mysql-5.6.36/share/charsets/ |

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

1.20.2系統字符配置文件

[root@mysql data]# cat /etc/sysconfig/i18n

LANG="en_US.UTF-8"

SYSFONT="latarcyrheb-sun16"

1.21 在把id列設置為主鍵,在name字段上創建普通索引

mysql> desc oldboy.test;

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

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

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

| id |int(4) | YES | |NULL | |

| name |varchar(16) | YES | | NULL | |

| age |int(4) | YES | |NULL | |

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

alter table oldboy.test add primarykey(id);

1.21.1name字段上創建普通索引

方法一:alter table oldboy,test addindexindex_name(name)

方法二:create index index_name onoldboy.test(name);

1.22在字段name後插入手機號字段(shouji,類型char(11)

mysql> alter table test add shou char(11) aftername;

mysql> desc test;

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

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

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

| id |int(4) | YES | MUL | NULL | |

| name |varchar(16) | YES | | NULL | |

| shou |char(11) | YES | |NULL | |

| age |int(4) | YES | |NULL | |

| shouji | char(11) | YES | | NULL | |

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

1.23所有字段上插入兩條記錄(自行設定數據)

mysql> insert into test values(6,‘mysql‘,‘mei‘,‘21‘,‘1794225527‘),(7,‘mysql1‘,‘mein‘,‘21‘,‘15095,‘15095445967‘);

mysql> select * from test;

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

| id |name | shou | age | shouji |

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

| 1 |oldboy | NULL | 21 | NULL |

| 3 |oldboy3 | NULL | 21 | NULL |

| 4 |oldboy4 | NULL | 21 | NULL |

| 5 | 小明 | NULL | 21 | NULL |

| 6 |mysql | mei | 21| 1794225527 |

| 7 |mysql1 | mein | 21 | 15095445967 |

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

1.24在手機字段上對前八個字符創建普通索引

mysql> alter table test add index index_shouji(shouji(8));

mysql> desc test;

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

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

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

| id |int(4) | YES | MUL | NULL | |

| name |varchar(16) | YES | | NULL | |

| shou |char(11) | YES | |NULL | |

| age |int(4) | YES | | NULL | |

| shouji | char(11) | YES | MUL | NULL | |

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

1.25查看創建的索引及索引類型等信息

mysql>mysql> show index from test\G

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

Table: test

Non_unique: 1

Key_name: name_idx

Seq_in_index: 1

Column_name: id

Collation: A

Cardinality: 6

Sub_part: NULL

Packed: NULL

Null: YES

Index_type: BTREE

Comment:

Index_comment:

*************************** 2. row***************************

Table: test

Non_unique: 1

Key_name: index_shouji

Seq_in_index: 1

Column_name: shouji

Collation: A

Cardinality: 6

Sub_part: 8

Packed: NULL

Null: YES

Index_type: BTREE

Comment:

Index_comment:

2 rows in set (0.00 sec

1.26刪除nameshouji列的索引

mysql> alter table test drop index index_shouji;

mysql> show index from test\G

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

Table: test

Non_unique: 1

Key_name: name_idx

Seq_in_index: 1

Column_name: id

Collation: A

Cardinality: 6

Sub_part: NULL

Packed: NULL

Null: YES

Index_type: BTREE

Comment:

Index_comment:

1 row in set (0.00 sec)

1.27name列的前6個字符以及手機列的前8個字符組建聯合索引

alter table test add indexindex_name_shouji(name(6),shouji(8));

mysql> show index from test\G

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

Table: test

Non_unique: 1

Key_name: name_idx

Seq_in_index: 1

Column_name: id

Collation: A

Cardinality: 6

Sub_part: NULL

Packed: NULL

Null: YES

Index_type: BTREE

Comment:

Index_comment:

*************************** 2. row***************************

Table: test

Non_unique: 1

Key_name: index_name_shouji

Seq_in_index: 1

Column_name: name

Collation: A

Cardinality: 6

Sub_part: 6

Packed: NULL

Null: YES

Index_type: BTREE

Comment:

Index_comment:

*************************** 3. row***************************

Table: test

Non_unique: 1

Key_name: index_name_shouji

Seq_in_index: 2

Column_name: shouji

Collation: A

Cardinality: 6

Sub_part: 8

Packed: NULL

Null: YES

Index_type: BTREE

Comment:

Index_comment:

3 rows in set (0.00 sec)

1.28查詢手機號以136開頭的,名字為oldboy的記錄(次記錄要提前插入)

mysql> select * from test where name=‘mysql‘and shouji like ‘179%‘;

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

| id |name | shou | age | shouji |

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

| 6 |mysql | mei | 21 | 1794225527 |

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

1.29查詢上述語句的執行計劃(是否使用聯合索引等)

mysql> explain select * from test wherename=‘oldboy‘ and shouji like ‘1%‘;

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

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

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

| 1 |SIMPLE | test | range | index_name_shouji |index_name_shouji | 32 | NULL | 1 | Using where |

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

mysql> explain select * from test where name=‘oldboy‘ and shouji like ‘1%‘\G

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

id: 1

select_type: SIMPLE

table: test

type: range

possible_keys: index_name_shouji

key: index_name_shouji

key_len: 32

ref: NULL

rows: 1

Extra: Using where

1 row in set (0.00 sec)

1.30test的引擎改成Mysql

mysql> show create table test\G

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

Table: test

Create Table: CREATE TABLE `test` (

`id`int(4) DEFAULT NULL,

`name`varchar(16) DEFAULT NULL,

`shou`char(11) DEFAULT NULL,

`age`int(4) DEFAULT NULL,

`shouji`char(11) DEFAULT NULL,

KEY`name_idx` (`id`),

KEY`index_name_shouji` (`name`(6),`shouji`(8))

) ENGINE=InnoDB DEFAULT CHARSET=gbk

mysql> alter table oldboy.test ENGINE=MyISAM;

Query OK, 5 rows affected (0.01 sec)

Records: 5 Duplicates: 0 Warnings: 0

mysql> show create table oldboy.test\G

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

Table: test

Create Table: CREATE TABLE `test` (

`id`int(4) NOT NULL DEFAULT‘0‘,

`age`tinyint(2) DEFAULTNULL,

`name`varchar(16) DEFAULTNULL,

`shouji`char(11) DEFAULTNULL,

PRIMARYKEY (`id`),

KEY`index_name_shouji`(`name`(6),`shouji`(8))

) ENGINE=MyISAM DEFAULT CHARSET=gbk

1 row in set (0.00 sec)


本文出自 “linux基礎” 博客,請務必保留此出處http://13131277.blog.51cto.com/13121277/1983886

Linux運維必會MySQL 30道基礎命令