MySQL基础命令

这篇博客详细介绍了MySQL的基础知识,包括关系型数据库的概念、MySQL的安装配置、数据库组件、SQL语句的三大类别(DDL、DML、DCL)以及数据类型。此外,还涵盖了MySQL数据库的创建、表操作、用户管理、查询和授权等实战操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. 关系型数据库介绍

1.1 数据结构模型

1.2 RDBMS专业名词

1.3 关系型数据库的常见组件

1.4 SQL语句

 1.5 数据类型

2. mysql安装与配置

2.1 mysql安装

2.2 mysql配置

3. mysql的程序组成

3.1 mysql工具使用

3.2 服务器监听的两种socket地址

4. mysql数据库操作

4.1 DDL操作

4.1.1 数据库操作

4.1.2 表操作

4.1.3 用户操作

4.1.4 查看命令SHOW

4.1.5 获取帮助

4.2 DML操作

4.2.1 INSERT语句

4.2.2 SELECT语句

 4.2.3 update语句

 4.2.4 delete语句

4.2.5 truncate语句

4.3 DCL操作

4.3.1 创建授权grant

 4.3.2 查看授权

 4.3.3 使用远程连接工具登录

 4.3.4 取消授权REVOKE

实战案例



1. 关系型数据库介绍

1.1 数据结构模型

数据结构模型主要有:

  • 层次模型
  • 网状结构
  • 关系模型

关系模型:
二维关系:row,column

数据库管理系统:DBMS
关系:Relational,RDBMS

1.2 RDBMS专业名词

常见的关系型数据库管理系统:

  • MySQL:MySQL,MariaDB,Percona-Server
  • PostgreSQL:简称为pgsql
  • Oracle
  • MSSQL

SQL:Structure Query Language,结构化查询语言

约束:constraint,向数据表提供的数据要遵守的限制

  • 主键约束:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行。且必须提供数据,不能为空(NOT NULL)。
    • 一个表只能存在一个
  • 惟一键约束:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行。允许为空(NULL)
    • 一个表可以存在多个
  • 外键约束:一个表中的某字段可填入数据取决于另一个表的主键已有的数据
  • 检查性约束

索引:将表中的一个或多个字段中的数据复制一份另存,并且这些数据需要按特定次序排序存储

1.3 关系型数据库的常见组件

关系型数据库的常见组件有:

  • 数据库:database
  • 表:table,由行(row)和列(column)组成
  • 索引:index
  • 视图:view
  • 用户:user
  • 权限:privilege
  • 存储过程:procedure
  • 存储函数:function
  • 触发器:trigger
  • 事件调度器:event scheduler

1.4 SQL语句

SQL语句有三种类型:

  • DDL:Data Defination Language,数据定义语言
  • DML:Data Manipulation Language,数据操纵语言
  • DCL:Data Control Language,数据控制语言

SQL语句类型

对应操作

DDL

CREATE:创建
DROP:删除
ALTER:修改

DML

INSERT:向表中插入数据
DELETE:删除表中数据
UPDATE:更新表中数据
SELECT:查询表中数据

DCL

GRANT:授权
REVOKE:移除授权

 1.5 数据类型

MySQL中定义数据字段的类型对数据库的优化是非常重要的。MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

数值类型

      MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGERSMALLINTDECIMALNUMERIC),以及近似数值数据类型(FLOATREALDOUBLE PRECISION)

      关键字INTINTEGER的同义词,关键字DECDECIMAL的同义词。BIT数据类型保存位字段值,并且支持MyISAMMEMORYInnoDBBDB表。作为SQL标准的扩展,MySQL也支持整数类型TINYINTMEDIUMINTBIGINT。下面的表显示了需要的每个整数类型的存储和范围

类型

大小

范围(有符号)

范围(无符号)

用途

TINYINT

1 byte

(-128127)

(0255)

小整数值

SMALLINT

2 bytes

(-32 76832 767)

(065 535)

大整数值

MEDIUMINT

3 bytes

(-8 388 6088 388 607)

(016 777 215)

大整数值

INTINTEGER

4 bytes

(-2 147 483 6482 147 483 647)

(04 294 967 295)

大整数值

BIGINT

8 bytes

(-9,223,372,036,854,775,8089 223 372 036 854 775 807)

(018 446 744 073 709 551 615)

极大整数值

FLOAT

4 bytes

(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)

0,(1.175 494 351 E-38,3.402 823 466 E+38)

单精度
浮点数值

DOUBLE

8 bytes

(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)

0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)

双精度
浮点数值

