Linux学习-MySQL之SQL语句

Posted 丢爸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习-MySQL之SQL语句相关的知识,希望对你有一定的参考价值。

SQL(Structure Query Language)结构化查询语言

DML(Data Mailpulate Language)数据操作语言
1. INSERT
2. DELETE
3. SELECT
4. UPDATE
DDL(Data Define Language)数据定义语言
1. CREATE
2. DROP
3. ALTER
DCL(Data Control Language)数据控制语言
1. GRANT
2. REVOKE

RDB(Relational Database)对象
库,表,索引,视图,用户,存储过程,存储函数,触发器,事件调度器
约束(Constraint)
域约束:数据类型约束
外键约束:引用完整性约束
主键约束:某字段能唯一标识此字段所属的实体,并且不允许为空,一张表只能有一个主键
唯一键约束:每一行中的某字段不允许出现相同值,可以为空,唯一键可以有多个
检查性约束

关系型数据
表示层:表
逻辑层:存储引擎
物理层:文件

数据存储和查询
存储管理器
权限及完整性管理器
事务管理器
文件管理器
缓冲区管理器:
查询管理器
DML解释器
DDL解释器
查询执行引擎
关系运算
投影(只输出指定属性)
选择(只输出符合条件行)
自然连接(具有相同名字的所有属性上取值相同的行)
笛卡尔积:(a+b)*(c+d)=ac+ad+bc+bd
并:集合运算
mysql插件式存储引擎
5.5.8以前默认:MyIASM
5.5.8以后默认:InnoDB
MySQL组件
连接管理器:用于接收和管理用户请求,如发现用户以前做过查询则通过缓存直接返回用户,如无缓存结果,则将用户请求转交至解析器
连接管理器:用于侦听来自客户端的请求,将请求派发至线程管理器
线程管理器:跟踪用户请求,确保每个用户请求
用户模块:用于验证用户身份
命令分发模块:判断命令是否是交由缓存模块处理,还是交由解析器处理
缓存模块
日志模块:用于完成用户
解析器:解析查询,并生成解析树
优化器:负责响应最佳执行策略,SELECT
表定义模块:表创建、删除、重命名、移除、更新和插入之类的操作,UPDATE,INSERT
表维护模块:检查,修改,备份,恢复,优化(碎片整理)及解析
状态报告模块
复制模块
访问控制模块:用于验证用户是否真正有权限来执行请求的操作
表管理器:负责创建、读取或修改表定义文件,维护表描述符高速缓存,管理表锁【表结构和表数据是独立存取的】
存储引擎:真正与磁盘上数据打交道
MySQL特性

  1. speed,高性能(完全多线程,查询缓存)
  2. Reliability(稳定性)
  3. Scalability(可伸缩性)
  4. Ease of use(易用)
  5. Portability and Standards Compliance
  6. Multiuser Support(多用户支持)
  7. Internationalization(国际化)
  8. Wide Application Support(C,C++,Java,Python,php,Ruby等,JDBC,.Net)
  9. Open Source(开源)

MySQL用户密码修改
1. mysqladmin -uUSERNAME -h HOSTNAME password ‘NEW_PASS’ -p 旧密码
2. mysql>SET PASSWORD FOR ‘USERNAME’@‘HOST’=PASSWORD(‘new_pass’)
3. mysql>UPDATE mysql.user SET PASSWORD=PASSWORD(‘new_pass’) where condition;需要通过flush privileges重读授权表

MySQL客户端的访问服务器方式

  • 不在同一主机上,mysql客户端访问服务器基于TCP/IP,
  • 在同一台主机,UNIX主机则基于sock(套接字),Windows主机基于memory(pipe)
    MySQL客户端工具
    mysql
    mysqldump
    mysqladmin
    mysqlcheck
    mysqlimport
    MySQL非客户端工具
    myisamchk
    myisampack
    删除匿名用户
mysql> drop user ''@'localhost';

MyISAM:无事务,表锁
.frm 表结构
.MYD 表数据
.MYI 表索引

InnoDB:支持事务,行级锁
所有表共享一个表空间文件
建立每个表独立的表空间文件【innodb_file_per_table=1】
.frm 表结构
.ibd:表空间(表数据和表索引)

mysql>
交互式模式
批处理模式(脚本模式)
mysql < init.sql 使用输入重定向
mysql>
命令:
服务器语句,有语句结束符,默认结束符为【;】
\\d(delimeter)设置服务器语句结束符
客户端命令:
\\c:清除当前输入
\\g:无论语句结束符是什么,直接将此语句送至服务器执行
\\G:无论语句结束符是什么,直接将此语句送至服务器执行,结果以纵向显示(竖排方式显示)
! COMMAND 执行shell命令
\\w:语句执行结束后显示警告信息;
#:对新建的对象,支持补全功能

服务器命令获取帮助
help COMMAND

#以html格式显示信息
[root@mail ~]# mysql -uroot -p --html
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \\g.
Your MySQL connection id is 2
Server version: 5.6.10 MySQL Community Server (GPL)

