MYSQL---初识

相关概念说明

  • 数据库(Database):按照数据结构来组织、存储和管理数据的仓库,它以一定的组织形式存于存储介质上。数据库本身不真正存储数据,真正的数据是放在数据库中的表(table)中的。
  • 数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。我们熟悉的mysql、mariaDB、oracle、DB2属于DBMS
  • 数据库管理员(Database administrator):负责数据库的规划、设计、协调、维护和管理等工作的

数据库存储方式:

1.网状数据库

2.层次型数据库:存在数据冗余的现象

3.关系性数据库 :目前主流 mysql、Oracle

关系性数据库

关系 :关系就是二维表。并满足如下性质:(表中的行、列次序并不重要)

  • 行row:表中的每一行,又称为一条记录
  • 列column:表中的每一列,称为属性,字段
  • 主键(Primary key):用于惟一确定一个记录的字段 ###是一种属性,在表格中,关联到某个字段上,这样这个字段就不能有重复数据,用于唯一数据
  • 域domain:属性的取值范围,如,性别只能是‘男’和‘女’两个值 ###在表格中,限制某一字段的取值范围

主流RDBMS(relational DBMS)

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

数据库热度排名

MYSQL的特性

1.插件式存储引擎:也称为“表类型”,存储管理器有多种实现版本,功能和特性可能均略有差别;用户可根据需要灵活选择,Mysql5.5.5开始innoDB引擎是MYSQL默认引擎 ###存储引擎怎么把数据存放在磁盘上,在磁盘上保存数据格式

  • MyISAM ==> Aria
  • InnoDB ==> XtraDB

2.单进程,多线程

3.诸多扩展和新特性

4.提供了较多测试组件

5.开源

RPM包安装MySQL
CentOS 7:安装光盘直接提供 ###光盘默认提供的数据库包默认的是mariadb;mariabd和mysql创始人是同一个人,用法基本相同,后续相关文章都是以Centos7中的mariadb示例

  • mariadb-server 服务器包
  • mariadb 客户端工具包

CentOS 6 ###光盘默认提供的数据库包时mysql
提高mysql安全性
运行mysql_secure_installation ###安装时自带脚本,已经放在/usr/bin/下

  • 设置数据库管理员root口令
  • 禁止root远程登录
  • 删除anonymous用户帐号
  • 删除test数据库
[root@centos7 ~]#yum -y install mariadb-server
Installed:
  mariadb-server.x86_64 1:5.5.56-2.el7                                                                                   


Dependency Installed:
  mariadb.x86_64 1:5.5.56-2.el7             ####由于依赖性,会自动的把客户端的工具给装上          
  perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7         
  perl-DBD-MySQL.x86_64 0:4.023-6.el7                        
 
Complete!
[root@centos7 ~]#systemctl start mariadb.service   ###启动服务
[root@centos7 ~]#ss -ntl   ###其监听的端口是tcp的3306
State       Recv-Q Send-Q               Local Address:Port                              Peer Address:Port              
LISTEN      0      128                              *:41192                                        *:*                  
LISTEN      0      50                               *:3306                                         *:*                  
LISTEN      0      128                              *:111                                          *:*                  
LISTEN      0      5                    192.168.122.1:53                                           *:*                  
LISTEN      0      128                              *:22                                           *:*                  
LISTEN      0      128                      127.0.0.1:631                                          *:*                  
[root@centos7 ~]#mysql
MariaDB [(none)]> help  ###查看帮助,获取的客户端命令的帮助


General information about MariaDB can be found at
http://mariadb.org