DECIMAL

DECIMAL(M,D) ,如果M>D,M+2否则为D+2

依赖于MD的值

依赖于MD的值

小数值

 时间类型:

类型

大小( bytes)

范围

格式

用途

DATE

3

1000-01-01/9999-12-31

YYYY-MM-DD

日期值

TIME

3

'-838:59:59'/'838:59:59'

HH:MM:SS

时间值或持续时间

YEAR

1

1901/2155

YYYY

年份值

DATETIME

8

1000-01-01 00:00:00/9999-12-31 23:59:59

YYYY-MM-DD HH:MM:SS

混合日期和时间值

TIMESTAMP

4

1970-01-01 00:00:00/2038

结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038119日 凌晨 03:14:07

YYYYMMDD HHMMSS

混合日期和时间值,时间戳

 字符串类型:

类型

大小

用途

CHAR

0-255 bytes

定长字符串

VARCHAR

0-65535 bytes

变长字符串

TINYBLOB

0-255 bytes

不超过 255 个字符的二进制字符串

TINYTEXT

0-255 bytes

短文本字符串

BLOB

0-65 535 bytes

二进制形式的长文本数据

TEXT

0-65 535 bytes

长文本数据

MEDIUMBLOB

0-16 777 215 bytes

二进制形式的中等长度文本数据

MEDIUMTEXT

0-16 777 215 bytes

中等长度文本数据

LONGBLOB

0-4 294 967 295 bytes

二进制形式的极大文本数据

LONGTEXT

0-4 294 967 295 bytes

极大文本数据

2. mysql安装与配置

2.1 mysql安装

mysql安装方式有三种:

  • 源代码:编译安装
  • 二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用
  • 程序包管理器管理的程序包:
    • rpm:有两种
      • OS Vendor:操作系统发行商提供的
      • 项目官方提供的
    • deb

下载的方式:

//源码安装
//下载源码包
[root@Gin ~]# wget -O /usr/src/mysql57-community-release-el7-10.noarch.rpm http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
mysql57-community-re 100%[===================>]  24.95K  --.-KB/s    in 0.1s    

2022-07-25 16:13:09 (174 KB/s) - ‘mysql57-community-release-el7-10.noarch.rpm’ saved [25548/25548]

//安装MySQL源码包
[root@Gin ~]# rpm -Uvh mysql57-community-release-el7-10.noarch.rpm 
warning: mysql57-community-release-el7-10.noarch.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:mysql57-community-release-el7-10 ################################# [100%]

//禁用MySQL
[root@Gin ~]# yum module disable mysql
Repository extras is listed more than once in the configuration
Last metadata expiration check: 0:01:09 ago on Mon 25 Jul 2022 04:14:41 PM CST.
Module yaml error: Unexpected key in data: static_context [line 9 col 3]
Module yaml error: Unexpected key in data: static_context [line 9 col 3]
Dependencies resolved.
Nothing to do.
Complete!

//下载依赖包
yum -y install mysql-community-server mysql-community-client  mysql-community-common mysql-community-devel  --nogpgcheck

//yum安装
//下载mariadb包
yum install -y mariadb*
//设置开机自启
systemctl enable --now  mariadb
//修改密码
mysql
set password = password('xxxx');
exit
//登录MySQL
mysql -uroot -pxxxx

2.2 mysql配置

//注意前一步安装时将MySQL禁用这里需要开启
[root@Gin ~]# service mysqld restart
Redirecting to /bin/systemctl restart mysqld.service

//启动mysql并设置开机自动启动
[root@Gin ~]# systemctl enable --now mysqld
[root@Gin ~]# systemctl status mysqld.service 
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor prese>
   Active: active (running) since Mon 2022-07-25 16:23:20 CST; 38s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
 Main PID: 2537 (mysqld)
    Tasks: 27 (limit: 23484)
   Memory: 341.5M
   CGroup: /system.slice/mysqld.service
           └─2537 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld>

Jul 25 16:23:10 Gin systemd[1]: Starting MySQL Server...
Jul 25 16:23:20 Gin systemd[1]: Started MySQL Server.


//查看3306端口已经开启
[root@Gin ~]# ss -anltup | grep 3306
tcp   LISTEN 0      80                 *:3306            *:*    users:(("mysqld",pid=2537,fd=22))       

//在日志文件中找出临时密码
[root@Gin ~]# grep "password" /var/log/mysqld.log 
2022-07-25T08:23:17.626555Z 1 [Note] A temporary password is generated for root@localhost: aCF=&Pq7uZtv