Copyright (c) 2000, 2013, 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> show databases;
<TABLE BORDER=1><TR><TH>Database</TH></TR><TR><TD>information_schema</TD></TR><TR><TD>extmail</TD></TR><TR><TD>filemanager</TD></TR><TR><TD>mydb</TD></TR><TR><TD>mysql</TD></TR><TR><TD>performance_schema</TD></TR><TR><TD>test</TD></TR><TR><TD>vsftpd</TD></TR></TABLE>8 rows in set (0.00 sec)
#设定默认的库
mysql> use mydb;
Database changed
#查看当前默认的库
mysql> select database();
+------------+
| database() |
+------------+
| mydb       |
+------------+
1 row in set (0.00 sec)

#mysqladmin创建数据库
[root@mail mydb]# mysqladmin -uroot -p create hellodb
Enter password: 
[root@mail mydb]# 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| extmail            |
| filemanager        |
| hellodb            |
| mydb               |
| mysql              |
| performance_schema |
| test               |
| vsftpd             |
+--------------------+
9 rows in set (0.00 sec)
#删除数据库
[root@mail mydb]# mysqladmin -uroot -p drop hellodb
Enter password: 
Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.

Do you really want to drop the 'hellodb' database [y/N] y
Database "hellodb" dropped
#ping一下数据库是否可用
[root@mail mydb]# mysqladmin -uroot -p ping
Enter password: 
mysqld is alive
#进程列表
[root@mail mydb]# mysqladmin -uroot -p processlist
Enter password: 
+----+------+-----------+----+---------+------+-------+------------------+
| Id | User | Host      | db | Command | Time | State | Info             |
+----+------+-----------+----+---------+------+-------+------------------+
| 5  | root | localhost |    | Sleep   | 115  |       |                  |
| 8  | root | localhost |    | Query   | 0    | init  | show processlist |
+----+------+-----------+----+---------+------+-------+------------------+
#status:显示mysql状态
[root@mail mydb]# mysqladmin -uroot -p status
Enter password: 
Uptime: 4994  Threads: 2  Questions: 81  Slow queries: 0  Opens: 90  Flush tables: 1  Open tables: 81  Queries per second avg: 0.016
#--sleep N 等待N秒查询一次
[root@mail mydb]# mysqladmin -uroot -p status --sleep 2
Enter password: 
Uptime: 5136  Threads: 2  Questions: 83  Slow queries: 0  Opens: 90  Flush tables: 1  Open tables: 81  Queries per second avg: 0.016
Uptime: 5138  Threads: 2  Questions: 84  Slow queries: 0  Opens: 90  Flush tables: 1  Open tables: 81  Queries per second avg: 0.016
Uptime: 5140  Threads: 2  Questions: 85  Slow queries: 0  Opens: 90  Flush tables: 1  Open tables: 81  Queries per second avg: 0.016
#--countN 显示N次
[root@mail mydb]# mysqladmin -uroot -p status --sleep 2 --count 2
Enter password: 
Uptime: 5182  Threads: 2  Questions: 87  Slow queries: 0  Opens: 90  Flush tables: 1  Open tables: 81  Queries per second avg: 0.016
Uptime: 5184  Threads: 2  Questions: 88  Slow queries: 0  Opens: 90  Flush tables: 1  Open tables: 81  Queries per second avg: 0.016
#extended-status显示状态变量
[root@mail mydb]# mysqladmin -uroot -p extended-status;
#variables:显示服务器变量
[root@mail mydb]# mysqladmin -uroot -p variables;
#flush-privileges[reload]重读授权表
#flush-tables关闭所有打开表
#flush-threads重置所有线程
#flush-status重置大多数的服务器状态变量
#flush-logs做二进制日志和中继日志滚动
#flush-hosts清除主机的内部信息(缓存信息,由于过多连接的错误信息)
#kill
#refresh:相当于同时执行flush-hosts和flush-logs
#shutdown:停止mysql服务器进程
#version:服务器版本号及相关状态信息
#start-slave:启动复制,启动从服务器复制线程
	SQL thread
	IO thread
#stop-slave:关闭复制,
#显示引擎信息
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| 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)

#show table status 显示表的状态信息
mysql> show table status like 'test1'\\G;
*************************** 1. row ***************************
           Name: test1
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2021-06-20 19:55:29
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.00 sec)

在mysql的data目录中有错误日志文件:hostname.err
一般MySQL报错可以从以下几种情况进行分析
1.此前服务未关闭
2.数据初使化失败
3.数据目录位置错误
4.数据目录权限问题

以上是关于Linux学习-MySQL之SQL语句的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习-MySQL之SQL语句

Linux学习-MySQL之用户管理

Mybatis 学习笔记总结

Linux学习-SQL之SQL语句

Linux命令:MySQL系列之三--mysql数据类型及SQL结构化查询语句使用

python学习44——数据库之MySQL安装与sql语句基础