MySQL数据库for CentOS7 yum安装、5.7.30编译安装和基础操作

2023-10-28

1. MySQL数据库简介

MySQL 是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。

关系数据库管理系统(Relational Database Management System, RDBMS),是将数据组织为相关的行和列的系统,而管理关系数据库的计算机软件就是关系数据库管理系统 。

数据库一般分为以下两种:

  • 关系型数据库;

  • 非关系型数据库。

常用的关系型数据库软件有: MySQL、Mariadb、Oracle、SQL Server、 PostgreSQL、DB2等。

常用的非关系型数据库软件有: Redis、memcached、MongoDB。

MySQL现阶段有免费版本和付费版本,公司里面使用MySQL多数都是使用免费版本。

Mariadb数据库是MySQL数据库原来的团队,后续独立出来进行开发的完全开源版本。

1.1 MySQL引擎

MySQL引擎有很多,企业里面主流的myisam、innodb两种。

1.1.1 MyISAM

主要强调的是性能,其执行速度比InnoDB类型更快,但不提供事务支持,不支持外键,如果执行大量的select(查询)操作,MyISAM是更好的选择,支持表锁。MyISAM引擎查询性能高。

1.1.2 InnoDB

提供事务,支持事务、外键、行级锁等高级数据库功能,可执行大量的insert或update,InnoDB引擎写性能高。

1.2 MySQL数据库安装

MySQL安装方式有两种,一种是yum/rpm安装,另外一种是tar源码安装。

1.2.1 MySQL yum安装

yum安装方法很简单,执行命令如下即可:

1.2.1.1 CentOS 6 yum安装

[root@node01 ~]#yum install –y mysql-server mysql-devel mysql 

1.2.1.2 CentOS 7 yum安装

[root@node01 ~]# yum install -y mariadb mariadb-devel mariadb-server

1.2.1.3 查询yum安装的内容

[root@node01 ~]# rpm -qa|grep mariadb
mariadb-libs-5.5.65-1.el7.x86_64
mariadb-devel-5.5.65-1.el7.x86_64
mariadb-server-5.5.65-1.el7.x86_64
mariadb-5.5.65-1.el7.x86_64
[root@node01 ~]# 

1.2.1.4 yum安装mariadb程序

mariadb主配置目录: /var/lib/mysql

mariadb数据目录:/var/lib/mysql

mariadb命令目录:/usr/bin

mariadb默认配置文件:/etc/my.cnf

mariadb启动文件:/usr/bin

mariadb日志文件:/var/log/mariadb

说明:Mariadb和 mysql数据库软件命令和配置都是类似的。

1.2.2 MySQL源码安装5.7版本

1.2.2.1 源码编译安装前准备

  1. 因为CentOS系统自带了mariadb,我们需要把它先卸载。
[root@node02 ~]# rpm -qa|grep mariadb
mariadb-server-5.5.60-1.el7_5.x86_64
mariadb-libs-5.5.60-1.el7_5.x86_64
mariadb-5.5.60-1.el7_5.x86_64
[root@node02 ~]# 
[root@node02 ~]# yum -y remove mariadb mariadb-server mariadb-libs
  1. 创建用户
[root@node02 ~]# useradd -s /sbin/nologin -M mysql      #提示mysql已存在可以忽略此步骤
  1. 创建目录并修改权限
[root@node02 ~]# mkdir -p /data/mysql
[root@node02 ~]# chown -R mysql.mysql /data
  1. 安装MySQL相关依赖包
[root@node02 ~]# yum install -y gcc gcc-devel gcc-c++ gcc-c++-devel libaio* autoconf* automake* zlib* libxml* ncurses-devel ncurses libgcrypt* libtool* cmake openssl openssl-devel bison bison-devel perl-Data_Dumper boost boost-doc boost-devel
  1. 下载源码并解压
[root@node02 ~]# cd /usr/src/
[root@node02 src]# wget http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.30.tar.gz
[root@node02 src]# ls
debug  kernels  mysql-5.7.30.tar.gz
[root@node02 src]# tar xf mysql-5.7.30.tar.gz
[root@node02 src]# cd mysql-5.7.30/
[root@node02 mysql-5.7.30]# 
  1. 下载boost(5.7版本更新之后有很多变化,比如现在安装必须要安装这个boost库了)
[root@node02 mysql-5.7.30]# mkdir ./boost
[root@node02 mysql-5.7.30]# cd ./boost
[root@node02 boost]# wget http://nchc.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz

说明:解压等操作编译的时候程序会做,这里只需把包下载或者拷贝到这里即可

1.2.2.2 源码编译安装

  1. 编译
[root@node02 boost]# cd ../
[root@node02 mysql-5.7.30]# cmake \
-DBUILD_CONFIG=mysql_release \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DSYSTEMD_PID_DIR=/data/mysql \
-DMYSQL_USER=mysql \
-DWITH_SYSTEMD=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_DEBUG=0 \
-DMYSQL_MAINTAINER_MODE=0 \
-DWITH_SSL:STRING=system \
-DWITH_ZLIB:STRING=bundled \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=./boost
  1. 编译参数介绍
cmake \
-DBUILD_CONFIG=mysql_release \                  #此选项使用Oracle使用的相同构建选项配置源分发,以生成官方MySQL版本的二进制分发。
-DCMAKE_BUILD_TYPE=RelWithDebInfo \             #要生成的构建类型 = 启用优化并生成调试信息。这是默认的MySQL构建类型。
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \       #选项表示基本安装目录。
-DMYSQL_DATADIR=/data/mysql \                   #MySQL数据目录的位置。
-DSYSCONFDIR=/etc \                             #默认my.cnf选项文件目录。
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \             #服务器侦听套接字连接的Unix套接字文件路径。这必须是绝对路径名。默认是/tmp/mysql.sock。
-DSYSTEMD_PID_DIR=/usr/local/mysql \            #当MySQL由systemd管理时,在其中创建PID文件的目录的名称。默认是 /var/run/mysqld; 这可能会根据INSTALL_LAYOUT值隐式更改 。
-DMYSQL_USER=mysql \                            #指定MySQL的启动用户
-DWITH_SYSTEMD=1 \                              #安装systemd支持文件
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_TCP_PORT=3306 \                          #配置 MySQL 监听的端口号
-DENABLED_LOCAL_INFILE=1 \                       #使mysql客户端具有load data infile的功能,该功能具有安全隐患  load data infile语句从一个文本文件中以很高的速度读入一个表                
-DENABLE_DOWNLOADS=1 \                           #googlemock发行版的路径,用于基于Google Test的单元测试。=1,CMake将从GitHub下载发行版。
-DWITH_PARTITION_STORAGE_ENGINE=1 \ 
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \                         #服务器字符集
-DDEFAULT_COLLATION=utf8_general_ci \            #服务器排序规则
-DWITH_DEBUG=0 \                                 #不包含调试支持。
-DMYSQL_MAINTAINER_MODE=0 \                      #是否启用MySQL维护者特定的开发环境。如果启用,此选项会导致编译器警告变为错误。
-DWITH_SSL:STRING=system \
-DWITH_ZLIB:STRING=bundled \
-DDOWNLOAD_BOOST=1 \                             #是否下载Boost库。默认是OFF。
-DWITH_BOOST=./boost                             #指定Boost库目录位置。
  1. 查看编译是否有异常
