快速入门操作

本教程将介绍 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';

例如,授予用户 newusermydb 数据库的所有权限:

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 表中的 usernameemail 列:

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 列,可以查询 usersorders 表中用户及其订单信息:

SELECT users.username, orders.order_id FROM users JOIN orders ON users.id = orders.user_id;

5.4 聚合查询

可以使用聚合函数(如 COUNTSUMAVGMAXMIN 等)对数据进行聚合查询,并使用 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,适用于中等大小的整数需求。
    • INTINTEGER:占用4个字节,有符号范围是-2147483648到2147483647,无符号范围是0到4294967295,是最常用的整数类型之一,用于存储一般的整数数据,如用户ID、订单数量等。
    • BIGINT:占用8个字节,有符号范围是-9223372036854775808到9223372036854775807,无符号范围是0到18446744073709551615,用于存储非常大的整数,如大型数据集的唯一标识等。
  • 小数类型

    • FLOAT:单精度浮点数,占用4个字节,可表示大约7位有效数字的小数,常用于对精度要求不是特别高的浮点数存储,如一些近似的测量值等。
    • DOUBLE:双精度浮点数,占用8个字节,可表示大约15位有效数字的小数,能提供比FLOAT更高的精度,适用于需要更精确的小数计算和存储的场景,如科学计算中的数据等。
    • DECIMALNUMERIC:用于存储精确的小数,可指定精度和标度,例如DECIMAL(10,2)表示总共10位数字,其中小数部分占2位,常用于存储货币金额等对精度要求高的数据。

字符串类型

  • 定长字符串类型

    • CHAR:定长字符串类型,在存储时会自动在右侧填充空格以达到指定的长度。例如CHAR(10),如果存储的字符串不足10个字符,会在右侧补空格。它的优点是存储和检索速度快,适用于长度固定的数据,如身份证号码、电话号码等。
  • 变长字符串类型

    • VARCHAR:变长字符串类型,只存储实际使用的字符长度,不会自动填充空格。例如VARCHAR(50),可以存储0到50个字符的字符串,节省存储空间,常用于存储长度不固定的文本数据,如用户名、文章标题等。
    • TEXT:用于存储大量的文本数据,如文章内容、评论等。有TINYTEXTTEXTMEDIUMTEXTLONGTEXT四种,它们的存储容量不同,可根据实际需求选择。
    • BLOB:用于存储二进制数据,如图片、音频、视频等文件的二进制流。也有TINYBLOBBLOBMEDIUMBLOBLONGBLOB四种,不同类型的存储容量不同。

日期和时间类型

  • 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类型,集合类型,可以存储给定值集合中的多个值,比如用来记录个人的兴趣爱好,每个值在集合中只能出现一次'
);

标签: SQL, MySQL

添加新评论