0
点赞
收藏
分享

微信扫一扫

数据库mysql&mariadb基础

前言

读者您好,以下为作者收集整理编写的文章,若出现遗漏或书面错误。
还请私聊告知一下,看到即刻修改。
该文章持续更新中, 喜欢的朋友可以收藏★

什么是数据库?

数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合


什么是MySql?

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。


什么是Mariadb?

MariaDB由MySQL的创始人Michael Widenius主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。

MySQL被收购后,面临着被闭源的风险,因此MySQL之父 Widenius离开Sun后,在2009年重新开发代码全部开源免费关系型数据库,推出了MariaDB。MariaDB名称来自他的女儿Maria的名字。

MariaDB 是一个采用 Maria 存储引擎的MySQL分支版本,是由原来 MySQL 的作者Michael Widenius创办的公司所开发的免费开源的数据库服务器。

mairadb和mysql命令一致

目录

一、SQL是什么?

结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

跟数据库相关的工作:DBDDBA
DBA:数据库管理员(database administrator)
DBD:数据库开发人员(database developer)

SQL 是1986年10 月由美国国家标准局(ANSI)通过的数据库语言美国标准,接着,国际标准化组织(ISO)颁布了SQL正式国际标准。1989年4月,ISO提出了具有完整性特征的SQL89标准,1992年11月又公布了SQL92标准,在此标准中,把数据库分为三个级别:基本集、标准集和完全集。


二、SQL语句结构

结构化查询语言包含6个部分:

2.1 数据查询语言 DQL

(Data Query Language)

其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHEREORDER BYGROUP BYHAVING。这些DQL保留字常与其他类型的SQL语句一起使用。


2.2 数据操作语言 DML

(Data Manipulation Language)

其语句包括动词INSERTUPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。


2.3 事务处理语言 TPL

(Transaction Process Language)

跟shell有点类似 由多条sql语句组成的整体

它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTIONCOMMITROLLBACK


2.4 数据控制语言 DCL

(Data Command Language)

它的语句通过GRANTREVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANTREVOKE控制对表单个列的访问。


2.5 数据定义语言 DDL

(Data Definition Language, DDL)

其语句包括动词CREATEDROP。在数据库中创建新表或删除表(CREAT TABLEDROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。


2.6 指针控制语言 CCL

(Cursor Control Language, CCL)

它的语句,像DECLARE CURSORFETCH INTOUPDATE WHERE CURRENT用于对一个或多个表单独行的操作。


三、mariadb安装初始化

3.1 配置环境

使用centos7.6版本,搭建好yum仓库(本文使用本地iso文件centos7.6)
centos6.5以上

yum -y install mariadb-server mariadb

centos6.5以下

yum install mysql-community-server mysql

查看未安裝包的信息

rpm -pqi  包名

查看版本

mysql -V

3.2 启动服务

centos6.5以上,服务为mariadb

启动服务
systemctl start mariadb

关闭服务
systemctl stop mariadb

服务自启动
systemctl enable mariadb

查看服务状态
systemctl status mariadb

centos6.5以上,服务为mysqld

启动服务
systemctl start mysqld

关闭服务
systemctl stop mysqld

服务自启动
systemctl enable mysqld

查看服务状态
systemctl status maysqld

3.2 初始化mairadb

启动服务后,配置数据库的账号和密码
Mysql的超级管理员是root,拥有最mysql数据库的最高权限。

3.2.1 场景一

如果没有密码可以直接进行配置

尝试登录
mysql -uroot -p #按下回车

修改密码
mysqladmin -uroot password 123 

3.2.2 场景二

如果服务有自动分配密码,查看密码后进行修改

查看日志的密码
grep 'temporary password' /var/log/mysqld.log

修改密码,输入原密码后就可以修改为新密码
myslqadmin -u用户名 password密码 

3.2.3 安装完成后,可以使用以下命令对mysql进行安全配置

语法 mysql_secure_installation

1、为root用户设置密码
2、删除匿名账号
3、取消root用户远程登录
4、删除test库和对test库的访问权限
5、刷新授权表使修改生效

回车键默认为y
详细步骤请参看以下命令:
[root@localhost ~]# mysql_secure_installation
Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] n	<– 是否设置root用户密码, 已设置密码输入n
 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB 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? [Y/n] y	<– 是否删除匿名用户,生产环境建议删除,所以直接回车或Y
 ... Success!

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? [Y/n] n	 <–是否禁止root远程登录,根据自己的需求选择Y/n并回车,建议禁止
 ... skipping.