[root@node02 mysql-5.7.30]# echo $?              #返回结果为0说明编译无异常
  1. 源码安装
[root@node02 mysql-5.7.30]# make && make install

这个过程比较漫长,耐心等待一下

  1. 查看安装是否有异常
[root@node02 mysql-5.7.30]# echo $?              #返回结果为0说明编译无异常

1.2.2.4 源码安装后配置

  1. 添加 systemd 服务控制
[root@node02 mysql-5.7.30]# cp ./scripts/mysqld.service /usr/lib/systemd/system
  1. 添加环境变量
[root@node02 mysql-5.7.30]# cat > /etc/profile.d/mysql.sh << EOF 
PATH=/usr/local/mysql/bin:$PATH
export PATH
EOF
[root@node02 mysql-5.7.30]# source /etc/profile
  1. 空密码初始化数据库
[root@node02 mysql-5.7.30]# /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
  1. 配置启动MySQL
[root@node02 mysql-5.7.30]# systemctl enable mysqld.service
[root@node02 mysql-5.7.30]# systemctl daemon-reload
[root@node02 mysql-5.7.30]# systemctl start mysqld.service
[root@node02 mysql-5.7.30]# systemctl status mysqld.service

1.3 登录数据库服务器

1.3.1 通过unix套接字连接

1.3.1.1 直接通过mysql登录,查看连接状态

[root@node02 ~]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.30 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
mysql> status
--------------
mysql  Ver 14.14 Distrib 5.7.30, for Linux (x86_64) using  EditLine wrapper

Connection id:          5
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.7.30 MySQL Community Server (GPL)
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /tmp/mysql.sock
Uptime:                 33 min 25 sec

Threads: 1  Questions: 17  Slow queries: 0  Opens: 105  Flush tables: 1  Open tables: 98  Queries per second avg: 0.008
--------------

mysql> 

1.3.1.2 mysql -uroot -p登录,查看连接状态

[root@node02 ~]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.30 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
mysql> status
--------------

mysql  Ver 14.14 Distrib 5.7.30, for Linux (x86_64) using  EditLine wrapper

Connection id:          3
Current database:                                 #当前使用的那个数据库,没有选择为空
Current user:           root@localhost
SSL:                    Not in use                #是否使用加密
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;                         #结束符为分号
Server version:         5.7.30 MySQL Community Server (GPL)
Protocol version:       10
Connection:             Localhost via UNIX socket #连接方式,本地套接字
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /tmp/mysql.sock
Uptime:                 17 min 33 sec

Threads: 1  Questions: 7  Slow queries: 0  Opens: 105  Flush tables: 1  Open tables: 98  Queries per second avg: 0.006
--------------

mysql> 

1.3.2 通过tcp套接字连接

1.3.2.1 通过mysql -h127.0.0.1登录服务器,查看状态

[root@node02 ~]# mysql -h127.0.0.1
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.30 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> status
--------------

mysql  Ver 14.14 Distrib 5.7.30, for Linux (x86_64) using  EditLine wrapper

Connection id:          4
Current database:
Current user:           root@localhost
SSL:                    Cipher in use is DHE-RSA-AES128-GCM-SHA256
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.7.30 MySQL Community Server (GPL)
Protocol version:       10
Connection:             127.0.0.1 via TCP/IP
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:               3306
Uptime:                 31 min 40 sec

Threads: 1  Questions: 12  Slow queries: 0  Opens: 105  Flush tables: 1  Open tables: 98  Queries per second avg: 0.006
--------------

mysql>   

可以看到连接id不同,套接字也不同,使用的是tcp/ip的套接字通信。如果有时候遇到无法通过本地套接字连接,可以使用指定服务器ip连接。

1.4 常用命令操作

1.4.1 数据库的操作命令

#查询数据库:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

mysql>

初始化后,默认会有四个数据库:

  • information_schema:信息数据库。主要保存着关于MySQL服务器所维护的 所有其他数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权 限等。通过show databases;查看到数据库信息,也是出自该数据库中得SCHEMATA表。

  • mysql: mysql的核心数据库。主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。

  • performance_schema :用于性能优化的数据库。

    #查看数据库的创建语句:

mysql> show create database mysql;
+----------+----------------------------------------------------------------+
| Database | Create Database                                                |
+----------+----------------------------------------------------------------+
| mysql    | CREATE DATABASE `mysql` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+----------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>  

​ mysql为数据库名。

#查看字符集命令:

mysql> show character set;
+----------+---------------------------------+---------------------+--------+
  | Charset  | Description                     | Default collation   | Maxlen |
+----------+---------------------------------+---------------------+--------+
  | big5     | Big5 Traditional Chinese        | big5_chinese_ci     |      2 |
| dec8     | DEC West European               | dec8_swedish_ci     |      1 |
  | cp850    | DOS West European               | cp850_general_ci    |      1 |
| hp8      | HP West European                | hp8_english_ci      |      1 |
  | koi8r    | KOI8-R Relcom Russian           | koi8r_general_ci    |      1 |