//使用获取到的临时密码登录mysql
[root@Gin ~]# mysql -uroot -p
Enter password: 		//在这里输入MySQL的临时密码 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.38

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

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> 就表示已经成功进入MySQL


//修改mysql登录密码
//重置密码                   
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.01 sec)

//修改密码 
mysql>  ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> quit			//退出
Bye


//为避免mysql自动升级,这里需要卸载最开始安装的yum源
[root@Gin ~]# rpm -e mysql57-community-release

3. mysql的程序组成

  • 客户端
    • mysql:CLI交互式客户端程序
    • mysql_secure_installation:安全初始化,强烈建议安装完以后执行此命令
    • mysqldump:mysql备份工具
    • mysqladmin
  • 服务器端
    • mysqld

3.1 mysql工具使用

//语法:mysql [OPTIONS] [database]
//常用的OPTIONS:
    -uUSERNAME      //指定用户名,默认为root
    -hHOST          //指定服务器主机,默认为localhost,推荐使用ip地址
    -pPASSWORD      //指定用户的密码
    -P#             //指定数据库监听的端口,这里的#需用实际的端口号代替,如-P3307
    -V              //查看当前使用的mysql版本
    -e          //不登录mysql执行sql语句后退出,常用于脚本
    

[root@Gin ~]# mysql -V		//查看当前的MySQL版本
mysql  Ver 14.14 Distrib 5.7.38, for Linux (x86_64) using  EditLine wrapper

//使用root的身份用IP登录127.0.0.1MySQL
[root@Gin ~]# mysql -uroot -p123456 -h127.0.0.1
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.38 MySQL Community Server (GPL)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

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> 

//注意,不推荐直接在命令行里直接用-pPASSWORD的方式登录,而是使用-p选项,然后交互式输入密码
[root@Gin ~]# mysql -uroot -p -h127.0.0.1
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.38 MySQL Community Server (GPL)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

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的库   注意这里只是进入后便退出了只将查询到的库打印出来
[root@Gin ~]# mysql -uroot -p -h127.0.0.1 -e 'show databases;'
Enter password: 
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

3.2 服务器监听的两种socket地址

socket类型

说明

ip socket

默认监听在tcp的3306端口,支持远程通信

unix sock

监听在sock文件上(/tmp/mysql.sock,/var/lib/mysql/mysql.sock)
仅支持本地通信
server地址只能是:localhost,127.0.0.1

4. mysql数据库操作

4.1 DDL操作

4.1.1 数据库操作

//创建数据库
//语法:CREATE DATABASE [IF NOT EXISTS] 'DB_NAME';
//创建数据库Gin_A
mysql> create database if not exists Gin_A;
Query OK, 1 row affected (0.00 sec)

//查看当前实例有哪些数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Gin_A              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

//删除数据库
//语法:DROP DATABASE [IF EXISTS] 'DB_NAME';
//删除数据库wangqingge
mysql> drop database if exists Gin_A;
Query OK, 0 rows affected (0.00 sec)

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

4.1.2 表操作

//创建表
//语法:CREATE TABLE table_name (col1 datatype 修饰符,col2 datatype 修饰符) ENGINE='存储引擎类型';
//在数据库wangqingge里创建表wangqing
mysql> create database Gin_A;		//创建数据库Gin_A
Query OK, 1 row affected (0.00 sec)

mysql> use Gin_A;		//进入Gin_A数据库
Database changed
mysql> create table Gin_A(id int not null,name varchar(100) not null,age tinyint);
Query OK, 0 rows affected (0.02 sec)

//查看当前数据库有哪些表
mysql> show tables;
+-----------------+
| Tables_in_Gin_A |
+-----------------+
| Gin_A           |
+-----------------+
1 row in set (0.00 sec)

//删除表
//语法:DROP TABLE [ IF EXISTS ] 'table_name';
//删除表wangqing
mysql> drop table Gin_A;
Query OK, 0 rows affected (0.01 sec)

//查看数据库中的表
mysql> show tables;
Empty set (0.00 sec)

4.1.3 用户操作

mysql用户帐号由两部分组成,如'USERNAME'@'HOST',表示此USERNAME只能从此HOST上远程登录

这里('USERNAME'@'HOST')的HOST用于限制此用户可通过哪些主机远程连接mysql程序,其值可为:

  • IP地址,如:172.16.12.129
  • 通配符
    • %:匹配任意长度的任意字符,常用于设置允许从任何主机登录
    • _:匹配任意单个字符