By default, MariaDB 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? [Y/n] n	<– 是否删除test数据库,直接回车或Y
 ... skipping.

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

Reload privilege tables now? [Y/n] y	<– 是否重新加载权限表,直接回车
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

3.3登录mariadb

语法:mysql -u账号 -p密码
例如:

mysql -uroot -p123

四、库命令

需要先登录mysql,进入mysql的命令界面
在这里插入图片描述
ps: 所有命令以;结尾

4.1 查看数据库

语法 show databases;

例如:

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

注意:
1:information_schema这个数据库保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型不访问权限等。
2:performance_schema 这是MySQL5.5新增的一个性能优化的引擎:命名PERFORMANCE_SCHEMA
主要用于收集数据库服务器性能参数。MySQL用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表
3:mysql库是系统库,里面保存有账户信息,权限信息等。
4:mysql5.7增加了sys 系统数据库,通过这个库可以快速的了解系统的元数据信息
元数据是关于数据信息的数据,如数据库名或表名,列的数据类型,或访问权限等。

1、informance_schema
保存了MySQl服务所有数据库的信息。
具体MySQL服务有多少个数据库,各个数据库有哪些表,各个表中的字段是什么数据类型,各个表中有哪些索引,各个数据库要什么权限才能访问。

2、mysql
保存MySQL的权限、参数、对象和状态信息。
如哪些user可以访问这个数据、DB参数、插件、主从

3、performance_schema
主要用于收集数据库服务器性能参数
提供进程等待的详细信息,包括锁、互斥变量、文件信息;
保存历史的事件汇总信息,为提供MySQL服务器性能做出详细的判断;
对于新增和删除监控事件点都非常容易,并可以随意改变mysql服务器的监控周期,例如(CYCLE、MICROSECOND)

4、test
没有东西

前三个库不能删除

4.2 以行的方式显示

语法 \G

例如:

MariaDB [(none)]> show databases \G;
*************************** 1. row ***************************
Database: information_schema
*************************** 2. row ***************************
Database: mysql
*************************** 3. row ***************************
Database: performance_schema
*************************** 4. row ***************************
Database: test
4 rows in set (0.00 sec)


4.3 配置退出数据库

语法 exit;(可以不加;号)

例如:

MariaDB [(none)]> exit
Bye

4.4 在linux终端查看数据库信息

语法 mysql -e '数据库命令'

例如:

[root@localhost ~]# mysql -uroot -p123 -e 'show databases'
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+

在Linux终端查看数据库列表
语法 mysqlshow

例如:

[root@localhost ~]# mysqlshow -uroot -p123
+--------------------+
|     Databases      |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+

4.5 创建数据库

语法 create database 库名;

例如:

MariaDB [(none)]> create database test1;
Query OK, 1 row affected (0.00 sec)

创建数据库注意事项:
1、在文件系统中,MySQL的数据存储区将以目录方式表示MySQL数据库。因此,上面命令中的数据库名字必须与操作系统的约束的目录名字一致。例如不允许文件和目录名中有\,/,:,*,?,”,<,>,|这些符号,在MySQL数据库名字中这些字母会被自动删除。<遵从目录的约束>

2、数据库的名字不能超过64个字符,包含特殊字符的名字或者是全部由数字或保留字组成的名字,必须用单引号``包起来。(该符号在Tab上面)

3、数据库不能重名

4、数据库名区分大小写

例如:

mysql> create database BB;  #创建一个名为BB的数据库
mysql> create database `BB-test`;	#创建一个包含特殊字符的数据库名

查看数据库存放目录

mysql的存放目录
/usr/local/mysql/data/ 