List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
?         (\?) Synonym for `help'.
clear     (\c) Clear the current input statement.
connect   (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
edit      (\e) Edit command with $EDITOR.
ent.

客户端程序

  • mysql: 交互式的CLI工具 ###上述演示的是客户端的用户,不过是本机的客户端连接的是本地的服务器
  • mysqldump:备份工具,基于mysql协议向mysqld发起查询请求,并将查得的所有数据转换成insert等写操作语句保存文本文件中
  • mysqladmin:基于mysql协议管理mysqld
  • mysqlimport:数据导入工具

MyISAM存储引擎的管理工具

  • myisamchk:检查MyISAM库
  • myisampack:打包MyISAM表,只读

服务器端程序

  • mysqld_safe
  • mysqld
  • mysqld_multi:多实例 ,示例: mysqld_multi –example ###多实例就是在一个服务器上安装多个相同应用;mysql默认不可以多实例,要使用多实例,就必须改配置该默认的端口号,否则冲突

用户账号
mysql用户账号由两部分组成:’USERNAME’@’HOST‘ ###限定了用户名和主机,必须同时符合要求才可以连接服务器端

说明:HOST限制此用户可通过哪些远程主机连接mysql服务器支持使用通配符: ###可以限制默认网段的主机可以连接

  • % 匹配任意长度的任意字符
  • 172.16.0.0/255.255.0.0 或 172.16.%.%
  • _ 匹配任意单个字符

Mysql 客户端

mysql使用模式(客户端工具):
1.交互式模式
可运行命令有两类:服务器端命令 和 客户端命令客户端命令:###通过help可以查询,命令比较少

  • \h, help
  • \u, use
  • \s, status
  • \!, system

服务器端命令:###这部分命令相对较多注意必须以;结束SQL, 需要语句结束符;

2.脚本模式

  • mysql –uUSERNAME -pPASSWORD < /path/somefile.sql ###mysql等待标准输入,可以使用重定向的方式来输入命令
  • MariaDB [(none)]> source /path/from/somefile.sql ###可以先连上mysql,通过source 执行命令文件也可以;有点像shell脚本的执行方式source和\.等价

mysql命令可用选项:

  • -A, –no-auto-rehash 禁止补全
  • -u, –user= 用户名,默认为root
  • -h, –host= 服务器主机,默认为localhost
  • -p, –passowrd= 用户密码,建议使用-p,默认为空密码
  • -P, –port= 服务器端口
  • -S, –socket= 指定连接socket文件路径
  • -D, –database= 指定默认数据库
  • -C, –compress 启用压缩
  • -e “SQL“ 执行SQL命令 ###可以非交互
  • -V, –version 显示版本
  • -v –verbose 显示详细信息
  • –print-defaults 获取程序默认使用的配置
[root@centos7 ~]#mysql -u root -pcentos -e "show databases"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+

修改mysql提示符:
1.[root@centos7 ~]# mysql –prompt=”(\u@\h) [\d]> ”
2.[root@centos7 ~]#vim /etc/profile.d/mysql.sh
export MYSQL_PS1=”(\u@\h) [\d]> “
3.[root@centos7 ~]#vim /etc/my.cnf.d/mysql-clients.cnf
[mysql]
prompt=(\\u@\\h) [\\d]>\\_
[root@centos7 ~]#man mysql ###搜索prompt
socket地址
服务器监听的两种socket地址:

  • ip socket: 监听在tcp的3306端口,支持远程通信 ###网络走的是端口号3306
  • unix sock: 监听在sock文件上, 仅支持本机通信 ###本机之间客户端和服务端是通过sock通信的/var/lib/mysql/mysql.sock:mysqld—socket—mysql

说明: host为localhost,127.0.0.1时自动使用unix sock

执行命令
运行mysql命令:默认空密码登录

  • mysql>use mysql
  • mysql>select user();查看当前用户
  • mysql>SELECT User,Host,Password FROM user;

登录系统: mysql –uroot –p
客户端命令:本地执行

  • mysql> help ###每个命令都完整形式和简写格式
  • mysql> status 或 \s

服务端命令:通过mysql协议发往服务器执行并取回结果

  • 每个命令都必须命令结束符号;默认为分号
  • SELECT VERSION();

mysql命令历史:~/.mysql_history

服务器端配置
服务器端(mysqld):工作特性有多种配置方式
1、命令行选项:
2、配置文件: 类ini格式
集中式的配置,能够为mysql的各应用程序提供配置信息

  • [mysqld]
  • [mysqld_safe]
  • [mysqld_multi]
  • [mysql]
  • [mysqldump]
  • [server]
  • [client]

格式: parameter = value
说明: _和- 相同; ON, TRUE意义相同; 0, OFF, FALSE意义相同

配置文件:
后面覆盖前面的配置文件,顺序如下:

  • /etc/my.cnf Global选项
  • /etc/mysql/my.cnf Global选项
  • SYSCONFDIR/my.cnf Global选项 ###源码配置的家目录
  • $MYSQL_HOME/my.cnf Server-specific 选项
  • –defaults-extra-file=path ###命令指定的配置文件
  • ~/.my.cnf User-specific 选项
vim /etc/my.cnf
            [mysqld]
            skip-networking=1   ###维护使用,只能本机使用,网络连接不了
注:关闭网络连接,只侦听本地客户端, 所有和服务器的交互都通过一个socket实现, socket的配置存放在/var/lib/mysql/mysql.sock) 可在/etc/my.cnf修改
[root@centos7s ~]#ps aux|grep mysql
mysql      3185  0.1  5.3 1766432 82488 ?       Ssl  16:13   0:00 /usr/sbin/mysqld  ###mysql是mysql用户运行的
root       3258  0.0  0.0 112704   972 pts/0    R+   16:17   0:00 grep --color=auto mysql
[root@centos7s ~]#pstree -p | grep mysql  ###单进程多线程的方式
           |-mysqld(3185)-+-{mysqld}(3187)
           |              |-{mysqld}(3188)
           |              |-{mysqld}(3189)
           |              |-{mysqld}(3190)
           |              |-{mysqld}(3191)
           |              |-{mysqld}(3192)
 
[root@centos7 ~]#  cat /etc/my.cnf   ###服务器端的配置文件
[mysqld]   ###带d是服务端  不带d的是客户端
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd


[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid


#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

关系型数据库的常见组件

  • 数据库: database
  • 表: table(行: row 列: column)
  • 索引: index
  • 视图: view
  • 用户: user
  • 权限: privilege
  • 存储过程: procedure,无返回值
  • 存储函数: function,有返回值
  • 触发器: trigger
  • 事件调度器: event scheduler,任务计划

SQL语言规范

  • 在数据库系统中, SQL语句不区分大小写(建议用大写)
  • SQL语句可单行或多行书写,以“;” 结尾
  • 关键词不能跨多行或简写
  • 用空格和缩进来提高语句的可读性
  • 子句通常位于独立行,便于编辑,提高可读性

注释
SQL标准:

  • /*注释内容*/ 多行注释
  • — 注释内容 单行注释,注意有空格

MySQL注释:

  • #

数据库的组件(对象):

  • 数据库、表、索引、视图、用户、存储过程、函数、触发器、事件调度器等

命名规则:

  • 必须以字母开头
  • 可包括数字和三个特殊字符(# _ $)
  • 不要使用MySQL的保留字 如select
  • 同一database(Schema)下的对象不能同名

SQL语句分类###对应的服务器端命令
DDL: Data Defination Language 数据定义语言

  • CREATE, DROP, ALTER

DML: Data Manipulation Language 数据操纵语言

  • INSERT, DELETE, UPDATE

DCL: Data Control Language 数据控制语言

  • GRANT, REVOKE, COMMIT, ROLLBACK

DQL: Data Query Language 数据查询语言

  • SELECT

数据库操作

创建数据库:

  • CREATE DATABASE|SCHEMA [IF NOT EXISTS] ‘DB_NAME’;
  • CHARACTER SET ‘character set name’
  • COLLATE ‘collate name’

删除数据库

  • DROP DATABASE|SCHEMA [IF EXISTS] ‘DB_NAME’;

查看支持所有字符集: SHOW CHARACTER SET;
查看支持所有排序规则: SHOW COLLATION;
获取命令使用帮助:mysql> HELP KEYWORD;
查看数据库列表:mysql> SHOW DATABASES; ###一般一个项目对应一个数据库

创建数据库示例:

注:创建数据库就自动创建了文件夹;数据库本身是不存放任何数据的,只是一个容器,真正存放数据的是表

MariaDB [(none)]> help create database
Name: 'CREATE DATABASE'
Description:
Syntax:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name    ###[IF NOT EXISTS]可选项,用来判断此数据库是否存在,若不存在才创建,防止报错
    [create_specification] ...


create_specification:
    [DEFAULT] CHARACTER SET [=] charset_name   ###创建字符集 如utf-8,适合中文,其他的编码可能导致数据库乱码
  | [DEFAULT] COLLATE [=] collation_name   ###定义排序规则;字母顺序,大小写是否敏感,ASCII等等;字符集会有自己的排序规则,所以这一项不建议更改,默认就好


CREATE DATABASE creates a database with the given name. To use this
statement, you need the CREATE privilege for the database. CREATE
SCHEMA is a synonym for CREATE DATABASE.


URL: http://dev.mysql.com/doc/refman/5.5/en/create-database.html
MariaDB [(none)]> 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 |      ###默认创建的就是latin编码;所以创建数据库时一定要修改字符集模式
| 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 |    ###加强版 utf8还支持表情包,兼容性更好
| cp1251   | Windows Cyrillic            | cp1251_general_ci   |      1 |
| utf16    | UTF-16 Unicode              | utf16_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 |
+----------+-----------------------------+---------------------+--------+
39 rows in set (0.00 sec)


MariaDB [(none)]> create database wu CHARACTER SET utf8mb4;     ###指定字符集来创建database;
Query OK, 1 row affected (0.00 sec)


MariaDB [(none)]> show create database wu;   ####可以看到创建时的字符集
+----------+----------------------------------------------------------------+
| Database | Create Database                                                |
+----------+----------------------------------------------------------------+
| wu       | CREATE DATABASE `wu` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
+----------+----------------------------------------------------------------+
1 row in set (0.00 sec)
[root@centos7s ~]#cd /var/lib/mysql/   ###创建数据库就自动创建了文件夹;数据库本身是不存放任何数据的,只是一个容器,真正存放数据的是表
[root@centos7s mysql]#ls
aria_log.00000001  ibdata1      ib_logfile1  mysql.sock          test
aria_log_control   ib_logfile0  mysql        performance_schema  wu
[root@centos7s mysql]#cd wu
[root@centos7s wu]#ls
db.opt
[root@centos7s wu]#cat db.opt  ###通过查看opt文件也可以得知当前数据库的默认字符集以及默认排序规则
default-character-set=utf8mb4
default-collation=utf8mb4_general_ci
MariaDB [(none)]> show databases;  查看所有的数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| wu                 |
+--------------------+
5 rows in set (0.00 sec)


MariaDB [(none)]> use wu  切换数据库
Database changed
MariaDB [wu]> show tables; 查看数据库的里面的表;由于还没有创建表格,所以是空的
Empty set (0.00 sec)


MariaDB [wu]>
###########################################通过创建文件夹的方式来创建数据库################################
[root@centos7s mysql]#pwd
/var/lib/mysql
[root@centos7s mysql]#ll
total 28700
-rw-rw---- 1 mysql mysql    16384 Oct  8 09:43 aria_log.00000001
-rw-rw---- 1 mysql mysql       52 Oct  8 09:43 aria_log_control
-rw-rw---- 1 mysql mysql 18874368 Oct  8 09:43 ibdata1
-rw-rw---- 1 mysql mysql  5242880 Oct  8 09:43 ib_logfile0
-rw-rw---- 1 mysql mysql  5242880 Oct  8 09:43 ib_logfile1
drwx------ 2 mysql mysql     4096 Oct  8 09:43 mysql
srwxrwxrwx 1 mysql mysql        0 Oct  8 09:43 mysql.sock
drwx------ 2 mysql mysql     4096 Oct  8 09:43 performance_schema
drwx------ 2 mysql mysql        6 Oct  8 09:43 test
[root@centos7s mysql]#cp -a test jeff
[root@centos7s mysql]#mkdir wu1
[root@centos7s mysql]#ll
total 28700
-rw-rw---- 1 mysql mysql    16384 Oct  8 09:43 aria_log.00000001
-rw-rw---- 1 mysql mysql       52 Oct  8 09:43 aria_log_control
-rw-rw---- 1 mysql mysql 18874368 Oct  8 09:43 ibdata1
-rw-rw---- 1 mysql mysql  5242880 Oct  8 09:43 ib_logfile0
-rw-rw---- 1 mysql mysql  5242880 Oct  8 09:43 ib_logfile1
drwx------ 2 mysql mysql        6 Oct  8 09:43 jeff
drwx------ 2 mysql mysql     4096 Oct  8 09:43 mysql
srwxrwxrwx 1 mysql mysql        0 Oct  8 09:43 mysql.sock
drwx------ 2 mysql mysql     4096 Oct  8 09:43 performance_schema
drwx------ 2 mysql mysql        6 Oct  8 09:43 test
drwxr-xr-x 2 root  root         6 Oct  8 10:16 wu1
MariaDB [(none)]> show databases;   ###创建文件夹的方式也可以达到创建数据库的目的
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jeff               |
| mysql              |
| performance_schema |
| test               |
| wu1                |
+--------------------+
6 rows in set (0.00 sec)


MariaDB [(none)]> show create database wu1;  ###当然直接创建空文件,会采用默认的latin字符集
+----------+----------------------------------------------------------------+
| Database | Create Database                                                |
+----------+----------------------------------------------------------------+
| wu1      | CREATE DATABASE `wu1` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+----------------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]>

删除数据库示例:

MariaDB [wu]> drop database wu;   ###在sql中基本都是用drop来删除;用create来创建
Query OK, 0 rows affected (0.00 sec)

[root@centos7s wu]#cd /var/lib/mysql/  ###相应的数据库目录也会被删除;其实直接删除数据库目录也可以到达删除数据库的目的
[root@centos7s mysql]#ls
aria_log.00000001  ibdata1      ib_logfile1  mysql.sock          test
aria_log_control   ib_logfile0  mysql        performance_schema
[root@centos7s mysql]#

    原文作者:Brown.coding
    原文地址: https://zhuanlan.zhihu.com/p/47758573
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