| latin1   | cp1252 West European            | latin1_swedish_ci   |      1 |
  | latin2   | ISO 8859-2 Central European     | latin2_general_ci   |      1 |
  | swe7     | 7bit Swedish                    | swe7_swedish_ci     |      1 |
  | ascii    | US ASCII                        | ascii_general_ci    |      1 |
  | ujis     | EUC-JP Japanese                 | ujis_japanese_ci    |      3 |
  | sjis     | Shift-JIS Japanese              | sjis_japanese_ci    |      2 |
  | hebrew   | ISO 8859-8 Hebrew               | hebrew_general_ci   |      1 |
  | tis620   | TIS620 Thai                     | tis620_thai_ci      |      1 |
  | euckr    | EUC-KR Korean                   | euckr_korean_ci     |      2 |
  | koi8u    | KOI8-U Ukrainian                | koi8u_general_ci    |      1 |
  | gb2312   | GB2312 Simplified Chinese       | gb2312_chinese_ci   |      2 |
  | greek    | ISO 8859-7 Greek                | greek_general_ci    |      1 |
  | cp1250   | Windows Central European        | cp1250_general_ci   |      1 |
  | gbk      | GBK Simplified Chinese          | gbk_chinese_ci      |      2 |
  | latin5   | ISO 8859-9 Turkish              | latin5_turkish_ci   |      1 |
  | armscii8 | ARMSCII-8 Armenian              | armscii8_general_ci |      1 |
  | utf8     | UTF-8 Unicode                   | utf8_general_ci     |      3 |
  | ucs2     | UCS-2 Unicode                   | ucs2_general_ci     |      2 |
  | cp866    | DOS Russian                     | cp866_general_ci    |      1 |
  | keybcs2  | DOS Kamenicky Czech-Slovak      | keybcs2_general_ci  |      1 |
  | macce    | Mac Central European            | macce_general_ci    |      1 |
  | macroman | Mac West European               | macroman_general_ci |      1 |
  | cp852    | DOS Central European            | cp852_general_ci    |      1 |
  | latin7   | ISO 8859-13 Baltic              | latin7_general_ci   |      1 |
  | utf8mb4  | UTF-8 Unicode                   | utf8mb4_general_ci  |      4 |
  | cp1251   | Windows Cyrillic                | cp1251_general_ci   |      1 |
  | utf16    | UTF-16 Unicode                  | utf16_general_ci    |      4 |
  | utf16le  | UTF-16LE Unicode                | utf16le_general_ci  |      4 |
  | cp1256   | Windows Arabic                  | cp1256_general_ci   |      1 |
  | cp1257   | Windows Baltic                  | cp1257_general_ci   |      1 |
  | utf32    | UTF-32 Unicode                  | utf32_general_ci    |      4 |
  | binary   | Binary pseudo charset           | binary              |      1 |
  | geostd8  | GEOSTD8 Georgian                | geostd8_general_ci  |      1 |
  | cp932    | SJIS for Windows Japanese       | cp932_japanese_ci   |      2 |
  | eucjpms  | UJIS for Windows Japanese       | eucjpms_japanese_ci |      3 |
  | gb18030  | China National Standard GB18030 | gb18030_chinese_ci  |      4 |
  +----------+---------------------------------+---------------------+--------+
  41 rows in set (0.00 sec)

  mysql> 

#创建数据库zabbix,字符集位gbk;

mysql> create database zabbix default character set gbk;
Query OK, 1 row affected (0.00 sec)

mysql> 
mysql> show create database zabbix;
+----------+----------------------------------------------------------------+
| Database | Create Database                                                |
+----------+----------------------------------------------------------------+
| zabbix   | CREATE DATABASE `zabbix` /*!40100 DEFAULT CHARACTER SET gbk */ |
+----------+----------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> 

#修改数据库的字符集:

mysql> alter database zabbix default character set utf8;
Query OK, 1 row affected (0.00 sec)

mysql> 
mysql> show create database zabbix;
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| zabbix   | CREATE DATABASE `zabbix` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-----------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> 

#创建数据库:

mysql> create database zabbix charset=utf8; 
ERROR 1007 (HY000): Can't create database 'zabbix'; database exists
mysql> 

mysql> create database if not exists zabbix charset=gbk;
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> 

用上面的第二条命令创建数据库,如果数据库已经存在就不会报错了。

#查看警告:

mysql> show warnings;
+-------+------+-------------------------------------------------+
| Level | Code | Message                                         |
+-------+------+-------------------------------------------------+
| Error | 1007 | Can't create database 'zabbix'; database exists |
+-------+------+-------------------------------------------------+
1 row in set (0.00 sec)

mysql> 

#删除数据库:

mysql> drop database zabbix;
mysql> 

或者:

mysql> drop database zabbix;
ERROR 1008 (HY000): Can't drop database 'zabbix'; database doesn't exist
mysql> 
mysql> drop database if exists zabbix;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> 

用上面第二种方式删除数据库,如果数据库不存在就不会报错了。

1.4.2 创建表命令

mysql> create table t1(id int(10) auto_increment primary key,name varchar(20),job varchar(10));
Query OK, 0 rows affected (0.01 sec)

mysql> 

1.4.3 查看表结构相关命令

查看所有表:

mysql> use mysql;
Database changed
mysql> 
mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| engine_cost               |
| event                     |
| func                      |
| general_log               |
| gtid_executed             |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| server_cost               |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| t1                        |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
32 rows in set (0.00 sec)

mysql> 

或者

mysql> show tables from mysql;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| engine_cost               |
| event                     |
| func                      |
| general_log               |
| gtid_executed             |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| server_cost               |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| t1                        |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
32 rows in set (0.00 sec)

mysql> 

查看所有表的详细信息:

use mysql;

show table status\G

或者

show table status from mysql\G

查看某张表的详细信息:

mysql> use mysql;
Database changed
mysql> 
mysql> show table status like "user"\G
*************************** 1. row ***************************
           Name: user
         Engine: MyISAM
        Version: 10
     Row_format: Dynamic
           Rows: 3
 Avg_row_length: 113
    Data_length: 340
Max_data_length: 281474976710655
   Index_length: 4096
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2020-06-01 14:58:34
    Update_time: 2020-06-01 14:58:35
     Check_time: NULL
      Collation: utf8_bin
       Checksum: NULL
 Create_options: 
        Comment: Users and global privileges
1 row in set (0.00 sec)

mysql> 

或者

mysql> show table status from mysql like "user"\G
*************************** 1. row ***************************
           Name: user
         Engine: MyISAM
        Version: 10
     Row_format: Dynamic
           Rows: 3
 Avg_row_length: 113
    Data_length: 340
Max_data_length: 281474976710655
   Index_length: 4096
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2020-06-01 14:58:34
    Update_time: 2020-06-01 14:58:35
     Check_time: NULL
      Collation: utf8_bin
       Checksum: NULL
 Create_options: 
        Comment: Users and global privileges
1 row in set (0.00 sec)

mysql> 

查看表结构:

mysql> desc mysql.user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(32)                          | NO   | PRI |                       |       |
| 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)                          | NO   |     | mysql_native_password |       |
| authentication_string  | text                              | YES  |     | NULL                  |       |
| password_expired       | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed  | timestamp                         | YES  |     | NULL                  |       |
| password_lifetime      | smallint(5) unsigned              | YES  |     | NULL                  |       |
| account_locked         | enum('N','Y')                     | NO   |     | N                     |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
45 rows in set (0.00 sec)