mariadb的存放目录
/var/lib/mysql/

4.5 使用数据库

语法 use 库名;

例如:

MariaDB [(none)]> use test1;
Database changed

4.6 查看自己所处的数据库位置及默认所在的位置

语法 select database();

例如:
打开数据库查询

MariaDB [(none)]> select database();
+------------+
| database() |
+------------+
| NULL       |
+------------+
1 row in set (0.00 sec

Null在数据库中表示不知道的数据,有三种含义:
1、知道数据存在,但不知道具体值.
2、不知道数据是否存在.
3、数据不存在.

进入上面创建的test1库,查询目前所处的位置

MariaDB [test1]> select database();
+------------+
| database() |
+------------+
| test1      |
+------------+
1 row in set (0.00 sec)

4.7 查询当前时间,当前用户,当前库信息

语法 select now(),user(),database();

例如:
进入创建的test1,进行查询

MariaDB [test1]> select now(),user(),database();
+---------------------+----------------+------------+
| now()               | user()         | database() |
+---------------------+----------------+------------+
| 2022-04-25 01:00:30 | root@localhost | test1      |
+---------------------+----------------+------------+
1 row in set (0.00 sec)

4.8 删除数据库

4.8.1 方法一

语法 drop database 库名;

例如:删除创建的test1数据库

MariaDB [test1]> drop database test1;
Query OK, 0 rows affected (0.00 sec)

注意:删除数据库没有任何提示,要谨慎操作

4.8.2 方法二

【mairadb】
进入存放的目录/var/lib/mysql,将库目录删除就可以了

cd /var/lib/mysql
rm -rf test/

五、Mysql数据类型

5.1 MySQL的数据类型主要六大类

整数类型
BITBOOLTINY INTSMALL INTMEDIUM INTINTBIG INT


浮点数类型
FLOATDOUBLE


定点数
DECIMAL


字符串类型
CHARVARCHARTINY TEXTTEXTMEDIUM TEXTLONGTEXTTINY BLOBBLOBMEDIUM BLOBLONG BLOB


日期类型
DateDateTimeTimeStampTimeYear


二进制类型
BITBINARYVARBINARYTINYBLOBBLOBMEDIUMBLOBLONGBLOB


5.2 整型

数据类型大小范围说明
tinyint(m)1个字节(-128~127)很小的整数
smallint(m)2个字节(-32768~32767)小的整数
mediumint(m)3个字节(-8388608~8388607)中等大小的整数
INT (INTEGHR)4个字节(-2147483648~2147483647)普通大小的整数
bigint(m)8个字节(-9223372036854775808〜9223372036854775807)大整数

5.3 浮点型

数据类型大小有符号范围无符号范围说明
FLOAT4 个字节(-3.402823466E+38~-1.175494351E-38)(0 和 -1.175494351E-38~-3.402823466E+38)单精度浮点数
DOUBLE8 个字节(-1.7976931348623157E+308~-2.2250738585072014E-3080 和 -2.2250738585072014E-308~-1.7976931348623157E+308)双精度浮点数

5.4 定点类型

数据类型大小范围说明
DECIMAL (M, D),DECM+2 个字节-9.99 到99.99压缩的“严格”定点数

在 MySQL 中,定点数以字符串形式存储,在对精度要求比较高的时候(如货币、科学数据),使用 DECIMAL 的类型比较好,另外两个浮点数进行减法和比较运算时也容易出问题,所以在使用浮点数时需要注意,并尽量避免做浮点数比较。


5.5 日期类型

数据类型大小日期格式日期范围
YEAR1 个字节YYYY1901 ~ 2155
TIME3 个字节HH:MM:SS-838:59:59 ~ 838:59:59
DATE3 个字节YYYY-MM-DD1000-01-01 ~ 9999-12-3
DATETIME8 个字节YYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
TIMESTAMP4 个字节YYYY-MM-DD HH:MM:SS1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC

5.6 字符串类型

数据类型大小说明
CHAR(M)M 字节,1<=M<=255固定长度非二进制字符串
VARCHAR(M)L+1字节,在此,L< = M和 1<=M<=255变长非二进制字符串
TINYTEXTL+1字节,在此,L<2^8非常小的非二进制字符串
TEXTL+2字节,在此,L<2^16小的非二进制字符串
MEDIUMTEXTL+3字节,在此,L<2^24中等大小的非二进制字符串
LONGTEXTL+4字节,在此,L<2^32大的非二进制字符串
ENUM1或2个字节,取决于枚举值的数目 (最大值为65535)枚举类型,只能有一个枚举字符串值
SET1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员)一个设置,字符串对象可以有零个或 多个SET成员

