MySQL快速起步
Docker安装MySQL
Docker是一个开源的容器化平台,可以方便地搭建各种环境,包括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 JOIN
INNER JOIN操作返回两个表中都存在的行。如果一个表中没有与另一个表中的行匹配的行,则不会返回任何数据。
下面是一个INNER JOIN操作的示例:
SELECT *
FROM table1
INNER JOIN table2
ON table1.id = table2.id;
在这个例子中,我们将table1和table2两个表连接起来。我们使用ON关键字指定了连接条件,即table1.id = table2.id。这意味着我们将根据这个条件将两个表中的数据进行匹配。
LEFT JOIN
LEFT JOIN操作返回左表中的所有行,以及右表中与左表中的行匹配的行。如果右表中没有与左表中的行匹配的行,则返回NULL值。
下面是一个LEFT JOIN操作的示例:
SELECT *
FROM table1
LEFT JOIN table2
ON table1.id = table2.id;
在这个例子中,我们将table1和table2两个表连接起来。我们使用ON关键字指定了连接条件,即table1.id= table2.id。这意味着我们将根据这个条件将两个表中的数据进行匹配。
RIGHT JOIN
RIGHT 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 JOIN
FULL 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是一种常用的关系型数据库管理系统,它提供了许多内置函数来处理和操作数据,包括字符串函数、日期和时间函数、数学函数和聚合函数。
字符串函数
CONCAT
CONCAT
函数用于将两个或多个字符串连接在一起。它的语法如下:
CONCAT(string1, string2, ...)
例如,要将名字和姓氏连接在一起,可以使用以下查询:
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM customers;
SUBSTRING
SUBSTRING
函数用于从字符串中提取子字符串。它的语法如下:
SUBSTRING(string, start, length)
其中,string
是要提取子字符串的字符串,start
是子字符串的起始位置,length
是子字符串的长度。
例如,要从字符串中提取前5个字符,可以使用以下查询:
SELECT SUBSTRING('Hello, world!', 1, 5);
REPLACE
REPLACE
函数用于替换字符串中的子字符串。它的语法如下:
REPLACE(string, from_string, to_string)
其中,string
是要替换子字符串的字符串,from_string
是要替换的子字符串,to_string
是要替换成的字符串。
例如,要将字符串中的所有空格替换为下划线,可以使用以下查询:
SELECT REPLACE('Hello, world!', ' ', '_');
日期和时间函数
NOW
NOW
函数用于返回当前日期和时间。它的语法如下:
NOW()
例如,要获取当前日期和时间,可以使用以下查询:
SELECT NOW();
DATE_FORMAT
DATE_FORMAT
函数用于将日期和时间格式化为指定的字符串。它的语法如下:
DATE_FORMAT(date, format)
其中,date
是要格式化的日期和时间,format
是要格式化成的字符串。
例如,要将日期格式化为年-月-日的形式,可以使用以下查询:
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');
数学函数
ABS
ABS
函数用于返回一个数的绝对值。它的语法如下:
ABS(number)
例如,要获取-10的绝对值,可以使用以下查询:
SELECT ABS(-10);
ROUND
ROUND
函数用于将一个数四舍五入到指定的小数位数。它的语法如下:
ROUND(number, decimals)
其中,number
是要四舍五入的数,decimals
是要保留的小数位数。
例如,要将3.14159四舍五入到两位小数,可以使用以下查询:
SELECT ROUND(3.14159, 2);
聚合函数
COUNT
COUNT
函数用于计算指定列中的行数。它的语法如下:
COUNT(column)
例如,要计算customers表中的行数,可以使用以下查询:
SELECT COUNT(*) FROM customers;
SUM
SUM
函数用于计算指定列中的数值总和。它的语法如下:
SUM(column)
例如,要计算orders表中的总销售额,可以使用以下查询:
SELECT SUM(total_amount) FROM orders;
AVG
AVG
函数用于计算指定列中的平均值。它的语法如下:
AVG(column)
例如,要计算orders表中的平均销售额,可以使用以下查询:
SELECT AVG(total_amount) FROM orders;
总结
本文整理了一些MySQL入门的知识来帮助大家快速入门和使用MySQL,如果大家有兴深入学习可以阅读MySQL的官方文档