//数据库用户创建
//语法:CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];
//创建数据库用户wangqing
mysql> create user 'Gin'@'127.0.0.1' identified by 'Gin123';
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye

//使用新创建的用户和密码登录
[root@Gin ~]# mysql -uGin -p -h127.0.0.1
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.7.38 MySQL Community Server (GPL)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

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> 

//删除数据库用户
//语法:DROP USER 'username'@'host'; 
mysql> drop user 'Gin'@'127.0.0.1';			//在删除用户时需要登录root用户来执行
Query OK, 0 rows affected (0.00 sec)

4.1.4 查看命令SHOW

//查看所有字符集
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 |
...
...

//查看当前数据库支持的所有存储引擎
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

//查看数据库信息
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Gin_A              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

//不进入某数据库而列出其包含的所有表
mysql> show tables from sys;
+-----------------------------------------------+
| Tables_in_sys                                 |
+-----------------------------------------------+
| host_summary                                  |
| host_summary_by_file_io                       |
...
...

//查看表结构
//语法:DESC [db_name.]table_name;
mysql> desc sys.host_summary;
+------------------------+---------------+------+-----+---------+-------+
| Field                  | Type          | Null | Key | Default | Extra |
+------------------------+---------------+------+-----+---------+-------+
| host                   | varchar(60)   | YES  |     | NULL    |       |
| statements             | decimal(64,0) | YES  |     | NULL    |       |
| statement_latency      | text          | YES  |     | NULL    |       |
| statement_avg_latency  | text          | YES  |     | NULL    |       |
| table_scans            | decimal(65,0) | YES  |     | NULL    |       |
| file_ios               | decimal(64,0) | YES  |     | NULL    |       |
| file_io_latency        | text          | YES  |     | NULL    |       |
| current_connections    | decimal(41,0) | YES  |     | NULL    |       |
| total_connections      | decimal(41,0) | YES  |     | NULL    |       |
| unique_users           | bigint(21)    | NO   |     | 0       |       |
| current_memory         | text          | YES  |     | NULL    |       |
| total_memory_allocated | text          | YES  |     | NULL    |       |
+------------------------+---------------+------+-----+---------+-------+
12 rows in set (0.00 sec)

//查看某表的创建命令
//语法:SHOW CREATE TABLE table_name;
mysql> show create table Gin_A.Gin_A;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                           |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
| Gin_A | CREATE TABLE `Gin_A` (
  `id` int(11) NOT NULL,
  `name` varchar(100) NOT NULL,
  `age` tinyint(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

//查看某表的状态
//语法:SHOW TABLE STATUS LIKE 'table_name'\G
mysql> use Gin_A;      //进入数据库Gin_A
Database changed
mysql> show table status like 'Gin_A'\G		//查看Gin_A表的状态
*************************** 1. row ***************************
           Name: Gin_A
         Engine: InnoDB
        Version: 10
     Row_format: Dynamic
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2022-07-25 17:18:47
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.00 sec)

4.1.5 获取帮助

//获取命令使用帮助
//语法:HELP keyword;
mysql> HELP CREATE TABLE;       //获取创建表的帮助
Name: 'CREATE TABLE'
Description:
Syntax:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_options]
    [partition_options]

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    [(create_definition,...)]
    [table_options]
    [partition_options]
    [IGNORE | REPLACE]
    [AS] query_expression
 ......
 ......

4.2 DML操作

DML操作包括增(INSERT)、删(DELETE)、改(UPDATE)、查(SELECT),均属针对表的操作。

4.2.1 INSERT语句

//DML操作之增操作insert
//语法:INSERT [INTO] table_name [(column_name,...)] {VALUES | VALUE} (value1,...),(...),...

mysql> use Gin_A;
Database changed
//插入一条
mysql> insert into Gin_A(id,name,age) value(1,'tom',20);	/
Query OK, 1 row affected (0.01 sec)
//插入多条
mysql> insert into Gin_A(id,name,age) values(2,'jerry',23),(3,'Gin',20),(4,'Kin',26);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

注意:在最新版中values可以插入多条也可以插入一条

4.2.2 SELECT语句

字段column表示法

表示符

代表什么?

*

所有字段

as

字段别名,如col1 AS alias1
当表名很长时用别名代替

条件判断语句WHERE

操作类型

常用操作符

操作符

>,<,>=,<=,=,!=
BETWEEN column# AND column#
LIKE:模糊匹配
RLIKE:基于正则表达式进行模式匹配
IS NOT NULL:非空
IS NULL:空

条件逻辑操作

AND
OR
NOT

