Docker安装MySQLDocker是一个开源的容器化平台，可以方便地搭建各种环境，包括MySQL数据库。在本教程中，我们将介绍如何使用Docker安装MySQL。安装Docker首先，您需要在您的计算机上安装Docker。您可以在Docker官方网站下载适用于您的操作系统的Docker Desktop应用程序并安装。拉取MySQL镜像接下来，您需要从Docker Hub上拉取MySQL镜像。打开终端并执行以下命令：docker pull mysql这将从Docker Hub上下载MySQL镜像。您可以通过以下命令查看已下载的镜像：docker images启动MySQL容器现在，您可以使用以下命令启动MySQL容器：docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest此命令将在后台运行MySQL容器，并将其命名为“some-mysql”。此外，您需要设置MySQL的root密码，以便在后续的步骤中进行访问。连接MySQL容器要连接到MySQL容器，您可以使用以下命令：docker exec -it some-mysql mysql -p此命令将连接到MySQL容器，并要求您输入root密码。输入您在步骤3中设置的密码即可登录MySQL。使用MySQL容器现在，您已经成功地使用Docker安装和启动了MySQL容器。您可以使用常规的MySQL命令进行数据库管理。例如，您可以使用以下命令创建一个新的数据库：CREATE DATABASE mydatabase;DDL（数据定义语言）学习当我们想要创建一个新的MySQL表时，我们需要使用DDL（数据定义语言）来定义表的结构。DDL包括创建表，修改表和删除表等操作。创建库基本语法在MySQL中，可以使用CREATE DATABASE语句来创建一个新的数据库。它的基本语法如下：CREATE DATABASE database_name;其中，database_name是要创建的数据库的名称。例如，要创建一个名为mydatabase的新数据库，可以使用以下查询：CREATE DATABASE mydatabase;需要注意的是，创建数据库的用户必须具有足够的权限。如果当前用户没有创建数据库的权限，可以使用以下查询来授权：GRANT CREATE ON *.* TO 'user'@'localhost';这个查询将授予user用户在本地主机上创建数据库的权限。在创建数据库后，可以使用USE语句来选择要使用的数据库。例如，要使用mydatabase数据库，可以使用以下查询：USE mydatabase;这个查询将选择mydatabase数据库，并将其设置为当前数据库。在选择数据库后，可以使用其他SQL语句来创建表、插入数据、查询数据等。命名在MySQL中，数据库名必须遵循以下规则：数据库名必须以字母开头，可以包含字母、数字和下划线。数据库名不能超过64个字符。数据库名区分大小写。数据库名不能与MySQL保留关键字相同，例如SELECT、INSERT、UPDATE等。需要注意的是，虽然MySQL允许使用特殊字符和空格作为数据库名，但这并不是一个好的做法，因为它可能会导致一些问题。为了避免这些问题，最好只使用字母、数字和下划线作为数据库名。另外，建议在命名数据库时使用有意义的名称，以便更好地描述数据库的内容和用途。例如，如果数据库用于存储客户信息，可以将其命名为customers。这样做可以使数据库更易于管理和维护。字符集在MySQL中，字符集用于定义数据库中存储的字符集和排序规则。MySQL支持多种字符集，包括ASCII、UTF-8、GBK等。在创建数据库时，可以指定要使用的字符集。如果没有指定字符集，则使用默认字符集。要查看MySQL中可用的字符集，可以使用以下查询：SHOW CHARACTER SET;要查看当前数据库的字符集，可以使用以下查询：SELECT @@character_set_database;要创建一个使用特定字符集的数据库，可以在CREATE DATABASE语句中指定字符集。例如，要创建一个使用UTF-8字符集的数据库，可以使用以下查询：CREATE DATABASE mydatabase CHARACTER SET utf8;排序规则在MySQL中，排序规则用于定义字符串比较的方式。MySQL支持多种排序规则，包括二进制排序、不区分大小写排序、区分大小写排序等。在创建数据库时，可以指定要使用的排序规则。如果没有指定排序规则，则使用默认排序规则。要查看MySQL中可用的排序规则，可以使用以下查询：SHOW COLLATION;要查看当前数据库的排序规则，可以使用以下查询：SELECT @@collation_database;要创建一个使用特定排序规则的数据库，可以在CREATE DATABASE语句中指定排序规则。例如，要创建一个使用不区分大小写排序的数据库，可以使用以下查询：CREATE DATABASE mydatabase COLLATE utf8_general_ci;创建表基本语法在MySQL中，用于创建表的关键字是CREATE TABLE。使用CREATE TABLE语句可以创建一个新的表，并指定表的名称、列名、数据类型、约束等信息。以下是一个简单的CREATE TABLE语句示例：CREATE TABLE mytable ( id INT, name VARCHAR(50), age INT );这个语句将创建一个名为mytable的新表，包含三个列：id、name和age。其中，id和age列的数据类型为整数，name列的数据类型为可变长度的字符串。在CREATE TABLE语句中，还可以指定列的约束，如主键、唯一性约束、非空约束等。例如，要在id列上定义主键约束，可以使用以下语句：CREATE TABLE mytable ( id INT PRIMARY KEY, name VARCHAR(50), age INT );这个语句将在id列上定义主键约束，保证表中每行数据的唯一性。除了列的约束外，还可以在CREATE TABLE语句中指定表的字符集、排序规则等信息。例如，要创建一个使用UTF-8字符集和不区分大小写排序的表，可以使用以下语句：CREATE TABLE mytable ( id INT, name VARCHAR(50), age INT ) CHARACTER SET utf8 COLLATE utf8_general_ci;这个语句将创建一个使用UTF-8字符集和不区分大小写排序的新表。需要注意的是，在创建表时，应根据实际情况选择适当的数据类型、约束、字符集和排序规则，以确保表的正确性和性能。同时也可以使用AUTO_INCREMENT关键字来创建自增列。自增列是一种特殊的列，它的值会自动递增，每次插入新行时都会自动分配一个新的值。以下是一个使用AUTO_INCREMENT关键字创建自增列的示例：CREATE TABLE mytable ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), age INT );这个语句将创建一个名为mytable的新表，包含三个列：id、name和age。其中，id列使用AUTO_INCREMENT关键字定义为自增列，并将其设置为主键。在插入新行时，可以省略id列的值，MySQL会自动分配一个新的值。例如，要插入一行数据，可以使用以下语句：INSERT INTO mytable (name, age) VALUES ('John', 30);这个语句将插入一行数据，id列的值会自动递增。需要注意的是，自增列只能用于整数类型的列，且每个表只能有一个自增列。在创建表时，应根据实际情况选择是否需要使用自增列。如果表中的数据不需要自动递增的唯一标识符，可以不使用自增列。数据类型在MySQL中，有多种数据类型可用于创建表中的列。以下是一些常用的MySQL数据类型：INT或INTEGER：用于存储整数。FLOAT或DOUBLE：用于存储浮点数。DECIMAL：用于存储精确的小数。VARCHAR：用于存储可变长度的字符串。CHAR：用于存储固定长度的字符串。TEXT：用于存储较长的文本数据。DATE：用于存储日期。TIME：用于存储时间。DATETIME：用于存储日期和时间。TIMESTAMP：用于存储时间戳。BOOLEAN或BOOL：用于存储布尔值。除了这些常用的数据类型外，MySQL还支持其他一些数据类型，如枚举、集合、二进制数据等。在创建表时，可以根据需要选择适当的数据类型。需要注意的是，不同的数据类型具有不同的存储要求和限制，因此应根据实际情况选择合适的数据类型。索引在MySQL中，索引是一种用于加速数据检索的数据结构。索引可以提高查询效率，减少查询所需的时间和资源。MySQL支持多种类型的索引，包括B-tree索引、哈希索引、全文索引等。以下是一些常用的MySQL索引:PRIMARY KEY：用于定义表的主键，可以保证表中每行数据的唯一性。UNIQUE：用于定义唯一性约束，可以保证列中的值唯一。INDEX：用于创建普通索引，可以加速查询。FULLTEXT：用于创建全文索引，可以加速全文检索。在创建表时，可以在列上定义索引。例如，要在id列上创建主键索引，可以使用以下查询：CREATE TABLE mytable ( id INT PRIMARY KEY, name VARCHAR(50) );要在name列上创建唯一性约束，可以使用以下查询：CREATE TABLE mytable ( id INT, name VARCHAR(50) UNIQUE );要在name列上创建普通索引，可以使用以下查询：CREATE TABLE mytable ( id INT, name VARCHAR(50), INDEX name_index (name) );要在content列上创建全文索引，可以使用以下查询：CREATE TABLE mytable ( id INT, content TEXT, FULLTEXT content_index (content) );需要注意的是，索引可以提高查询效率，但也会增加数据插入、更新和删除的时间和资源消耗。因此，在创建索引时，应根据实际情况选择适当的索引类型和列。修改表如果我们想要修改现有的表结构，我们可以使用ALTER TABLE语句。以下是一些常见的ALTER TABLE操作：添加列要在表中添加新列，我们可以使用以下语法：ALTER TABLE users ADD COLUMN birthdate DATE;在上面的示例中，我们向“users”表中添加了一个名为“birthdate”的列。修改列要修改现有列的定义，我们可以使用以下语法：ALTER TABLE users MODIFY COLUMN email VARCHAR(200);在上面的示例中，我们将“users”表中的“email”列长度从100修改为200。删除列要删除表中的列，我们可以使用以下语法：ALTER TABLE users DROP COLUMN email;在上面的示例中，我们从“users”表中删除了名为“email”的列。删除表如果我们想要删除表，我们可以使用以下语句：DROP TABLE users;在上面的示例中，我们删除了名为“users”的表。总之，DDL是MySQL中重要的语言，用于定义和修改表结构。它使我们能够创建，修改和删除表，以及添加，修改和删除表中的列。DDL（数据操作语言）学习当我们需要对MySQL数据库中的数据进行操作时，我们可以使用数据操作语言（DML）。DML包括SELECT、INSERT、UPDATE和DELETE语句。在本篇文章中，我们将学习如何使用MySQL中的DML语句。SELECT语句SELECT语句用于从MySQL数据库中检索数据。它的基本语法如下：SELECT column1, column2, ... FROM table_name WHERE condition;其中，column1, column2, ...是要查询的列名，table_name是要查询的表名，condition是查询条件。例如，要查询customers表中的所有数据，可以使用以下查询：SELECT * FROM customers;WHERE用于指定查询条件。它的基本语法如下：SELECT column1, column2, ... FROM table_name WHERE condition;其中，condition是查询条件。例如，要查询customers表中姓氏为Smith的客户，可以使用以下查询：SELECT * FROM customers WHERE last_name = 'Smith';ORDER BY用于按照指定的列对查询结果进行排序。它的基本语法如下：SELECT column1, column2, ... FROM table_name ORDER BY column1 [ASC|DESC];其中，column1是要排序的列名，ASC表示升序排序，DESC表示降序排序。例如，要按照客户的姓氏对customers表进行升序排序，可以使用以下查询：SELECT * FROM customers ORDER BY last_name ASC;GROUP BY用于将查询结果按照指定的列进行分组，并对每个分组进行聚合计算。它的基本语法如下：SELECT column1, column2, ..., aggregate_function(column) FROM table_name WHERE condition GROUP BY column1, column2, ...;其中，column1, column2, ...是要分组的列名，aggregate_function(column)是要对每个分组进行的聚合计算，例如SUM(column)、AVG(column)、COUNT(column)等。例如，要按照客户的国家对orders表进行分组，并计算每个国家的订单总数，可以使用以下查询：SELECT country, COUNT(*) as total_orders FROM orders GROUP BY country;这个查询将orders表按照国家进行分组，并对每个分组计算订单总数。查询结果将包含每个国家的名称和订单总数。需要注意的是，GROUP BY语句必须放在WHERE语句之后，而聚合函数必须放在SELECT语句中。在分组时，只能使用SELECT语句中指定的列和聚合函数，而不能使用其他列。INSERT语句INSERT INTO用于向数据库中插入新数据。它的基本语法如下：INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);其中，table_name是要插入数据的表名，column1, column2, ...是要插入数据的列名，value1, value2, ...是要插入的数据值。例如，要向customers表中插入一条新的客户数据，可以使用以下查询：INSERT INTO customers (first_name, last_name, email) VALUES ('John', 'Doe', 'john.doe@example.com');UPDATE语句UPDATE用于更新数据库中的数据。它的基本语法如下：UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;其中，table_name是要更新数据的表名，column1 = value1, column2 = value2, ...是要更新的列和值，condition是更新条件。例如，要将customers表中姓氏为Smith的客户的邮箱地址更新为new.email@example.com，可以使用以下查询：UPDATE customers SET email = 'new.email@example.com' WHERE last_name = 'Smith';DELETE语句DELETE用于从数据库中删除数据。它的基本语法如下：DELETE FROM table_name WHERE condition;其中，table_name是要删除数据的表名，condition是删除条件。例如，要从customers表中删除姓氏为Doe的客户，可以使用以下查询：DELETE FROM customers WHERE last_name = 'Doe';联表查询在MySQL中，JOIN操作是将两个或多个表中的数据组合在一起的一种方法。JOIN操作可以帮助我们从多个表中检索数据，并将它们组合在一起以便更好地分析和理解数据。MySQL中有四种不同类型的JOIN操作：LEFT JOIN、RIGHT JOIN、INNER JOIN和FULL JOIN。下面我们将逐一介绍它们的用法和区别。INNER JOININNER JOIN操作返回两个表中都存在的行。如果一个表中没有与另一个表中的行匹配的行，则不会返回任何数据。下面是一个INNER JOIN操作的示例：SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id;在这个例子中，我们将table1和table2两个表连接起来。我们使用ON关键字指定了连接条件，即table1.id = table2.id。这意味着我们将根据这个条件将两个表中的数据进行匹配。LEFT JOINLEFT JOIN操作返回左表中的所有行，以及右表中与左表中的行匹配的行。如果右表中没有与左表中的行匹配的行，则返回NULL值。下面是一个LEFT JOIN操作的示例：SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id;在这个例子中，我们将table1和table2两个表连接起来。我们使用ON关键字指定了连接条件，即table1.id= table2.id。这意味着我们将根据这个条件将两个表中的数据进行匹配。RIGHT JOINRIGHT JOIN操作与LEFT JOIN操作类似，但是它返回右表中的所有行，以及左表中与右表中的行匹配的行。如果左表中没有与右表中的行匹配的行，则返回NULL值。下面是一个RIGHT JOIN操作的示例：SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.id;在这个例子中，我们将table1和table2两个表连接起来。我们使用ON关键字指定了连接条件，table1.id= table2.id。这意味着我们将根据这个条件将两个表中的数据进行匹配。FULL JOINFULL JOIN操作返回两个表中的所有行。如果一个表中没有与另一个表中的行匹配的行，则返回NULL值。下面是一个FULL JOIN操作的示例：SELECT * FROM table1 FULL JOIN table2 ON table1.id = table2.id;在这个例子中，我们将table1和table2两个表连接起来。我们使用ON关键字指定了连接条件，table1.id = table2.id。这意味着我们将根据这个条件将两个表中的数据进行匹配MySQL中的子查询在MySQL中，子查询是一种查询语句，它嵌套在另一个查询语句中。子查询可以帮助我们从一个表中检索数据，并将其用作另一个查询的条件。MySQL中的子查询可以嵌套多层，每个子查询都可以返回一个结果集，这个结果集可以用作另一个查询的条件。下面我们将逐一介绍MySQL中子查询的用法和示例。子查询的基本语法子查询的基本语法如下：SELECT column1, column2, ... FROM table1 WHERE column_name operator (SELECT column_name FROM table_name WHERE condition);在这个语法中，我们使用了一个子查询，它嵌套在WHERE子句中。子查询返回一个结果集，这个结果集将用作WHERE子句中的条件。子查询的示例下面是一个使用子查询的示例：SELECT * FROM orders WHERE customer_id IN (SELECT customer_id FROM customers WHERE country = 'USA');在这个示例中，我们使用了一个子查询，它嵌套在WHERE子句中。子查询返回一个结果集，这个结果集包含了所有来自美国的客户的ID。这个结果集将用作WHERE子句中的条件，以过滤orders表中来自美国的客户的订单。子查询的类型MySQL中有两种类型的子查询：标量子查询和表子查询。标量子查询标量子查询返回一个单一的值，这个值可以用作另一个查询的条件。下面是一个标量子查询的示例：SELECT * FROM orders WHERE order_date > (SELECT MAX(order_date) FROM orders);在这个示例中，我们使用了一个标量子查询，它返回了orders表中最近的订单日期。这个日期将用作WHERE子句中的条件，以过滤orders表中最近的订单。表子查询表子查询返回一个结果集，这个结果集可以用作另一个查询的条件。下面是一个表子查询的示例：SELECT * FROM orders WHERE customer_id IN (SELECT customer_id FROM customers WHERE country = 'USA');在这个示例中，我们使用了一个表子查询，它返回了所有来自美国的客户的ID。这个结果集将用作WHERE子句中的条件，以过滤orders表中来自美国的客户的订单。MySQL常用函数MySQL是一种常用的关系型数据库管理系统，它提供了许多内置函数来处理和操作数据，包括字符串函数、日期和时间函数、数学函数和聚合函数。字符串函数CONCATCONCAT函数用于将两个或多个字符串连接在一起。它的语法如下：CONCAT(string1, string2, ...)例如，要将名字和姓氏连接在一起，可以使用以下查询：SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM customers;SUBSTRINGSUBSTRING函数用于从字符串中提取子字符串。它的语法如下：SUBSTRING(string, start, length)其中，string是要提取子字符串的字符串，start是子字符串的起始位置，length是子字符串的长度。例如，要从字符串中提取前5个字符，可以使用以下查询：SELECT SUBSTRING('Hello, world!', 1, 5);REPLACEREPLACE函数用于替换字符串中的子字符串。它的语法如下：REPLACE(string, from_string, to_string)其中，string是要替换子字符串的字符串，from_string是要替换的子字符串，to_string是要替换成的字符串。例如，要将字符串中的所有空格替换为下划线，可以使用以下查询：SELECT REPLACE('Hello, world!', ' ', '_');日期和时间函数NOWNOW函数用于返回当前日期和时间。它的语法如下：NOW()例如，要获取当前日期和时间，可以使用以下查询：SELECT NOW();DATE_FORMATDATE_FORMAT函数用于将日期和时间格式化为指定的字符串。它的语法如下：DATE_FORMAT(date, format)其中，date是要格式化的日期和时间，format是要格式化成的字符串。例如，要将日期格式化为年-月-日的形式，可以使用以下查询：SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');数学函数ABSABS函数用于返回一个数的绝对值。它的语法如下：ABS(number)例如，要获取-10的绝对值，可以使用以下查询：SELECT ABS(-10);ROUNDROUND函数用于将一个数四舍五入到指定的小数位数。它的语法如下：ROUND(number, decimals)其中，number是要四舍五入的数，decimals是要保留的小数位数。例如，要将3.14159四舍五入到两位小数，可以使用以下查询：SELECT ROUND(3.14159, 2);聚合函数COUNTCOUNT函数用于计算指定列中的行数。它的语法如下：COUNT(column)例如，要计算customers表中的行数，可以使用以下查询：SELECT COUNT(*) FROM customers;SUMSUM函数用于计算指定列中的数值总和。它的语法如下：SUM(column)例如，要计算orders表中的总销售额，可以使用以下查询：SELECT SUM(total_amount) FROM orders;AVGAVG函数用于计算指定列中的平均值。它的语法如下：AVG(column)例如，要计算orders表中的平均销售额，可以使用以下查询：SELECT AVG(total_amount) FROM orders;总结本文整理了一些MySQL入门的知识来帮助大家快速入门和使用MySQL，如果大家有兴深入学习可以阅读MySQL的官方文档
MySQL-5.7.22-winx64安装准备下载包文末有下载链接解压解压到目标路径: 比如我这里是D:\Program Files\mysql-5.7.22-winx64设置环境变量设置到MySQL安装路径的bin下，例如我的环境变量为D:\Program Files\mysql-5.7.22-winx64\bin计算机右键——属性——高级系统设置——环境变量——系统变量——pathmy.ini新建my.ini文件，5.7版本没有该文件需要自己新建，内容如下，注意要修改自己的文件地址[mysqld] port = 3306 basedir=D:/Program Files/mysql-5.7.22-winx64 datadir=D:/Program Files/mysql-5.7.22-winx64/data max_connections=200 character-set-server=utf8 default-storage-engine=INNODB sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [mysql] default-character-set=utf8将my.ini文件放到MySQL安装目录下，例如我的是D:/Program Files/mysql-5.7.22-winx64安装cmd打开命令窗口，切换到MySQL目录下。![外链图片转存失败(img-v0hfMWgO-1563859787011)(https://raw.githubusercontent.com/kevinlu98/cloudimg/master/data/2019072313031704.png)]执行mysqld -install命令进行安装(若安装正常则跳过)- 报错，原因 Windows缺少Visual C++ 2013 库，需要安装Visual C++ 2013 库 下载地址: [点此下载](https://www.microsoft.com/zh-CN/download/details.aspx?id=40784) ![https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20210509/9db21ab5aaf648fa83dc767e13912a6c.png](https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20210509/9db21ab5aaf648fa83dc767e13912a6c.png) 重新执行 mysqld -install权限不够以管理员打开cmd重新执行重新执行 mysqld -install出现Service successfully installed表示安装成功设置用户执行mysqld --initialize-insecure --user=mysql生成data目录并创建root用户启动MySQL: net start mysql登录MySQL执行 mysql -u root -p 密码为空，直接回车修改密码:执行 mysql> set password for 用户名@localhost = password('新密码'); 例如: set password for root@localhost=password('root');至此，MySQL5.7Windows下安装完成！