5.7 二进制类型

数据类型大小说明
BIT(M)大约 (M+7)/8 字节位字段类型
BINARY(M)M 字节固定长度二进制字符串
VARBINARY (M)M+1 字节可变长度二进制字符串
TINYBLOB (M)L+1 字节,在此,L<2^8非常小的BLOB
BLOB (M)最大长度为65535 (216-1)字节L+2 字节,在此,L<2^16
MEDIUMBLOB (M)L+3 字节,在此,L<2^24中等大小的BLOB
LONGBLOB (M)L+4 字节,在此,L<2^32非常大的BLOB

六、表命令

使用创建的数据库

MariaDB [(none)]> use test;
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

6.1 创建表

语法 create table 表名 (字段名 类型(长度));

例如:

MariaDB [test]> create table test(name char(10));
\Query OK, 0 rows affected (0.04 sec)

可以看看下图就有概念了,可以用excel表来理解

字段名 类型(长度)字段名 类型(长度)
名字 文本(10)年龄 数字(3)

6.2 查看表

语法 show tables;

例如 :

MariaDB [test]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test           |
+----------------+
1 row in set (0.00 sec)

6.3 查看表的结构

有多种方法,选择一种作为常用就可以了。


6.3.1 方法一

语法 desc 表名;

例如:

MariaDB [test]> desc test;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name  | char(10) | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
1 row in set (0.00 sec)

6.3.2 方法二

语法 explain 表名;

例如

MariaDB [test]> explain test;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name  | char(10) | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
1 row in set (0.00 sec)

6.3.3 方法三

语法 show columns from 表名;

例如:


6.4 查看创建表使用的命令

语法 show create table 表名

例如:

MariaDB [test]> show create table test;
+-------+---------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                |
+-------+---------------------------------------------------------------------------------------------+
| test  | CREATE TABLE `test` (
  `name` char(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+---------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

6.5 指定表的存储引擎和字符集

6.5.1 引擎是什么?

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,能够获得额外的速度或者功能,从而改善应用的整体功能。

6.5.2 查看引擎

语法 show engines;

例如:

MariaDB [test]> show engines;
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                                    | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                  | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                                      | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                                         | 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         |
| InnoDB             | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |
| ARCHIVE            | YES     | Archive storage engine                                                     | NO           | NO   | NO         |
| FEDERATED          | YES     | FederatedX pluggable storage engine                                        | YES          | NO   | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                                         | NO           | NO   | NO         |
| Aria               | YES     | Crash-safe tables with MyISAM heritage                                     | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
10 rows in set (0.00 sec)

6.5.3 字符集是什么?

机器是通过二进制码(比如0101)来进行识别执行的。在电脑上看到的文字,每一个字符都有一个对应的二进制数字,字符集就是这些字符的集合。通过字符集,将二进制机器码转换为人可读的字符。

例如:
打开某些文件是乱码,是因为没有配置好字符集。
在这里插入图片描述


6.5.4 查看字符集

语法 character set;

例如:

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 |
| 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 |
| 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)

6.5.5 指定表的引擎和字符集

语法 在创建表命令的最后进行指定ENGINE=引擎 DEFAULT CHARSET=字符集;

例如:

MariaDB [test]> create table test2(id int(20),name char(40))ENGINE=MyISAM DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.01 sec)

6.6 删除表

语法 drop table 表名

例如:

MariaDB [test]> drop table test2;
Query OK, 0 rows affected (0.00 sec)

举报

相关推荐

0 条评论