ORDER BY:排序,默认为升序(ASC)

ORDER BY语句

意义

ORDER BY ‘column_name'

根据column_name进行升序排序

ORDER BY 'column_name' DESC

根据column_name进行降序排序

ORDER BY ’column_name' LIMIT 2

根据column_name进行升序排序
并只取前2个结果

ORDER BY ‘column_name' LIMIT 1,2

根据column_name进行升序排序
并且略过第1个结果取后面的2个结果

//DML操作之查操作select
//语法:SELECT column1,column2,... FROM table_name [WHERE clause] [ORDER BY 'column_name' [DESC]] [LIMIT [m,]n];

mysql> use Gin_A;
Database changed

//查看内容
mysql> select * from Gin_A;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | tom   |   20 |
|  2 | jerry |   23 |
|  3 | Gin   |   20 |
|  4 | Kin   |   26 |
+----+-------+------+
4 rows in set (0.00 sec)

//查看字段
mysql> select name from Gin_A;
+-------+
| name  |
+-------+
| tom   |
| jerry |
| Gin   |
| Kin   |
+-------+
4 rows in set (0.00 sec)

//按照字段升序
mysql> select * from Gin_A order by age;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | tom   |   20 |
|  3 | Gin   |   20 |
|  2 | jerry |   23 |
|  4 | Kin   |   26 |
+----+-------+------+
4 rows in set (0.00 sec)

//按照字段降序
mysql> select * from Gin_A order by age desc;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  4 | Kin   |   26 |
|  2 | jerry |   23 |
|  1 | tom   |   20 |
|  3 | Gin   |   20 |
+----+-------+------+
4 rows in set (0.00 sec)

//查找升序的前两位
mysql> select * from Gin_A order by age limit 2;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | tom  |   20 |
|  3 | Gin  |   20 |
+----+------+------+
2 rows in set (0.00 sec)

//查找升序不显示第一位显示后两位
mysql> select * from Gin_A order by age limit 1,2;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  3 | Gin   |   20 |
|  2 | jerry |   23 |
+----+-------+------+
2 rows in set (0.00 sec)

//查找年龄大于或者等于23的数据
mysql> select * from Gin_A where age >= 23;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  2 | jerry |   23 |
|  4 | Kin   |   26 |
+----+-------+------+
2 rows in set (0.00 sec)

//查找年龄大于或者等于23且名称位Kin的数据
mysql> select * from Gin_A where age >= 23 and name = 'Kin';
+----+------+------+
| id | name | age  |
+----+------+------+
|  4 | Kin  |   26 |
+----+------+------+
1 row in set (0.00 sec)

//查找年龄在23到26之间的数据
mysql> select * from Gin_A where age between 23 and 26;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  2 | jerry |   23 |
|  4 | Kin   |   26 |
+----+-------+------+
2 rows in set (0.00 sec)

//查找年龄不为空的数据
mysql> select * from Gin_A where age is not null;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | tom   |   20 |
|  2 | jerry |   23 |
|  3 | Gin   |   20 |
|  4 | Kin   |   26 |
+----+-------+------+
4 rows in set (0.00 sec)

//查找年龄字段是空的数据
mysql> select * from wangqing where age is null;
+----+------+------+
| id | name | age  |
+----+------+------+
|  7 | lisi | NULL |
+----+------+------+
1 row in set (0.00 sec)

 4.2.3 update语句

//DML操作之改操作update
//语法:UPDATE table_name SET column1 = new_value1[,column2 = new_value2,...] [WHERE clause] [ORDER BY 'column_name' [DESC]] [LIMIT [m,]n];

mysql> select * from Gin_A;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | tom   |   20 |
|  2 | jerry |   23 |
|  3 | Gin   |   20 |
|  4 | Kin   |   26 |
+----+-------+------+
4 rows in set (0.00 sec)

//修改表中的tom数据
mysql> update Gin_A set age = 30 where name = 'tom';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from Gin_A;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | tom   |   30 |
|  2 | jerry |   23 |
|  3 | Gin   |   20 |
|  4 | Kin   |   26 |
+----+-------+------+
4 rows in set (0.00 sec)

 4.2.4 delete语句

//DML操作之删操作delete
//语法:DELETE FROM table_name [WHERE clause] [ORDER BY 'column_name' [DESC]] [LIMIT [m,]n];

mysql> select * from Gin_A;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | tom   |   30 |
|  2 | jerry |   23 |
|  3 | Gin   |   20 |
|  4 | Kin   |   26 |
+----+-------+------+
4 rows in set (0.00 sec)