mysql> 

查看创建表的sql语句:

mysql> show create table mysql.user\G
*************************** 1. row ***************************
       Table: user
Create Table: CREATE TABLE `user` (
  `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
  `User` char(32) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Reload_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Shutdown_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Process_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `File_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Grant_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `References_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Index_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Alter_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Show_db_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Super_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Lock_tables_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Execute_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Repl_slave_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Repl_client_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Show_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Alter_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_user_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Event_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_tablespace_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `ssl_type` enum('','ANY','X509','SPECIFIED') CHARACTER SET utf8 NOT NULL DEFAULT '',
  `ssl_cipher` blob NOT NULL,
  `x509_issuer` blob NOT NULL,
  `x509_subject` blob NOT NULL,
  `max_questions` int(11) unsigned NOT NULL DEFAULT '0',
  `max_updates` int(11) unsigned NOT NULL DEFAULT '0',
  `max_connections` int(11) unsigned NOT NULL DEFAULT '0',
  `max_user_connections` int(11) unsigned NOT NULL DEFAULT '0',
  `plugin` char(64) COLLATE utf8_bin NOT NULL DEFAULT 'mysql_native_password',
  `authentication_string` text COLLATE utf8_bin,
  `password_expired` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `password_last_changed` timestamp NULL DEFAULT NULL,
  `password_lifetime` smallint(5) unsigned DEFAULT NULL,
  `account_locked` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  PRIMARY KEY (`Host`,`User`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges'
1 row in set (0.00 sec)

mysql> 

1.4.4 修改表结构相关命令

添加表字段:

mysql> alter table t1 add job1 varchar(20);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> 

默认是加在后面,如果想加在第一列,或者某个字段后可以进行指定:

#加在第一列

mysql> alter table t1 add job2 varchar(20) first;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>
mysql> desc t1;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| job2  | varchar(20) | YES  |     | NULL    |                |
| id    | int(10)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | YES  |     | NULL    |                |
| job   | varchar(10) | YES  |     | NULL    |                |
| job1  | varchar(20) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)

mysql> 

#加在name字段后:

mysql> alter table t1 add job3 varchar(20) after name;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> 
mysql> desc t1;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| job2  | varchar(20) | YES  |     | NULL    |                |
| id    | int(10)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | YES  |     | NULL    |                |
| job3  | varchar(20) | YES  |     | NULL    |                |
| job   | varchar(10) | YES  |     | NULL    |                |
| job1  | varchar(20) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

mysql> 

修改表字段名,需要将字段属性写全:

mysql> alter table t1 change id age int(5);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> 
mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| job2  | varchar(20) | YES  |     | NULL    |       |
| age   | int(5)      | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| job3  | varchar(20) | YES  |     | NULL    |       |
| job   | varchar(10) | YES  |     | NULL    |       |
| job1  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

mysql> 

id: 原字段

age: 新字段

修改表字段的属性或者位置:

#修改字段的顺序,把job3放在第一列:

mysql> alter table t1 modify job3 varchar(20) first;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> 
mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| job3  | varchar(20) | YES  |     | NULL    |       |
| job2  | varchar(20) | YES  |     | NULL    |       |
| age   | int(5)      | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| job   | varchar(10) | YES  |     | NULL    |       |
| job1  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

mysql> 

删除表字段:

mysql> alter table t1 drop job3;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> 
mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| job2  | varchar(20) | YES  |     | NULL    |       |
| age   | int(5)      | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| job   | varchar(10) | YES  |     | NULL    |       |
| job1  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql> 

1.4.5 增、删、改、查

1.4.5.1 增

#全字段增加数据:

mysql> insert into t1 values(1,"xiaoming","it");
Query OK, 1 row affected (0.00 sec)

mysql> 

或者

mysql> insert t1 values(2,"xiaohua","student");
Query OK, 1 row affected (0.00 sec)

mysql> 

或者

mysql> insert t1 set name="xiaoming",job="teacher";
Query OK, 1 row affected (0.00 sec)

mysql> 

#指定字段增加数据:

mysql> insert into t1(name) value("xiaoqiang"),("xiaowang");
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> 

1.4.5.2 删

#物理删除,数据就真没有了

mysql> delete from t1 where id=4;
Query OK, 1 row affected (0.00 sec)

mysql> 
mysql> select * from t1;
+----+----------+---------+
| id | name     | job     |
+----+----------+---------+
|  2 | xiaohua  | student |
|  3 | xiaoming | teacher |
|  5 | xiaowang | NULL    |
+----+----------+---------+
3 rows in set (0.00 sec)

mysql> 

#逻辑删除,需要添加一个字段,默认设置为0:

mysql> alter table t1 add isdelete bit default 0;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> 
mysql> select * from t1;
+----+----------+---------+----------+
| id | name     | job     | isdelete |
+----+----------+---------+----------+
|  2 | xiaohua  | student |          |
|  3 | xiaoming | teacher |          |
|  5 | xiaowang | NULL    |          |
+----+----------+---------+----------+
3 rows in set (0.00 sec)

mysql> 

#将isdelete字段设置为1:

mysql> update t1 set isdelete=1 where id=3;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> 
mysql> select * from t1;
+----+----------+---------+----------+
| id | name     | job     | isdelete |
+----+----------+---------+----------+
|  2 | xiaohua  | student |          |
|  3 | xiaoming | teacher |         |
|  5 | xiaowang | NULL    |          |
+----+----------+---------+----------+
3 rows in set (0.00 sec)

mysql> 

#然后查找isdelete字段为0得数据即可过滤了:

mysql> select * from t1 where isdelete=0;
+----+----------+---------+----------+
| id | name     | job     | isdelete |
+----+----------+---------+----------+
|  2 | xiaohua  | student |          |
|  5 | xiaowang | NULL    |          |
+----+----------+---------+----------+
2 rows in set (0.00 sec)

mysql> 

1.4.5.3 改

#修改表中得数据,不增加行,insert into会增加行: update t1 set name=“xiaoxiao” where id=6; t1是表名,

name是字段名,

where后面是条件语句,如果没有,就是对整个表得修改了,要慎重!

#修改多个字段用逗号分隔:

mysql> update t1 set name="xiaoqiang",job="engineer" where id=3 ;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> 
mysql> 
mysql> select * from t1;
+----+-----------+----------+----------+
| id | name      | job      | isdelete |
+----+-----------+----------+----------+
|  2 | xiaohua   | student  |          |
|  3 | xiaoqiang | engineer |         |
|  5 | xiaowang  | NULL     |          |
+----+-----------+----------+----------+
3 rows in set (0.00 sec)

mysql> 

1.4.5.4 查

全字段查找,不建议:

mysql> select * from t1;
+----+-----------+----------+----------+
| id | name      | job      | isdelete |
+----+-----------+----------+----------+
|  2 | xiaohua   | student  |          |
|  3 | xiaoqiang | engineer |         |
|  5 | xiaowang  | NULL     |          |
+----+-----------+----------+----------+
3 rows in set (0.00 sec)

mysql> 

查找指定字段:

mysql> select name,job from t1;
+-----------+----------+
| name      | job      |
+-----------+----------+
| xiaohua   | student  |
| xiaoqiang | engineer |
| xiaowang  | NULL     |
+-----------+----------+
3 rows in set (0.00 sec)

mysql> 

1.4.9 根据运算符查找

>= 大于等于

= 等于

> 大于

< 小于

<= 小于等于

!= 不等于

查找id大于等于4的用户id,用户名及工作:

mysql> select id,name,job from t1 where id >=4;
+----+----------+------+
| id | name     | job  |
+----+----------+------+
|  5 | xiaowang | NULL |
+----+----------+------+
1 row in set (0.00 sec)

mysql> 

and 多个条件同时满足

or 几个条件,满足其一即可

查找id大于等于3,并且没有标记删除的数据

mysql> select id,name,job,isdelete from t1 where id>=3 and isdelete=0;
+----+----------+------+----------+
| id | name     | job  | isdelete |
+----+----------+------+----------+
|  5 | xiaowang | NULL |          |
+----+----------+------+----------+
1 row in set (0.00 sec)

mysql> 

1.4.10 模糊查找

like 模糊查找

% 匹配任意多个字符

_ 匹配单个字符

查找名字中含有xiao字符的数据:

mysql> select id,name,job from t1 where name like "xiao%";
+----+-----------+----------+
| id | name      | job      |
+----+-----------+----------+
|  2 | xiaohua   | student  |
|  3 | xiaoqiang | engineer |
|  5 | xiaowang  | NULL     |
+----+-----------+----------+
3 rows in set (0.00 sec)

mysql> 

插入一条数据,查找名字中含有xiao并且后面跟一个单字符的数据

mysql> insert t1(name) value("xiaom");
Query OK, 1 row affected (0.01 sec)

mysql> 

mysql> select id,name,job from t1 where name like "xiao_";
+----+-------+------+
| id | name  | job  |
+----+-------+------+
|  6 | xiaom | NULL |
+----+-------+------+
1 row in set (0.00 sec)

mysql> 

1.4.11 范围查找

in 表示非连续的范围

between A and B 表示一个连续的范围内

not 不在某个条件内

查找id等于2,3或者6的数据

mysql> select id,name,job from t1 where id in(2,3,6);
+----+-----------+----------+
| id | name      | job      |
+----+-----------+----------+
|  2 | xiaohua   | student  |
|  3 | xiaoqiang | engineer |
|  6 | xiaom     | NULL     |
+----+-----------+----------+
3 rows in set (0.00 sec)

mysql> 

查找id在3到6之间数据(包含3和6):

mysql> select id,name,job from t1 where id between 3 and 6;
+----+-----------+----------+
| id | name      | job      |
+----+-----------+----------+
|  3 | xiaoqiang | engineer |
|  5 | xiaowang  | NULL     |
|  6 | xiaom     | NULL     |
+----+-----------+----------+
3 rows in set (0.00 sec)

mysql> 

查找id不等于3,6的数据:

mysql> select id,name,job from t1 where id not in (3,6);
+----+----------+---------+
| id | name     | job     |
+----+----------+---------+
|  2 | xiaohua  | student |
|  5 | xiaowang | NULL    |
+----+----------+---------+
2 rows in set (0.00 sec)

mysql> 

1.4.12 空值查找

is null查找空值

mysql> select id,name,job from t1 where job is null;
+----+----------+------+
| id | name     | job  |
+----+----------+------+
|  5 | xiaowang | NULL |
|  6 | xiaom    | NULL |
+----+----------+------+
2 rows in set (0.00 sec)

mysql> 

1.4.13 聚合

mysql> select max(age) from t1;
+----------+
| max(age) |
+----------+
|       15 |
+----------+
1 row in set (0.01 sec)

mysql> 
mysql> select min(age) from t1;
+----------+
| min(age) |
+----------+
|        6 |
+----------+
1 row in set (0.00 sec)

mysql> 
mysql> select count(*) from t1 where isdelete=0;
+----------+
| count(*) |
+----------+
|        3 |
+----------+
1 row in set (0.00 sec)

mysql> 

1.4.14 排序

order by 字段 asc 根据“列”从小到大排序

根据id,从小到大进行排序:

mysql> select * from t1 order by id asc;
+----+-----------+------+----------+----------+
| id | name      | age  | job      | isdelete |
+----+-----------+------+----------+----------+
|  2 | xiaohua   |   10 | student  |          |
|  3 | xiaoqiang |    6 | engineer |         |
|  5 | xiaowang  |   15 | NULL     |          |
|  6 | xiaom     |   11 | NULL     |          |
+----+-----------+------+----------+----------+
4 rows in set (0.00 sec)

mysql>

order by字段 desc 根据“列”从大到小排序

根据id,从大到小进行排序:

mysql> select * from t1 order by id desc;
+----+-----------+------+----------+----------+
| id | name      | age  | job      | isdelete |
+----+-----------+------+----------+----------+
|  6 | xiaom     |   11 | NULL     |          |
|  5 | xiaowang  |   15 | NULL     |          |
|  3 | xiaoqiang |    6 | engineer |         |
|  2 | xiaohua   |   10 | student  |          |
+----+-----------+------+----------+----------+
4 rows in set (0.00 sec)

mysql> 

1.4.15 分组

group by 字段

#根据名字分组,统计同名的个数:

mysql> select count(*),name from t1 group by name;
+----------+-----------+
| count(*) | name      |
+----------+-----------+
|        1 | xiaohua   |
|        1 | xiaom     |
|        1 | xiaoqiang |
|        2 | xiaowang  |
+----------+-----------+
4 rows in set (0.00 sec)

mysql> 

1.4.16 限制

limit n; 显示前n行

#显示前三行

mysql> select * from t1 limit 3;
+----+-----------+------+----------+----------+
| id | name      | age  | job      | isdelete |
+----+-----------+------+----------+----------+
|  2 | xiaohua   |   10 | student  |          |
|  3 | xiaoqiang |    6 | engineer |         |
|  5 | xiaowang  |   15 | NULL     |          |
+----+-----------+------+----------+----------+
3 rows in set (0.00 sec)

mysql> 

#显示从第3行开始后的3行;

mysql> select * from t1 limit 3,3;
+----+----------+------+-------+----------+
| id | name     | age  | job   | isdelete |
+----+----------+------+-------+----------+
|  6 | xiaom    |   11 | NULL  |          |
|  9 | xiaowang |   18 | sales |         |
+----+----------+------+-------+----------+
2 rows in set (0.00 sec)

mysql> 

#显示从第3行开始后的4行

mysql> select * from t1 limit 4 offset 3;
+----+----------+------+-------+----------+
| id | name     | age  | job   | isdelete |
+----+----------+------+-------+----------+
|  6 | xiaom    |   11 | NULL  |          |
|  9 | xiaowang |   18 | sales |         |
+----+----------+------+-------+----------+
2 rows in set (0.00 sec)

mysql> 

1.5 视图的相关操作

视图并不是真实存在的表,主要是将常用的到字段或者数据整合成一个“表”。

1.5.1 创建视图

#先创建表:

mysql> create table t2(id int(10) not null auto_increment primary key,name varchar(20),job varchar(10));
Query OK, 0 rows affected (0.01 sec)

mysql> 

#插入数据:

mysql> insert t2 set name="xiaoming",job="it";
Query OK, 1 row affected (0.00 sec)

mysql> 
mysql> insert t2 set name="xiaowang",job="student";
Query OK, 1 row affected (0.00 sec)

mysql> 
mysql> insert t2 set name="xiaohong",job="teacher";
Query OK, 1 row affected (0.00 sec)

mysql> 

#创建视图:

mysql> create view v1 as select name,job from t1;
Query OK, 0 rows affected (0.00 sec)

mysql> 
mysql> create view v2 as select * from t2 where id >= 2;
Query OK, 0 rows affected (0.00 sec)

mysql>

1.5.2 查看视图

#查看所有视图:

mysql> select * from information_schema.views where table_schema="mysql"\G
*************************** 1. row ***************************
       TABLE_CATALOG: def
        TABLE_SCHEMA: mysql
          TABLE_NAME: v1
     VIEW_DEFINITION: select `mysql`.`t1`.`name` AS `name`,`mysql`.`t1`.`job` AS `job` from `mysql`.`t1`
        CHECK_OPTION: NONE
        IS_UPDATABLE: YES
             DEFINER: root@localhost
       SECURITY_TYPE: DEFINER
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
*************************** 2. row ***************************
       TABLE_CATALOG: def
        TABLE_SCHEMA: mysql
          TABLE_NAME: v2
     VIEW_DEFINITION: select `mysql`.`t2`.`id` AS `id`,`mysql`.`t2`.`name` AS `name`,`mysql`.`t2`.`job` AS `job` from `mysql`.`t2` where (`mysql`.`t2`.`id` >= 2)
        CHECK_OPTION: NONE
        IS_UPDATABLE: YES
             DEFINER: root@localhost
       SECURITY_TYPE: DEFINER
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
2 rows in set (0.00 sec)

mysql> 

#查看某个视图结构:

mysql> desc v2;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(10)     | NO   |     | 0       |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| job   | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql> 

#查看视图内容:

mysql> select * from v2;
+----+----------+---------+
| id | name     | job     |
+----+----------+---------+
|  2 | xiaowang | student |
|  3 | xiaohong | teacher |
+----+----------+---------+
2 rows in set (0.00 sec)

mysql> 

1.5.3 删除视图

mysql> drop view v2;
Query OK, 0 rows affected (0.00 sec)

mysql> 

或者

mysql> drop view if exists v2;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> 

1.5.4 修改视图

alter view v1 as select id,job from t1;

mysql> alter view v1 as select id,job from t1;
Query OK, 0 rows affected (0.00 sec)

mysql> 

1.6 修改密码

1.6.1 密码为空或者已知当前密码

方法一:用SET PASSWORD命令

首先登录MySQL。

格式:mysql> set password for用户名@localhost = password(‘新密码’);

范例:

mysql> set password for root@localhost=password('123');
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> 

方法二:在shell终端执行:

[root@node02 ~]# mysql -uroot -p -e "set password for root@localhost=password('123456');"
Enter password:        ------此处输入原密码
[root@node02 ~]# 

ps:注意双引号和单引号!!!

方法三:在shell终端用mysqladmin

格式:mysqladmin -u用户名 -p旧密码 password新密码

范例:

[root@node02 ~]# mysqladmin -uroot -p123 password 123456
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
[root@node02 ~]#

方法四:用UPDATE直接编辑user表 首先登录MySQL。

mysql> use mysql; 

mysql 5.7以前版本
mysql> update user set password=password('123') where user='root' and host='localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> 

mysql 5.7以后版本
mysql> update user set authentication_string=password('123') where user='root' and host='localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> 

1.6.2 忘记密码

1.6.2.1 mysql 5.5

  1. 可执行使用/usr/bin/mysqld_safe --user=mysql --skip-grant-tables &
[root@node01 ~]# /usr/bin/mysqld_safe --user=mysql --skip-grant-tables &
[1] 16638
[root@node01 ~]# 200603 06:27:49 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
200603 06:27:49 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

[root@node01 ~]# 
  1. 然后用mysql命令进入修改密码:
[root@node01 ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 1
Server version: 5.5.65-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> update mysql.user set passwrod=password('') where user="root" and host="localhost";
ERROR 1054 (42S22): Unknown column 'passwrod' in 'field list'
MariaDB [(none)]> 
MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [mysql]> update user set password=password('123') where user='root' and host='localhost';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [mysql]> 

MariaDB [mysql]> flush  privileges; 
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> 

1.6.2.2 mysql 5.7

  1. 编辑修改/etc/my.cnf
[root@node02 ~]# vim /etc/my.cnf
  1. 在[mysqld]中添加

skip-grant-tables

例如:

[mysqld]

skip-grant-tables

datadir=/data/mysql

socket=/temp/mysql.sock

  1. 重启mysql
 [root@node02 ~]# systemctl restart mysqld.service
  1. 用户无密码登录
[root@node02 ~]# mysql -uroot -p (直接点击回车,密码为空)
  1. 选择数据库
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> 
  1. 修改root密码
mysql> update mysql.user set authentication_string=password('1qaz.#EDC') where user='root';
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 1

mysql> 
  1. 执行
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> 
  1. 退出 mysql
mysql> quit
Bye
[root@node02 ~]#
  1. 编辑 /etc/my.cnf

删除 skip-grant-tables 保存退出

  1. 重启mysql
[root@node02 ~]# systemctl restart mysqld.service
[root@node02 ~]# 

1.7 安全设置

安装完mysql,如果用于生产环境,最好执行mysql_secure_installation来做一些常规化安全设置。

1.7.1 设置密码复杂度策略及密码;

[root@node02 ~]# mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No: Y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
Please set the password for root here.

New password: 

Re-enter new password: 

1.7.2 删除匿名用户;

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y                        
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.

1.7.3 不允许远程登录;

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.

1.7.4 删除测试数据库;

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y

 - Dropping test database...
   Success.

 - Removing privileges on test database...
   Success.

1.7.5 刷新MySQL的系统权限相关表。

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.

All done! 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL数据库for CentOS7 yum安装、5.7.30编译安装和基础操作 的相关文章

  • pthread_self() 返回的线程 ID 与调用 gettid(2) 返回的内核线程 ID 不同

    这句话来自于pthread self 的手册页 http linux die net man 3 pthread self 那么 我应该根据什么来决定是否应该使用pthread self or gettid确定哪个线程正在运行该函数 两者都
  • 如何在linux中使用iptables将http和https流量转发到透明代理[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题似乎不是关于主要由程序员使用的特定编程问题 软件算法或软件工具 help on topic 如果您认为该问题与主题相关另一个 St
  • 如何自动更新数据库中的记录?

    我有一个工作表 在其中插入新工作 该表还包含职位发布日期 默认情况下 当发生新插入时 作业状态为打开状态 现在 当作业超过 30 天时 我想将作业状态从开放更改为关闭 我该怎么做 尝试创建一个每天运行的事件 如下所示 CREATE EVEN
  • Ctrl-p 和 Ctrl-n 在 Docker 下表现异常

    For the life of me I can t seem to figure out why ctrl p and ctrl n don t work like they re supposed to under the Docker
  • IMAP 和 PHP - 从已发送文件夹和收件箱文件夹中获取所有电子邮件

    我正在尝试获取接收和发送的所有电子邮件 并使用 PHP 将其写入 mySQL 数据库 我使用的主机名是 hostname imap gmail com 993 imap ssl INBOX 它仅引用收件箱 并成功抓取收到的电子邮件 为了抓取
  • 选择每组最新的项目[重复]

    这个问题在这里已经有答案了 可能的重复 检索每组中的最后一条记录 https stackoverflow com questions 1313120 retrieving the last record in each group 我有 2
  • 在用户程序中使用 或在驱动程序模块代码中使用 ...这有关系吗?

    我正在开发一个设备驱动程序模块和关联的用户库来处理ioctl 来电 该库获取相关信息并将其放入一个结构中 该结构被传递到驱动程序模块中并在那里解压 然后进行处理 我省略了很多步骤 但这就是总体思路 一些数据通过结构体传递ioctl is u
  • Apache LOG:子进程 pid xxxx 退出信号分段错误 (11)

    Apache PHP Mysql Linux 注意 子进程 pid 23145 退出信号分段错误 11 tmp 中可能存在 coredump 但 tmp下没有找到任何东西 我怎样才能找到错误 PHP 代码中函数的无限循环导致了此错误
  • 如何回忆上一个 bash 命令的参数?

    Bash 有没有办法回忆上一个命令的参数 我通常这样做vi file c其次是gcc file c Bash 有没有办法回忆上一个命令的参数 您可以使用 or 调用上一个命令的最后一个参数 Also Alt can be used to r
  • DBX 错误:驱动程序无法正确初始化

    我在跑步德尔福XE3 终极版 MySQL 数据库 这是我点击时收到的错误Test Connection 作为回应 我在 xampp 目录中找到了 libmysql 库 并将其复制到我的 System32 目录中 但这是行不通的 此消息指的是
  • 日常 MySQL(部分和过滤)复制的最佳实践?

    我有一个相当大的数据库 有超过 40 个表 我只需要复制几个表 5 并且每个表也被过滤 我正在寻找一些复制这些数据的最佳实践 每天就足够了 我可以只选择几个表并为每个表包含一些 WHERE 子句 我正在考虑为每个表启动 mysqldump
  • 通过 PDO 将双精度数插入 MySQL 时精度损失

    我遇到了这种非常烦人的行为 我想知道我是否做错了什么 或者这是否是故意的 如果是的话 为什么 每当我在 php 5 3 中有一个 double 类型的变量 并且想将其插入到数据库 MYSQL 5 0 的 double 类型字段中时 该值总是
  • 使用 --prof 选项创建多个日志文件而不是一个 v8.log 的节点

    我正在尝试使用 prof 选项来分析我的 Node 应用程序 但我发现不是一个单一的 v8 log 文件 而是使用诸如isolate 0x9582b40 v8 log isolate 0xa1cab78 v8 6049 等前缀创建的多个文件
  • 由于 abi::cxx11 符号导致的链接问题?

    我们最近收到一份报告 因为GCC 5 1 libstdc 和双 ABI http gcc gnu org onlinedocs libstdc manual using dual abi html 它似乎Clang 不知道 GCC 内联名称
  • MySQL解释更新

    作为我大学复习的一部分 我试图回答以下问题 至少在表的一个属性上创建索引 employees 数据库 您可以在其中使用 MySQL EXPLAIN 工具 清楚地显示好处 在条款或检索方面 和负面 在 更新条款 创建相关索引的信息 对于第一部
  • 重用 PDO 语句 var 会使进程崩溃

    我重用一个变量来存储两个不同的 PDO mysql 语句 stmt dbh gt prepare SELECT stmt gt execute stmt dbh gt prepare UPDATE crash here Error in o
  • 如何将变量设置为触发器 MYSQL 内存储过程的结果?

    我这里有一个小问题 我正在为我的数据库工作创建一个触发器 但我不知道如何在触发器内使用存储过程 我想将过程的结果保存在变量中 然后使用稍后在 IF 比较器上变量 这是我的代码 DELIMITER CREATE TRIGGER insert
  • MySQL - 从另一个表插入与常量合并的数据

    我有一个包含一些数据的临时表 products temp 并且我有另一个需要将数据插入其中的表 产品 我需要在新记录上手动设置一些常量 例如vendor id 1等 是否可以在一次请求中插入临时表数据和常量 临时产品 product nam
  • 使用多个 WHERE 子句更新 Codeigniter 中的批次

    我查看了 CI 用户指南来了解如何处理update batch 并且它似乎只接受一个索引来匹配要更新的行 但在我的例子中 我需要指定两个索引 例如lang and id page我一起用作索引 这样的lang en id page 115是
  • 如何获取所有mysql元组结果并转换为json

    我能够从表中获取单个数据 但是当我试图获取表上的所有数据时 我只得到一行 cnn execute sql rows cnn fetchall column t 0 for t in cnn description for row in ro

随机推荐

  • C++开发环境搭建_Visual Studio

    环境搭建步骤 l 下载软件 l 安装软件 l 运行软件 1 下载软件 在百度搜索 visual studio 选择 如下图中的选项 进入Visual Studio 官网后 选择 下载Windows版 并选择Community 2017 社区
  • javafx集成Sqlite工具类,包含增删改查范例

    javafx集成Sqlite工具类 包含增删改查范例 技术分享交流 qq群 835259695 package com hq utils import com hq database entity CollectionBox import
  • 算法练习:707 设计链表(2022-09-23)

    707 设计链表 来源 力扣 LeetCode 链接 https leetcode cn problems design linked list 设计链表的实现 您可以选择使用单链表或双链表 单链表中的节点应该具有两个属性 val和next
  • SmartImageView的简单使用

    SmartImageView主要是为了加速从网上加载图片 支持根据URL地址加载图片 支持异步加载图片 支持图片缓存等 下载地址 http loopj com android smart image view 下载完成后拷贝到项目下的lib
  • nginx反向代理解决vue打包后运行产生的跨域问题

    代理简介 正向代理 客户端明确服务端地址 服务端接收请求时只清楚来自哪个代理服务 反向代理 隐藏服务端信息 访问者并不知道自己访问的时一个地址 反向实现 1 下载nginx 2 修改nginx conf文件 server server 监听
  • 解析excel的坑

    1 解析excel的时候因调用的方法不同导致解析excel的时候数据有时会少一行 hssfSheet getLastRowNum 最后一行行标 比行数小1 hssfSheet getRow k getLastCellNum 获取列数 比最后
  • C++音视频开发从放弃到入门(基于FFmpeg+OpenCV)

    前言 音视频开发一定要学C 吗 答案是肯定的 虽然其它语言也能搞音视频开发 甚至使用起来更简单 但 语言越高级 离真相就越远 当你的功能需求日益增多 程序的性能需求越来越迫切 你想进一步了解程序实现的细节时 使用其它语言往往会面临 无法解决
  • Pinely Round 2 (Div. 1 + Div. 2) A~D

    A Channel 题意 有n个订阅者 a个初始在线人数 q个上下线情况 问是否一定或有可能所有订阅者都阅读了新的帖子 思路 同时在线人数等于n时 一定都阅读了 输出YES 初始在线人数加上所有的上线人数 所有的 号 大于等于n的话输出MA
  • STL- 常用算法(拷贝和替换,算术生成,集合算法)

    目录 1 常用拷贝和替换算法 1 1copy 容器内指定范围的元素拷贝到另一容器中 1 2replace 将容器内指定范围的旧元素修改为新元素 1 3 replace if 将区间内满足条件的元素 替换成指定元素 1 4 swap 互换两个
  • Docker安装redis集群

    文章目录 1 Redis集群介绍 2 Redis 集群的数据分片 3 Redis 集群的主从复制模型 4 docker搭建Redis集群 3主3从 5 主从容错切换迁移案例 6 主从扩容案例 7 主从缩容案例 1 Redis集群介绍 Red
  • 时序预测

    时序预测 MATLAB实现PSO GRU 粒子群优化门控循环单元 时间序列预测 目录 时序预测 MATLAB实现PSO GRU 粒子群优化门控循环单元 时间序列预测 预测效果 基本介绍 模型介绍 PSO模型 GRU模型 PSO GRU模型
  • C++中的静态和动态多态

    之前学过继承 子类继承父类的属性 多态就是基于继承而来的 我们在如果只用继承 那么子类继承父类的各种属性在编译环节 就已经被确认了 导致代码不灵活 如果继承下来的某个子类不支持某种问题的解决 那么父类就需要重新编写代码 这样这个子类ok了
  • (四)为深度伪造预处理数据集

    目录 在Notebook上设置基础 提取视频帧 人脸检测和提取 下载项目文件 75 5 MB 深度伪造 使用深度学习在视频中将一个人的脸换成另一个人的脸 是当今使用人工智能的最有趣和最可怕的方式之一 虽然深度伪造可用于合法目的 但它们也可用
  • Redis新数据类型

    Bitmaps 1 简介 现代计算机用二进制 位 作为信息的基础单位 1个字节等于8位 例如 abc 字符串是由3个字节组成 但实际在计算机存储时将其用二进制表示 abc 分别对应的ASCII码分别是97 98 99 对应的二进制分别是01
  • C++实现简易图书馆管理系统

    目录 一 概要设计 二 详细设计 模块一 管理员模块 一 概要设计 二 详细设计 模块二 借阅者模块 一 概要设计 二 详细设计 模块三 初始界面模块 三 总结 一 概要设计 本程序为图书馆管理系统 按需求 本程序大致分为2个部分 其一是管
  • nodejs:三个点(...)是什么

    参考 JS中三个点 是什么鬼
  • IKE SA和IPSec SA的区别

    刚接触IPSec的时候 一直很奇怪 为什么要做两阶段的协商 先协商出来一个IKE SA 然后再IKE SA的基础上协商出来一个IPSec SA 直接一步到位协商出IPSec SA不是很好吗 但是在实际应用中 直接协商IPSec SA就显得不
  • 人工智能-动物识别系统

    在本系统当中 知识库中的知识用产生式规则来表示 共有如下15条规则 R1 IF该动物有奶THEN该动物是哺乳动物 R2 IF该动物有毛发THEN该动物是哺乳动物 R3 IF该动物有羽毛THEN该动物是鸟 R4 IF该动物会飞AND会下蛋TH
  • 《深入浅出深度学习》之“从逻辑学到认知科学”

    大家应该都听说过 在2016年 Google DeepMind 的AlphaGo 与韩国围棋大师李世石九段进行了著名的人机大战 并且取得完胜 媒体描述AlphaGo的胜利时 都提到了人工智能 Artificial Intelligence
  • MySQL数据库for CentOS7 yum安装、5.7.30编译安装和基础操作

    1 MySQL数据库简介 MySQL 是一种关系数据库管理系统 关系数据库将数据保存在不同的表中 而不是将所有数据放在一个大仓库内 这样就增加了速度并提高了灵活性 MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言 关系数据库管