[Linux]经典面试题 数据库管理 MySQL

作者: SkyBiuBiu


目录

  • [一、SQL语句]
  • [二、数据库简介]
  • [三、关系型数据库]
  • [四、MySQL 安装]
  • [五、MySQL 管理]
  • [5.1 用户设置]
    • [5.1.1 创建用户]
    • [5.1.2 用户授权]
  • [5.2 管理命令]
  • [六、MySQL 数据结构]
  • [6.1 Text 类型]
  • [6.2 Number 类型]
  • [6.3 Date 类型]
  • [七、MySQL 库\&表操作]
  • [7.1 库操作]
    • [7.1.1 创建库]
    • [7.1.2 删除库]
    • [7.1.3 选择库]
  • [7.2 表操作]
    • [7.2.1 创建表]
    • [7.2.2 删除表]
    • [7.2.3 查询表]
  • [7.3 数据操作]
    • [7.3.1 插入数据]
    • [7.3.2 查询数据]
    • [7.3.3 更改数据]


参考:

  • [MariaDB / MySQL数据类型-阿里云开发者社区 (aliyun.com)]

  • [MariaDB 教程_w3cschool]

  • [MySQL 教程 \| 菜鸟教程 (runoob.com)]

  • [MariaDB Server Documentation - MariaDB Knowledge Base]

一、SQL语句

可以把 SQL 分成两个部分:数据操作语言(DML)和数据定义语言(DDL)

SQL 适用于执行查询的语法。但是 SQL 语言也包含用于增删改查的语法。

增删改查语句构成 SQL 的 DML 部分:

  • SELECT - 查询
  • UPDATE - 更改
  • DELETE - 删除
  • INSERT INTO - 增加

创建删除表格,定义索引(键),规定表间链接和设定约束的 DDL 语句:

  • CREATE DATABASE - 创建新数据库
  • ALTER DATABASE - 修改数据库
  • CREATE TABLE - 创建新表
  • ALTER TABLE - 变更(改变)数据库表
  • DROP TABLE - 删除表
  • CREATE INDEX - 创建索引(搜索键)
  • DROP INDEX - 删除索引

二、数据库简介

  • 数据库(DataBase)是按照数据结构来组织、存储和管理数据的仓库。

  • 每个数据库都有一个或多个不同的API用于对数据的增删改查。

三、关系型数据库

RDBMS(Relational DataBase Management System),关系型数据库。

关系型数据库的一些术语:

  • 数据库(DataBase):数据库是表的集合,可以理解为用来存放数据表的仓库。
  • 数据表(Table):表是数据的矩阵,看起来就像一个简单的Excel表格。
  • 列(Column):一列相同类型的数据。
  • 行(Row):一组相关的数据。
  • 主键(Primary Key):主键是唯一的,一个数据表中只能包含一个主键,可以使用主键来查询数据。
  • 外键(Foreign key):外键用于关联两个表。
  • 复合键(Composite key):复合键将多个列作为一个索引键,一般用于符合索引。
  • 索引(Index):使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。

四、MySQL 安装

在 CentOS 7 之后的MySQL被其分支MariaDB代替,在存储引擎方面采用XtraDB来代替MySQL的InnoDB。

查看系统中的是否自带MariaDB:

[root@localhost ~] rpm -qa | grep mariadb
mariadb-errmsg-10.3.28-1.module_el8.3.0+757+d382997d.x86_64
mariadb-10.3.28-1.module_el8.3.0+757+d382997d.x86_64
mariadb-gssapi-server-10.3.28-1.module_el8.3.0+757+d382997d.x86_64
mariadb-backup-10.3.28-1.module_el8.3.0+757+d382997d.x86_64
mariadb-connector-c-config-3.1.11-2.el8_3.noarch
mariadb-server-10.3.28-1.module_el8.3.0+757+d382997d.x86_64
mariadb-server-utils-10.3.28-1.module_el8.3.0+757+d382997d.x86_64
mariadb-common-10.3.28-1.module_el8.3.0+757+d382997d.x86_64
mariadb-connector-c-3.1.11-2.el8_3.x86_64

如果有,可以选择卸载(因为系统自带的版本可能会比较旧,存在兼容性问题)

rpm -e mariadb // 普通删除模式
rpm -e --nodeps mariadb // 强力删除模式,会删除依赖文件

安装 Mariadb:

yum install -y mariadb mariadb-server

初始化 Mariadb:

mysqld --initialize

设置开机启动:

systemctl enable mariadb.service
systemctl start mariadb.service

验证:

[root@localhost ~] mysqladmin --version
mysqladmin  Ver 9.1 Distrib 10.3.28-MariaDB, for Linux on x86_64

初始化root登录密码:

mysqladmin -u root password "new_password"

登录数据库:

mysql -u root -p

五、MySQL 管理