//删除表的数据
mysql> delete from Gin_A where id = 4;
Query OK, 1 row affected (0.00 sec)

mysql> select * from Gin_A;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | tom   |   30 |
|  2 | jerry |   23 |
|  3 | Gin   |   20 |
+----+-------+------+
3 rows in set (0.00 sec)

//删除整张表的内容
mysql> delete from Gin_A;
Query OK, 3 rows affected (0.01 sec)

mysql> select * from Gin_A;
Empty set (0.00 sec)

mysql> desc Gin_A;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(11)      | NO   |     | NULL    |       |
| name  | varchar(100) | NO   |     | NULL    |       |
| age   | tinyint(4)   | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

4.2.5 truncate语句

truncate与delete的区别:

语句类型

特点

delete

DELETE删除表内容时仅删除内容,但会保留表结构
DELETE语句每次删除一行,并在事务日志中为所删除的每行记录一项
可以通过回滚事务日志恢复数据
非常占用空间

truncate

删除表中所有数据,且无法恢复
表结构、约束和索引等保持不变,新添加的行计数值重置为初始值
执行速度比DELETE快,且使用的系统和事务日志资源少
通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放
对于有外键约束引用的表,不能使用TRUNCATE TABLE删除数据
不能用于加入了索引视图的表

//语法:TRUNCATE table_name;

mysql> select * from Gin_A;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | tom   |   20 |
|  2 | jeery |   20 |
|  3 | kin   |   23 |
|  4 | pin   |   24 |
|  5 | gin   |   25 |
|  6 | zz    |   26 |
|  7 | li    | NULL |
+----+-------+------+
7 rows in set (0.00 sec)

mysql> truncate Gin_A;
Query OK, 0 rows affected (0.02 sec)

mysql> select * from Gin_A;
Empty set (0.00 sec)

mysql> desc Gin_A;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(11)      | NO   |     | NULL    |       |
| name  | varchar(100) | NO   |     | NULL    |       |
| age   | tinyint(4)   | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

4.3 DCL操作

4.3.1 创建授权grant

权限类型(priv_type)

权限类型

代表什么?

ALL

所有权限

SELECT

读取内容的权限

INSERT

插入内容的权限

UPDATE

更新内容的权限

DELETE

删除内容的权限

指定要操作的对象db_name.table_name

表示方式

意义

*.*

所有库的所有表

db_name

指定库的所有表

db_name.table_name

指定库的指定表

WITH GRANT OPTION:被授权的用户可将自己的权限副本转赠给其他用户,说白点就是将自己的权限完全复制给另一个用户。不建议使用。

GRANT priv_type,... ON [object_type] db_name.table_name TO ‘username'@'host' [IDENTIFIED BY 'password'] [WITH GRANT OPTION];

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Gin_A              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

//授权kin用户在数据库本机上登录访问所有数据库
mysql> grant all on *.* to 'kin'@'localhost' identified by '132456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> grant all on *.* to 'kin'@'127.0.0.1' identified by '132456';
Query OK, 0 rows affected, 1 warning (0.01 sec)

//授权kin用户在172.16.12.129上远程登录访问Gin_A数据库
mysql> grant all on Gin_A.* to 'kin'@'192.168.22.109' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

//授权kin用户在所有位置上远程登录访问Gin_A数据库
mysql> grant all on *.* to 'kin'@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

 4.3.2 查看授权

//查看当前登录用户的授权信息
mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)

//查看指定用户wangqing的授权信息
mysql> show grants for kin;
+------------------------------------------+
| Grants for kin@%                         |
+------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'kin'@'%' |
+------------------------------------------+
1 row in set (0.00 sec)

mysql> show grants for 'kin'@'localhost';
+--------------------------------------------------+
| Grants for kin@localhost                         |
+--------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'kin'@'localhost' |
+--------------------------------------------------+
1 row in set (0.00 sec)

mysql> show grants for 'kin'@'127.0.0.1';
+--------------------------------------------------+
| Grants for kin@127.0.0.1                         |
+--------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'kin'@'127.0.0.1' |
+--------------------------------------------------+
1 row in set (0.00 sec)

mysql> show grants for 'kin'@'192.168.22.109';
+-------------------------------------------------------------+
| Grants for kin@192.168.22.109                               |
+-------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'kin'@'192.168.22.109'                |
| GRANT ALL PRIVILEGES ON `Gin_A`.* TO 'kin'@'192.168.22.109' |
+-------------------------------------------------------------+
2 rows in set (0.00 sec)

 4.3.3 使用远程连接工具登录

 4.3.4 取消授权REVOKE

