MySQL入门教程
快速入门操作
本教程将介绍 MySQL 数据库管理系统的几个重要方面:用户管理、库管理、表操作、数据操作和查询。通过本教程,您将学习如何执行常见的数据库管理任务。
1. 用户管理
MySQL 用户管理包括创建新用户、授予用户权限、修改用户密码和删除用户等操作。
1.1 创建新用户
要创建新用户,可以使用 CREATE USER
语句:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
例如:
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'mypassword';
1.2 授予用户权限
创建用户后,需要授予其相应的权限。可以使用 GRANT
语句授予用户权限:
GRANT privileges ON database.table TO 'username'@'localhost';
例如,授予用户 newuser
对 mydb
数据库的所有权限:
GRANT ALL PRIVILEGES ON mydb.* TO 'newuser'@'localhost';
1.3 修改用户密码
可以使用 ALTER USER
语句修改用户密码:
ALTER USER 'username'@'localhost' IDENTIFIED BY 'newpassword';
例如:
ALTER USER 'newuser'@'localhost' IDENTIFIED BY 'newpassword';
1.4 删除用户
要删除用户,可以使用 DROP USER
语句:
DROP USER 'username'@'localhost';
例如:
DROP USER 'newuser'@'localhost';
2. 库管理
库管理包括创建数据库、选择数据库、备份数据库和删除数据库等操作。
2.1 创建数据库
要创建新数据库,可以使用 CREATE DATABASE
语句:
CREATE DATABASE database_name;
例如:
CREATE DATABASE mydb;
2.2 选择数据库
要选择要使用的数据库,可以使用 USE
语句:
USE database_name;
例如:
USE mydb;
2.3 备份数据库
可以使用 mysqldump
工具备份数据库:
mysqldump -u username -p database_name > backup_file.sql
例如:
mysqldump -u root -p mydb > mydb_backup.sql
2.4 删除数据库
要删除数据库,可以使用 DROP DATABASE
语句:
DROP DATABASE database_name;
例如:
DROP DATABASE mydb;
3. 表操作
表操作包括创建表、修改表结构和删除表等操作。
3.1 创建表
要创建新表,可以使用 CREATE TABLE
语句:
CREATE TABLE table_name (
column1_name column1_type,
column2_name column2_type,
...
);
例如,创建一个名为 users
的表:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50),
email VARCHAR(100)
);
3.2 修改表结构
可以使用 ALTER TABLE
语句修改表结构,例如添加、删除或修改列。
3.2.1 添加列
ALTER TABLE table_name ADD column_name column_type;
例如:
ALTER TABLE users ADD age INT;
3.2.2 删除列
ALTER TABLE table_name DROP COLUMN column_name;
例如:
ALTER TABLE users DROP COLUMN age;
3.2.3 修改列
ALTER TABLE table_name MODIFY COLUMN column_name new_column_type;
例如:
ALTER TABLE users MODIFY COLUMN email VARCHAR(200);
3.3 删除表
要删除表,可以使用 DROP TABLE
语句:
DROP TABLE table_name;
例如:
DROP TABLE users;
4. 数据操作
数据操作包括插入、删除、修改和查询数据等操作。
4.1 插入数据
可以使用 INSERT INTO
语句向表中插入数据:
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
例如,向 users
表中插入数据:
INSERT INTO users (username, email) VALUES ('user1', '[email protected]');
4.2 删除数据
可以使用 DELETE FROM
语句从表中删除数据:
DELETE FROM table_name WHERE condition;
例如,从 users
表中删除 id
为 1 的用户:
DELETE FROM users WHERE id = 1;
4.3 修改数据
可以使用 UPDATE
语句修改表中的数据:
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
例如,修改 users
表中 id
为 1 的用户的电子邮件:
UPDATE users SET email = '[email protected]' WHERE id = 1;
4.4 查询数据
可以使用 SELECT
语句从表中查询数据:
SELECT column1, column2, ... FROM table_name WHERE condition;
例如,从 users
表中查询所有用户的信息:
SELECT * FROM users;
5. 查询
查询是数据库操作中非常重要的一部分,以下是一些常见的查询操作。
5.1 基本查询
可以使用 SELECT
语句查询表中的数据:
SELECT column1, column2, ... FROM table_name;
例如,查询 users
表中的 username
和 email
列:
SELECT username, email FROM users;
5.2 条件查询
可以使用 WHERE
子句对查询进行条件过滤:
SELECT column1, column2, ... FROM table_name WHERE condition;
例如,查询 users
表中 age
大于 18 的用户:
SELECT * FROM users WHERE age > 18;
5.3 连接查询
可以使用 JOIN
子句连接多个表进行查询:
SELECT column1, column2, ... FROM table1 JOIN table2 ON table1.common_column = table2.common_column;
例如,假设有一个 orders
表,其中包含 user_id
列,可以查询 users
和 orders
表中用户及其订单信息:
SELECT users.username, orders.order_id FROM users JOIN orders ON users.id = orders.user_id;
5.4 聚合查询
可以使用聚合函数(如 COUNT
、SUM
、AVG
、MAX
、MIN
等)对数据进行聚合查询,并使用 GROUP BY
子句对结果进行分组。
SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1;
例如,查询每个用户的订单数量:
SELECT users.username, COUNT(orders.order_id) AS order_count FROM users LEFT JOIN orders ON users.id = orders.user_id GROUP BY users.id;
5.5 子查询
可以使用子查询在查询中嵌套查询:
SELECT column1, column2, ... FROM table_name WHERE column_name IN (SELECT column_name FROM another_table WHERE condition);
例如,查询在 orders
表中有订单的用户:
SELECT * FROM users WHERE id IN (SELECT user_id FROM orders);
总结
本教程介绍了 MySQL 数据库管理系统的用户管理、库管理、表操作、数据操作和查询等方面的基本操作。通过这些操作,您可以创建和管理数据库、表,并对数据进行增删改查等操作。希望本教程对您学习 MySQL 数据库管理有所帮助。
脚本实现
-- MySQL 脚本实现用户管理、库管理、表操作、数据操作和查询
-- 1. 创建用户
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
-- 2. 创建数据库
CREATE DATABASE IF NOT EXISTS mydb;
-- 3. 授权用户对数据库的权限
GRANT ALL PRIVILEGES ON mydb.* TO 'newuser'@'localhost';
-- 4. 刷新权限
FLUSH PRIVILEGES;
-- 5. 使用数据库
USE mydb;
-- 6. 创建表
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50),
email VARCHAR(100),
age INT
);
CREATE TABLE IF NOT EXISTS orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
order_date DATE
);
-- 7. 插入数据
INSERT INTO users (username, email, age) VALUES ('user1', '[email protected]', 20);
INSERT INTO users (username, email, age) VALUES ('user2', '[email protected]', 25);
INSERT INTO orders (user_id, order_date) VALUES (1, '2023-10-01');
INSERT INTO orders (user_id, order_date) VALUES (1, '2023-10-02');
INSERT INTO orders (user_id, order_date) VALUES (2, '2023-10-03');
-- 8. 数据操作
-- 删除用户2的数据
DELETE FROM users WHERE id = 2;
-- 修改用户1的 email
UPDATE users SET email = '[email protected]' WHERE id = 1;
-- 9. 查询数据
-- 基本查询
SELECT * FROM users;
-- 条件查询
SELECT * FROM users WHERE age > 18;
-- 连接查询
SELECT users.username, orders.order_id FROM users JOIN orders ON users.id = orders.user_id;
-- 聚合查询
SELECT users.username, COUNT(orders.order_id) AS order_count FROM users LEFT JOIN orders ON users.id = orders.user_id GROUP BY users.id;
-- 子查询
SELECT * FROM users WHERE id IN (SELECT user_id FROM orders);
-- 10. 备份数据库(需要在 shell 中执行)
-- mysqldump -u root -p mydb > mydb_backup.sql
-- 11. 删除表
DROP TABLE IF EXISTS users;
DROP TABLE IF EXISTS orders;
-- 12. 删除数据库
DROP DATABASE IF EXISTS mydb;
-- 13. 删除用户
DROP USER IF EXISTS 'newuser'@'localhost';
支持字段
MySQL支持多种不同类型的字段,以下是一些常见的字段类型:
数值类型
整数类型
- TINYINT:占用1个字节,有符号范围是-128到127,无符号范围是0到255,常用于存储小型整数值,如布尔值(0或1)或枚举类型的小范围数值。
- SMALLINT:占用2个字节,有符号范围是-32768到32767,无符号范围是0到65535,可用于存储一些不需要太大范围的整数,如较小的计数器等。
- MEDIUMINT:占用3个字节,有符号范围是-8388608到8388607,无符号范围是0到16777215,适用于中等大小的整数需求。
- INT 或 INTEGER:占用4个字节,有符号范围是-2147483648到2147483647,无符号范围是0到4294967295,是最常用的整数类型之一,用于存储一般的整数数据,如用户ID、订单数量等。
- BIGINT:占用8个字节,有符号范围是-9223372036854775808到9223372036854775807,无符号范围是0到18446744073709551615,用于存储非常大的整数,如大型数据集的唯一标识等。
小数类型
- FLOAT:单精度浮点数,占用4个字节,可表示大约7位有效数字的小数,常用于对精度要求不是特别高的浮点数存储,如一些近似的测量值等。
- DOUBLE:双精度浮点数,占用8个字节,可表示大约15位有效数字的小数,能提供比FLOAT更高的精度,适用于需要更精确的小数计算和存储的场景,如科学计算中的数据等。
- DECIMAL 或 NUMERIC:用于存储精确的小数,可指定精度和标度,例如
DECIMAL(10,2)
表示总共10位数字,其中小数部分占2位,常用于存储货币金额等对精度要求高的数据。
字符串类型
定长字符串类型
- CHAR:定长字符串类型,在存储时会自动在右侧填充空格以达到指定的长度。例如
CHAR(10)
,如果存储的字符串不足10个字符,会在右侧补空格。它的优点是存储和检索速度快,适用于长度固定的数据,如身份证号码、电话号码等。
- CHAR:定长字符串类型,在存储时会自动在右侧填充空格以达到指定的长度。例如
变长字符串类型
- VARCHAR:变长字符串类型,只存储实际使用的字符长度,不会自动填充空格。例如
VARCHAR(50)
,可以存储0到50个字符的字符串,节省存储空间,常用于存储长度不固定的文本数据,如用户名、文章标题等。 - TEXT:用于存储大量的文本数据,如文章内容、评论等。有
TINYTEXT
、TEXT
、MEDIUMTEXT
和LONGTEXT
四种,它们的存储容量不同,可根据实际需求选择。 - BLOB:用于存储二进制数据,如图片、音频、视频等文件的二进制流。也有
TINYBLOB
、BLOB
、MEDIUMBLOB
和LONGBLOB
四种,不同类型的存储容量不同。
- VARCHAR:变长字符串类型,只存储实际使用的字符长度,不会自动填充空格。例如
日期和时间类型
- DATE:用于存储日期,格式为
YYYY-MM-DD
,如2024-12-08
,可用于记录出生日期、订单日期等具体日期信息。 - TIME:用于存储时间,格式为
HH:MM:SS
,如12:30:00
,可用于记录事件发生的时间点等。 - DATETIME:用于存储日期和时间,格式为
YYYY-MM-DD HH:MM:SS
,如2024-12-08 12:30:00
,能更精确地记录某个事件发生的具体时刻。 - TIMESTAMP:也用于存储日期和时间,与
DATETIME
类似,但它的取值范围更窄,且在插入或更新数据时会自动更新为当前时间戳,常用于记录数据的最后修改时间等。
其他类型
- ENUM:枚举类型,允许在定义字段时指定一组固定的值,字段的值只能是这组值中的一个。例如
ENUM('男','女')
,用于存储性别等具有固定取值范围的数据。 - SET:集合类型,与枚举类型类似,但可以存储多个值,最多可以包含64个不同的值。例如
SET('阅读','运动','音乐')
,用户可以有多个兴趣爱好,每个值在集合中只能出现一次。
字段 Demo
创建一个名为demo_table
的示例表的 SQL 代码,其中包含了 MySQL 常见的字段类型,并对每个字段类型添加了简要说明:
-- 创建名为demo_table的表
CREATE TABLE demo_table (
-- 整数类型
tinyint_id TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '无符号的TINYINT类型,用于存储较小的正整数,设置为自增主键,常用于简单的序号标识,如小型分类的编号等',
smallint_num SMALLINT COMMENT 'SMALLINT类型,可存储范围适中的整数,例如可以用于记录某个活动的参与人数(如果人数规模不大)',
mediumint_count MEDIUMINT COMMENT 'MEDIUMINT类型,能容纳相对更大一点的整数,像某些店铺的商品库存数量(如果库存数量不是特别巨大)',
int_value INT COMMENT 'INT类型,是常用的整数类型,可用于存储如用户的积分、订单的编号等各种整数数值',
bigint_big_num BIGINT COMMENT 'BIGINT类型,用于存储极大的整数数值,比如大型系统中的全局唯一流水号等',
-- 小数类型
float_price FLOAT(10, 2) COMMENT 'FLOAT类型,单精度浮点数,这里指定精度为总共10位,小数部分2位,常用于存储对精度要求不是极高的小数数值,比如商品价格(允许一定的近似)',
double_precision DOUBLE(15, 4) COMMENT 'DOUBLE类型,双精度浮点数,精度更高,此处设定总共15位,小数部分4位,适合在科学计算等对精度要求稍高些的场景中存储小数数值',
decimal_amount DECIMAL(20, 5) COMMENT 'DECIMAL类型,用于存储精确的小数,此处设置总位数20位,小数占5位,常用于金融相关数据,如银行账户余额,确保金额计算的准确性',
-- 字符串类型
char_fixed_str CHAR(10) COMMENT 'CHAR类型,定长字符串,固定占用指定长度的存储空间,会自动用空格补齐不足长度部分,适合存储像电话号码、身份证号码这类长度固定的数据',
varchar_variable_str VARCHAR(50) COMMENT 'VARCHAR类型,变长字符串,只占用实际字符长度的空间,常用于存储长度不固定的文本,比如用户名、文章标题等',
text_content TEXT COMMENT 'TEXT类型,用于存储大量的文本内容,像博客文章正文、用户评论等较长的文本信息',
blob_binary_data BLOB COMMENT 'BLOB类型,用来存储二进制数据,例如图片、音频、视频等文件的二进制流数据',
-- 日期和时间类型
date_birthday DATE COMMENT 'DATE类型,用于记录日期,格式为YYYY-MM-DD,可用来存储出生日期、活动举办日期等具体的日期信息',
time_event_time TIME COMMENT 'TIME类型,用于记录时间,格式为HH:MM:SS,可用于记录某个活动开始或结束的具体时间点',
datetime_record_time DATETIME COMMENT 'DATETIME类型,能同时记录日期和时间,格式为YYYY-MM-DD HH:MM:SS,常用于记录某个事件发生的准确时刻,比如订单创建时间等',
timestamp_last_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'TIMESTAMP类型,同样记录日期和时间,其特点是在插入或更新数据时能自动更新为当前时间戳,常用来记录数据的最后修改时间等',
-- 其他类型
enum_gender ENUM('男', '女', '未知') COMMENT 'ENUM类型,枚举类型,字段值只能从给定的几个固定值中选择,此处用于表示性别等有明确固定取值范围的数据',
set_hobbies SET('阅读', '运动', '音乐', '绘画') COMMENT 'SET类型,集合类型,可以存储给定值集合中的多个值,比如用来记录个人的兴趣爱好,每个值在集合中只能出现一次'
);