5.1 用户设置

在MySQL(MariaDB)中,添加用户有两种方式:

5.1.1 创建用户

切换到mysql库:

MariaDB [(none)]> use mysql;

添加sky用户,密码为skybiubiu:

MariaDB [mysql]> create user sky identified by 'skybiubiu';
Query OK, 0 rows affected (0.000 sec)

5.1.2 用户授权

以skydb库为例子:

MariaDB [mysql]> CREATE DATABASE skydb;
Query OK, 1 row affected (0.000 sec)

通过GRANT命令进行授权,授予sky用户SELECT,INSERT,UPDATE操作权限:

MariaDB [skydb]> GRANT SELECT,INSERT,UPDATE ON skydb.*
    -> TO 'sky'@'localhost'
    -> IDENTIFIED BY 'skybiubiu';
Query OK, 0 rows affected (0.001 sec)

5.2 管理命令

  • USE 数据库名 - 选择要操作的数据库
  • SHOW DATABASES - 查看所有数据库
  • SHOW TABLES - 查看指定库的所有表
  • SHOW COLUMNS FROM 数据表 - 显示数据表的属性,属性类型,主键信息,NULL,默认值等信息
  • SHOW INDEX FROM 数据表 - 显示数据表的详细索引信息,包括主键。
  • SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern'] - 查看表状态

六、MySQL 数据结构

有三种主要的类型:Text(文本)、Number(数字)和 Date/Time(日期/时间)类型。

6.1 Text 类型

|       数据类型       |                                                        描述                                                        |
|------------------|------------------------------------------------------------------------------------------------------------------|
| CHAR(size)       | 保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。                                                              |
| VARCHAR(size)    | 保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。**注释:**如果值的长度大于 255,则被转换为 TEXT 类型。                          |
| TINYTEXT         | 存放最大长度为 255 个字符的字符串。                                                                                             |
| TEXT             | 存放最大长度为 65,535 个字符的字符串。                                                                                          |
| BLOB             | 用于 BLOBs(Binary Large OBjects)。存放最多 65,535 字节的数据。                                                                |
| MEDIUMTEXT       | 存放最大长度为 16,777,215 个字符的字符串。                                                                                      |
| MEDIUMBLOB       | 用于 BLOBs(Binary Large OBjects)。存放最多 16,777,215 字节的数据。                                                            |
| LONGTEXT         | 存放最大长度为 4,294,967,295 个字符的字符串。                                                                                   |
| LONGBLOB         | 用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。                                                        |
| ENUM(x,y,z,etc.) | 允许您输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。**注释:**这些值是按照您输入的顺序排序的。可以按照此格式输入可能的值: ENUM('X','Y','Z') |
| SET              | 与 ENUM 类似,不同的是,SET 最多只能包含 64 个列表项且 SET 可存储一个以上的选择。                                                               |

6.2 Number 类型

|      数据类型       |                                            描述                                            |
|-----------------|------------------------------------------------------------------------------------------|
| TINYINT(size)   | -128 到 127 常规。0 到 255 无符号\*。在括号中规定最大位数。                                                  |
| SMALLINT(size)  | -32768 到 32767 常规。0 到 65535 无符号\*。在括号中规定最大位数。                                            |
| MEDIUMINT(size) | -8388608 到 8388607 普通。0 to 16777215 无符号\*。在括号中规定最大位数。                                    |
| INT(size)       | -2147483648 到 2147483647 常规。0 到 4294967295 无符号\*。在括号中规定最大位数。                             |
| BIGINT(size)    | -9223372036854775808 到 9223372036854775807 常规。0 到 18446744073709551615 无符号\*。在括号中规定最大位数。 |
| FLOAT(size,d)   | 带有浮动小数点的小数字。在 size 参数中规定最大位数。在 d 参数中规定小数点右侧的最大位数。                                        |
| DOUBLE(size,d)  | 带有浮动小数点的大数字。在 size 参数中规定最大位数。在 d 参数中规定小数点右侧的最大位数。                                        |
| DECIMAL(size,d) | 作为字符串存储的 DOUBLE 类型,允许固定的小数点。在 size 参数中规定最大位数。在 d 参数中规定小数点右侧的最大位数。                        |

这些整数类型拥有额外的选项 UNSIGNED。通常,整数可以是负数或正数。如果添加 UNSIGNED 属性,那么范围将从 0 开始,而不是某个负数。

6.3 Date 类型

|    数据类型     |                                                                             描述                                                                             |
|-------------|------------------------------------------------------------------------------------------------------------------------------------------------------------|
| DATE()      | 日期。格式:YYYY-MM-DD**注释:**支持的范围是从 '1000-01-01' 到 '9999-12-31'                                                                                                 |
| DATETIME()  | \*日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS**注释:**支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'                                                              |
| TIMESTAMP() | \*时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的秒数来存储。格式:YYYY-MM-DD HH:MM:SS**注释:**支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC |
| TIME()      | 时间。格式:HH:MM:SS**注释:**支持的范围是从 '-838:59:59' 到 '838:59:59'                                                                                                    |
| YEAR()      | 2 位或 4 位格式的年。**注释:**4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。                                                                             |