//语法:REVOKE priv_type,... ON db_name.table_name FROM 'username'@'host';

mysql> revoke all on *.* from 'kin'@'192.168.22.109';
Query OK, 0 rows affected (0.00 sec)

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

注意:mysql服务进程启动时会读取mysql库中的所有授权表至内存中:

  • GRANT或REVOKE等执行权限操作会保存于表中,mysql的服务进程会自动重读授权表,并更新至内存中
  • 对于不能够或不能及时重读授权表的命令,可手动让mysql的服务进程重读授权表
mysql> FLUSH PRIVILEGES;

实战案例


1.搭建mysql服务

//配置mysql的yum源
[root@Gin ~]# wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
[root@Gin ~]# rpm -Uvh  mysql57-community-release-el7-11.noarch.rpm
[root@Gin ~]# yum module disable mysql
//安装mysql5.7版本的因为开源免费
[root@Gin ~]# dnf -y install mysql-community-server mysql-community-client  mysql-community-common mysql-community-devel  --nogpgcheck

#启动mysql并设置开机自动启动
[root@Gin src]# systemctl enable --now mysqld

#启动mysql并设置开机自动启动
[root@Gin ~]# ss -anltup | grep mysql
tcp   LISTEN 0      80                 *:3306             *:*    users:(("mysqld",pid=1778,fd=29))                                                                          


#使用获取到的临时密码登录mysql
[root@Gin src]# grep "password" /var/log/mysqld.log
2022-07-25T02:05:53.996584Z 1 [Note] A temporary password is generated for root@localhost: As5sjtwGgF=L #临时密码
2022-07-25T02:05:33.375577Z 2 [Note] Access denied for user 'root'@'localhost' (using password: YES)
[root@Gin src]# 
                                                                                                           
#使用获取到的临时密码登录mysql
[root@Gin src]# 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.38

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

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登录密码
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
#设置全局validate\u password\u策略=0;
                                                                                                           
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)
#设置全局validate\u password\u length=1;
                                                                                                           
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'long123!';
Query OK, 0 rows affected (0.00 sec)

mysql> 


//为避免mysql自动升级,这里需要卸载最开始安装的yum源
[root@Gin src]# rpm -e mysql57-community-release  

 2.创建一个以你名字为名的数据库,并创建一张表student,该表包含三个字段(id,name,age),表结构如下:

mysql> desc student;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(100) | NO   |     | NULL    |                |
| age   | tinyint(4)   | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
#创建数据库
mysql> create database lf;
Query OK, 1 row affected (0.00 sec)

//查看当前实例有哪些数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| lf                 |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
mysql> 
mysql> show tables;
+--------------------+
| Tables_in_lf       |
+--------------------+
| lingbo             |
+--------------------+
1 row in set (0.00 sec)

mysql> create table student(id int(11) primary key auto_increment,name varchar(100) not null,age tinyint(4));
Query OK, 0 rows affected (0.00 sec)

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

 3.查看下该新建的表有无内容(用select语句)

#select语句查看
mysql> select * from student;
Empty set (0.00 sec)

mysql> 

 4.往新建的student表中插入数据(用insert语句),结果应如下所示:

+----+-------------+------+
| id | name        | age  |
+----+-------------+------+
|  1 | tom         |   20 |
|  2 | jerry       |   23 |
|  3 | wangqing    |   25 |
|  4 | sean        |   28 |
|  5 | zhangshan   |   26 |
|  6 | zhangshan   |   20 |
|  7 | lisi        | NULL |
|  8 | chenshuo    |   10 |
|  9 | wangwu      |    3 |
| 10 | qiuyi       |   15 |
| 11 | qiuxiaotian |   20 |
+----+-------------+------+
mysql> insert into student (name,age) values('tom',20),('jerry',23),('wangqing',25),('sean',28),('zhangshan',26),('zhangsan',20),('lisi',null),('chenshuo',10),('wangwu',3),('qiuyi',15),('qiuxiaotian',20);
Query OK, 11 rows affected (0.01 sec)
Records: 11  Duplicates: 0  Warnings: 0

#插入成功
mysql> select * from student;
+----+-------------+------+
| id | name        | age  |
+----+-------------+------+
|  1 | tom         |   20 |
|  2 | jerry       |   23 |
|  3 | wangqing    |   25 |
|  4 | sean        |   28 |
|  5 | zhangshan   |   26 |
|  6 | zhangsan    |   20 |
|  7 | lisi        | NULL |
|  8 | chenshuo    |   10 |
|  9 | wangwu      |    3 |
| 10 | qiuyi       |   15 |
| 11 | qiuxiaotian |   20 |
+----+-------------+------+
11 rows in set (0.00 sec)
mysql> 

 5.修改lisi的年龄为50

mysql> update student set age = 50 where name = 'lisi';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from student where name = 'lisi';
+----+------+------+
| id | name | age  |
+----+------+------+
|  7 | lisi |   50 |
+----+------+------+
1 row in set (0.00 sec)

mysql> 

 6.以age字段降序排序

mysql> select * from student order by age desc;
+----+-------------+------+
| id | name        | age  |
+----+-------------+------+
|  7 | lisi        |   50 |
|  4 | sean        |   28 |
|  5 | zhangshan   |   26 |
|  3 | wangqing    |   25 |
|  2 | jerry       |   23 |
|  1 | tom         |   20 |
|  6 | zhangsan    |   20 |
| 11 | qiuxiaotian |   20 |
| 10 | qiuyi       |   15 |
|  8 | chenshuo    |   10 |
|  9 | wangwu      |    3 |
+----+-------------+------+
11 rows in set (0.00 sec)
mysql> 

7.查询student表中年龄最小的3位同学跳过前2位

mysql> select * from student order by age limit 2,3;
+----+-------------+------+
| id | name        | age  |
+----+-------------+------+
| 10 | qiuyi       |   15 |
|  1 | tom         |   20 |
| 11 | qiuxiaotian |   20 |
+----+-------------+------+
3 rows in set (0.00 sec)
mysql> 

8.查询student表中年龄最大的4位同学

mysql> select * from student order by age desc limit 4;
+----+-----------+------+
| id | name      | age  |
+----+-----------+------+
|  7 | lisi      |   50 |
|  4 | sean      |   28 |
|  5 | zhangshan |   26 |
|  3 | wangqing  |   25 |
+----+-----------+------+
4 rows in set (0.01 sec)
mysql> 


9.查询student表中名字叫zhangshan的记录

mysql> select * from student where name = 'zhangshan';
+----+-----------+------+
| id | name      | age  |
+----+-----------+------+
|  5 | zhangshan |   26 |
+----+-----------+------+
1 row in set (0.00 sec)
mysql> 

10.查询student表中名字叫zhangshan且年龄大于20岁的记录

mysql> select * from student where name = 'zhangshan' and age > 20;
+----+-----------+------+
| id | name      | age  |
+----+-----------+------+
|  5 | zhangshan |   26 |
+----+-----------+------+
1 row in set (0.01 sec)
mysql> 

11.查询student表中年龄在23到30之间的记录

#第一种查询方法
mysql> select * from student where age between 23 and 30;
+----+-----------+------+
| id | name      | age  |
+----+-----------+------+
|  2 | jerry     |   23 |
|  3 | wangqing  |   25 |
|  4 | sean      |   28 |
|  5 | zhangshan |   26 |
+----+-----------+------+
4 rows in set (0.00 sec)

#第二种查询方法
mysql> select * from student where age >=23 and age <= 30;
+----+-----------+------+
| id | name      | age  |
+----+-----------+------+
|  2 | jerry     |   23 |
|  3 | wangqing  |   25 |
|  4 | sean      |   28 |
|  5 | zhangshan |   26 |
+----+-----------+------+
4 rows in set (0.00 sec)
mysql> 

12.修改wangwu的年龄为100

mysql> update student set age = 100 where name = 'wangwu';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from student where name = 'wangwu';
+----+--------+------+
| id | name   | age  |
+----+--------+------+
|  9 | wangwu |  100 |
+----+--------+------+
1 row in set (0.00 sec)
mysql> 

13.删除student中名字叫zhangshan且年龄小于等于20的记录

mysql> delete from student where name = 'zhangshan' and age >= 20;
Query OK, 1 row affected (0.00 sec)
#查看表观察是否删除成功
mysql> select * from student;
+----+-------------+------+
| id | name        | age  |
+----+-------------+------+
|  1 | tom         |   20 |
|  2 | jerry       |   23 |
|  3 | wangqing    |   25 |
|  4 | sean        |   28 |
|  6 | zhangsan    |   20 |
|  7 | lisi        |   50 |
|  8 | chenshuo    |   10 |
|  9 | wangwu      |  100 |
| 10 | qiuyi       |   15 |
| 11 | qiuxiaotian |   20 |
+----+-------------+------+
10 rows in set (0.00 sec)
mysql> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值