七、MySQL 库\&表操作

7.1 库操作

7.1.1 创建库

方法一:登入MySQL中,通过SQL语句创建。

CREATE DATABASE IF NOT EXISTS <数据库名>;
  • IF NOT EXISTS - 如果不存在该数据库则创建。

方法二:在bash中,利用mysqladmin命令创建。

mysqladmin -u root -p create <数据库名>

7.1.2 删除库

同上两种删除库的方法:

登入MySQL中,通过SQL语句删除:

DROP DATABASE <数据库名>;

在Bash,通过mysqladmin命令删除:

mysqladmin -u root -p drop <数据库名>

7.1.3 选择库

进入mysql,使用SQL语句选择库:

USE <数据库名>;

7.2 表操作

7.2.1 创建表

登入MySQL中,通过SQL语句创建:

CREATE TABLE <表名> (column_name column_type);

示例:

CREATE TABLE IF NOT EXISTS books (
  BookID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
  Title VARCHAR(100) NOT NULL, 
  SeriesID INT, AuthorID INT)CHARSET UTF8;

注意:`是反单引号,ESC下面那个,可加可不加。

  • NOT NULL - 该字段不能为空。

  • AUTO_INCREMENT - 自增,常用于主键,数值会自动加1。

  • PRIMARY KEY - 定义主键,可使用多列来定义主键,列间以逗号分隔。

  • ENGINE - 设置存储引擎。

  • CHARSET - 设置编码。

    7.2.2 删除表

登入MySQL中,通过SQL语句创建:

DROP TABLE <表名>;

示例:

MariaDB [skydb]> show tables;
+-----------------+

| Tables_in_skydb |

+-----------------+

| books | | sky_table |

+-----------------+
2 rows in set (0.000 sec)

MariaDB [skydb]> DROP TABLE sky_table;
Query OK, 0 rows affected (0.002 sec)

MariaDB [skydb]> show tables;
+-----------------+

| Tables_in_skydb |

+-----------------+

| books |

+-----------------+
1 row in set (0.000 sec)

7.2.3 查询表

查看库中所有表:

MariaDB [skydb]> SHOW TABLES;
+-----------------+

| Tables_in_skydb |

+-----------------+

| books |

+-----------------+
1 row in set (0.000 sec)

查看一个某个表头的详情:

MariaDB [skydb]> DESCRIBE books;
+----------+--------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+----------+--------------+------+-----+---------+----------------+

| BookID | int(11) | NO | PRI | NULL | auto_increment | | Title | varchar(100) | NO | | NULL | | | SeriesID | int(11) | YES | | NULL | | | AuthorID | int(11) | YES | | NULL | |

+----------+--------------+------+-----+---------+----------------+
4 rows in set (0.001 sec)

DESCRIBE 可以简写为 DESC。

7.3 数据操作

7.3.1 插入数据

INSERT INTO books (Title, SeriesID, AuthorID)
VALUES ("Lair of Bones", 2, 2);

7.3.2 查询数据

语法:

SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]

Clause - 从哪个表里找。

LIMIT N - 设定返回的记录数。

OFFSET M - 查询数据的偏移量,默认为0。

效果:

MariaDB [skydb]> SELECT * FROM books;
+--------+---------------+----------+----------+

| BookID | Title | SeriesID | AuthorID |

+--------+---------------+----------+----------+

| 1 | Lair of Bones | 2 | 2 | | 2 | Lair of Bones | 2 | 2 |

+--------+---------------+----------+----------+
2 rows in set (0.000 sec)

因为插入了两次数据,所以有两条一样的,留着下面更改的时候用。

7.3.3 更改数据

将7.3.2中BookID为2的Title改为 I'm SkyBiuBiu

SQL语法:

UPDATE books 
SET Title = "I'm SkyBiuBiu" 
WHERE BookID = 2;

效果:

MariaDB [skydb]> SELECT * FROM books;
+--------+---------------+----------+----------+

| BookID | Title | SeriesID | AuthorID |

+--------+---------------+----------+----------+

| 1 | Lair of Bones | 2 | 2 | | 2 | I'm SkyBiuBiu | 2 | 2 |

+--------+---------------+----------+----------+
2 rows in set (0.000 sec)

原文创作:SkyBiuBiu

原文链接:https://www.cnblogs.com/Skybiubiu/p/14891531.html

更多推荐

更多
这里什么都没有

近期文章

更多
文章目录

    推荐作者

    更多