【MySQL】数据库、数据表的基本操作

06-01 1079阅读

【MySQL】数据库、数据表的基本操作

个人主页:Guiat

归属专栏:MySQL

【MySQL】数据库、数据表的基本操作

文章目录

  • 1. MySQL基础命令
    • 1.1 连接MySQL
    • 1.2 基本命令概览
    • 2. 数据库操作
      • 2.1 创建数据库
      • 2.2 查看数据库
      • 2.3 选择数据库
      • 2.4 修改数据库
      • 2.5 删除数据库
      • 2.6 数据库备份与恢复
      • 3. 表操作基础
        • 3.1 创建表
        • 3.2 查看表信息
        • 3.3 创建临时表
        • 3.4 创建表的复制
        • 4. 表结构修改
          • 4.1 添加列
          • 4.2 修改列
          • 4.3 删除列
          • 4.4 重命名表
          • 4.5 删除表
          • 5. 约束与键
            • 5.1 主键约束
            • 5.2 外键约束
            • 5.3 唯一约束
            • 5.4 检查约束
            • 5.5 默认值约束
            • 6. 索引操作
              • 6.1 创建索引
              • 6.2 查看索引
              • 6.3 删除索引
              • 7. 表数据操作
                • 7.1 插入数据
                • 7.2 更新数据
                • 7.3 删除数据
                • 7.4 查询数据
                • 8. 高级表操作
                  • 8.1 表分区
                  • 8.2 视图操作
                  • 8.3 存储过程
                  • 9. 事务控制
                    • 9.1 事务基本操作
                    • 9.2 设置保存点
                    • 9.3 事务隔离级别
                    • 10. 实际应用案例
                      • 10.1 电子商务数据库设计
                      • 10.2 数据库维护操作
                      • 10.3 常见查询和操作示例

                        正文

                        1. MySQL基础命令

                        MySQL是一种流行的关系型数据库管理系统,掌握基本的数据库和表操作命令是使用MySQL的基础。

                        1.1 连接MySQL

                        # 连接本地MySQL服务器
                        mysql -u username -p
                        # 连接远程MySQL服务器
                        mysql -h hostname -u username -p -P port
                        

                        1.2 基本命令概览

                        -- 显示MySQL版本
                        SELECT VERSION();
                        -- 显示当前日期时间
                        SELECT NOW();
                        -- 显示当前用户
                        SELECT USER();
                        -- 显示可用的命令
                        HELP;
                        -- 退出MySQL客户端
                        EXIT;
                        -- 或
                        QUIT;
                        

                        2. 数据库操作

                        2.1 创建数据库

                        -- 基本语法
                        CREATE DATABASE database_name;
                        -- 指定字符集和排序规则
                        CREATE DATABASE database_name 
                        CHARACTER SET utf8mb4 
                        COLLATE utf8mb4_unicode_ci;
                        -- 仅当数据库不存在时创建
                        CREATE DATABASE IF NOT EXISTS database_name;
                        

                        2.2 查看数据库

                        -- 显示所有数据库
                        SHOW DATABASES;
                        -- 显示创建数据库的SQL语句
                        SHOW CREATE DATABASE database_name;
                        -- 显示数据库状态
                        SHOW STATUS;
                        

                        2.3 选择数据库

                        -- 切换到指定数据库
                        USE database_name;
                        -- 查看当前选中的数据库
                        SELECT DATABASE();
                        

                        2.4 修改数据库

                        -- 修改数据库字符集
                        ALTER DATABASE database_name 
                        CHARACTER SET = utf8mb4;
                        -- 修改数据库排序规则
                        ALTER DATABASE database_name 
                        COLLATE = utf8mb4_unicode_ci;
                        

                        2.5 删除数据库

                        -- 删除数据库
                        DROP DATABASE database_name;
                        -- 仅当数据库存在时删除
                        DROP DATABASE IF EXISTS database_name;
                        

                        2.6 数据库备份与恢复

                        # 使用mysqldump备份数据库
                        mysqldump -u username -p database_name > backup_file.sql
                        # 恢复数据库
                        mysql -u username -p database_name  
                        

                        3. 表操作基础

                        3.1 创建表

                        -- 基本表创建语法
                        CREATE TABLE table_name (
                            column1 datatype constraints,
                            column2 datatype constraints,
                            ...
                            columnN datatype constraints
                        );
                        -- 示例:创建学生表
                        CREATE TABLE students (
                            student_id INT PRIMARY KEY AUTO_INCREMENT,
                            first_name VARCHAR(50) NOT NULL,
                            last_name VARCHAR(50) NOT NULL,
                            email VARCHAR(100) UNIQUE,
                            birth_date DATE,
                            enrollment_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                            active BOOLEAN DEFAULT TRUE
                        );
                        

                        3.2 查看表信息

                        -- 显示当前数据库的所有表
                        SHOW TABLES;
                        -- 显示表结构
                        DESCRIBE table_name;
                        -- 或
                        DESC table_name;
                        -- 显示创建表的SQL语句
                        SHOW CREATE TABLE table_name;
                        -- 显示表状态
                        SHOW TABLE STATUS LIKE 'table_name';
                        

                        3.3 创建临时表

                        临时表在会话结束时自动删除:

                        -- 创建临时表
                        CREATE TEMPORARY TABLE temp_table (
                            id INT,
                            name VARCHAR(50)
                        );
                        

                        3.4 创建表的复制

                        -- 复制表结构
                        CREATE TABLE new_table LIKE original_table;
                        -- 复制表结构和数据
                        CREATE TABLE new_table AS SELECT * FROM original_table;
                        -- 复制表结构和部分数据
                        CREATE TABLE new_table AS 
                        SELECT * FROM original_table WHERE condition;
                        

                        4. 表结构修改

                        4.1 添加列

                        -- 添加新列
                        ALTER TABLE table_name 
                        ADD COLUMN column_name datatype constraints;
                        -- 在特定位置添加列
                        ALTER TABLE table_name 
                        ADD COLUMN column_name datatype constraints 
                        AFTER existing_column;
                        -- 添加列到表的第一个位置
                        ALTER TABLE table_name 
                        ADD COLUMN column_name datatype constraints 
                        FIRST;
                        -- 添加多列
                        ALTER TABLE table_name
                        ADD COLUMN column1 datatype constraints,
                        ADD COLUMN column2 datatype constraints;
                        

                        4.2 修改列

                        -- 修改列的数据类型
                        ALTER TABLE table_name 
                        MODIFY COLUMN column_name new_datatype;
                        -- 修改列名和数据类型
                        ALTER TABLE table_name 
                        CHANGE COLUMN old_column_name new_column_name new_datatype constraints;
                        -- 修改列的默认值
                        ALTER TABLE table_name 
                        ALTER COLUMN column_name SET DEFAULT default_value;
                        -- 删除列的默认值
                        ALTER TABLE table_name 
                        ALTER COLUMN column_name DROP DEFAULT;
                        

                        4.3 删除列

                        -- 删除单列
                        ALTER TABLE table_name 
                        DROP COLUMN column_name;
                        -- 删除多列
                        ALTER TABLE table_name 
                        DROP COLUMN column1,
                        DROP COLUMN column2;
                        

                        4.4 重命名表

                        -- 重命名表
                        RENAME TABLE old_table_name TO new_table_name;
                        -- 或使用ALTER TABLE
                        ALTER TABLE old_table_name 
                        RENAME TO new_table_name;
                        

                        4.5 删除表

                        -- 删除表
                        DROP TABLE table_name;
                        -- 仅当表存在时删除
                        DROP TABLE IF EXISTS table_name;
                        -- 删除多个表
                        DROP TABLE table1, table2, table3;
                        

                        5. 约束与键

                        5.1 主键约束

                        -- 创建表时定义主键
                        CREATE TABLE products (
                            product_id INT PRIMARY KEY,
                            product_name VARCHAR(100) NOT NULL
                        );
                        -- 复合主键
                        CREATE TABLE order_items (
                            order_id INT,
                            product_id INT,
                            quantity INT NOT NULL,
                            PRIMARY KEY (order_id, product_id)
                        );
                        -- 为已有的表添加主键
                        ALTER TABLE table_name 
                        ADD PRIMARY KEY (column_name);
                        -- 删除主键
                        ALTER TABLE table_name 
                        DROP PRIMARY KEY;
                        

                        5.2 外键约束

                        -- 创建表时定义外键
                        CREATE TABLE orders (
                            order_id INT PRIMARY KEY,
                            customer_id INT,
                            order_date DATE,
                            FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
                        );
                        -- 为已有的表添加外键
                        ALTER TABLE orders
                        ADD CONSTRAINT fk_customer
                        FOREIGN KEY (customer_id) REFERENCES customers(customer_id);
                        -- 添加带有删除和更新行为的外键
                        ALTER TABLE orders
                        ADD CONSTRAINT fk_customer
                        FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
                        ON DELETE CASCADE
                        ON UPDATE CASCADE;
                        -- 删除外键约束
                        ALTER TABLE orders
                        DROP FOREIGN KEY fk_customer;
                        

                        5.3 唯一约束

                        -- 创建表时定义唯一约束
                        CREATE TABLE users (
                            user_id INT PRIMARY KEY,
                            username VARCHAR(50) UNIQUE,
                            email VARCHAR(100) UNIQUE
                        );
                        -- 为已有的表添加唯一约束
                        ALTER TABLE users
                        ADD CONSTRAINT uq_email UNIQUE (email);
                        -- 删除唯一约束
                        ALTER TABLE users
                        DROP INDEX uq_email;
                        

                        5.4 检查约束

                        MySQL 8.0及以上版本支持CHECK约束:

                        -- 创建表时定义检查约束
                        CREATE TABLE employees (
                            employee_id INT PRIMARY KEY,
                            name VARCHAR(100),
                            salary DECIMAL(10,2) CHECK (salary > 0),
                            age INT CHECK (age >= 18)
                        );
                        -- 为已有的表添加检查约束
                        ALTER TABLE employees
                        ADD CONSTRAINT chk_salary CHECK (salary > 0);
                        -- 删除检查约束
                        ALTER TABLE employees
                        DROP CHECK chk_salary;
                        

                        5.5 默认值约束

                        -- 创建表时定义默认值
                        CREATE TABLE articles (
                            article_id INT PRIMARY KEY,
                            title VARCHAR(200) NOT NULL,
                            content TEXT,
                            published BOOLEAN DEFAULT FALSE,
                            created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                        );
                        -- 为已有的列添加默认值
                        ALTER TABLE articles
                        ALTER COLUMN published SET DEFAULT TRUE;
                        -- 删除默认值
                        ALTER TABLE articles
                        ALTER COLUMN published DROP DEFAULT;
                        

                        6. 索引操作

                        6.1 创建索引

                        -- 创建普通索引
                        CREATE INDEX idx_name ON table_name (column_name);
                        -- 创建唯一索引
                        CREATE UNIQUE INDEX idx_email ON users (email);
                        -- 创建复合索引
                        CREATE INDEX idx_name_email ON users (name, email);
                        -- 创建前缀索引
                        CREATE INDEX idx_title ON articles (title(50));
                        -- 在表创建时定义索引
                        CREATE TABLE customers (
                            id INT PRIMARY KEY,
                            name VARCHAR(100),
                            email VARCHAR(100),
                            INDEX idx_name (name)
                        );
                        -- 使用ALTER TABLE添加索引
                        ALTER TABLE customers
                        ADD INDEX idx_email (email);
                        

                        6.2 查看索引

                        -- 查看表的所有索引
                        SHOW INDEX FROM table_name;
                        

                        6.3 删除索引

                        -- 删除索引
                        DROP INDEX index_name ON table_name;
                        -- 使用ALTER TABLE删除索引
                        ALTER TABLE table_name
                        DROP INDEX index_name;
                        

                        7. 表数据操作

                        7.1 插入数据

                        -- 插入单行数据
                        INSERT INTO table_name (column1, column2, ...) 
                        VALUES (value1, value2, ...);
                        -- 插入多行数据
                        INSERT INTO table_name (column1, column2, ...) 
                        VALUES 
                            (value1, value2, ...),
                            (value1, value2, ...),
                            (value1, value2, ...);
                        -- 插入所有列的数据
                        INSERT INTO table_name 
                        VALUES (value1, value2, ...);
                        -- 从另一个表插入数据
                        INSERT INTO target_table (column1, column2, ...)
                        SELECT column1, column2, ... 
                        FROM source_table
                        WHERE condition;
                        

                        7.2 更新数据

                        -- 更新所有行
                        UPDATE table_name
                        SET column1 = value1, column2 = value2
                        WHERE condition;
                        -- 使用子查询更新数据
                        UPDATE table_name
                        SET column1 = (SELECT column2 FROM another_table WHERE condition)
                        WHERE condition;
                        -- 多表更新
                        UPDATE table1 t1
                        JOIN table2 t2 ON t1.id = t2.id
                        SET t1.column1 = t2.column2
                        WHERE condition;
                        

                        7.3 删除数据

                        -- 删除满足条件的行
                        DELETE FROM table_name
                        WHERE condition;
                        -- 删除所有行
                        DELETE FROM table_name;
                        -- 截断表(更快但不可回滚)
                        TRUNCATE TABLE table_name;
                        -- 多表删除
                        DELETE t1 FROM table1 t1
                        JOIN table2 t2 ON t1.id = t2.ref_id
                        WHERE condition;
                        

                        7.4 查询数据

                        -- 基本查询
                        SELECT column1, column2
                        FROM table_name
                        WHERE condition;
                        -- 查询所有列
                        SELECT * FROM table_name;
                        -- 查询唯一值
                        SELECT DISTINCT column FROM table_name;
                        -- 使用条件查询
                        SELECT * FROM table_name
                        WHERE column = value AND/OR another_column > value;
                        -- 使用排序
                        SELECT * FROM table_name
                        ORDER BY column1 ASC, column2 DESC;
                        -- 使用限制
                        SELECT * FROM table_name
                        LIMIT 10 OFFSET 20;
                        -- 分组查询
                        SELECT column1, COUNT(*) as count
                        FROM table_name
                        GROUP BY column1
                        HAVING count > 5;
                        

                        8. 高级表操作

                        8.1 表分区

                        -- 创建分区表(按范围分区)
                        CREATE TABLE sales (
                            id INT,
                            amount DECIMAL(10,2),
                            sale_date DATE
                        )
                        PARTITION BY RANGE (YEAR(sale_date)) (
                            PARTITION p0 VALUES LESS THAN (2020),
                            PARTITION p1 VALUES LESS THAN (2021),
                            PARTITION p2 VALUES LESS THAN (2022),
                            PARTITION p3 VALUES LESS THAN MAXVALUE
                        );
                        -- 查看分区信息
                        SHOW CREATE TABLE sales;
                        SELECT * FROM information_schema.PARTITIONS 
                        WHERE TABLE_NAME = 'sales';
                        

                        8.2 视图操作

                        -- 创建视图
                        CREATE VIEW view_name AS
                        SELECT column1, column2
                        FROM table_name
                        WHERE condition;
                        -- 查看视图
                        SHOW FULL TABLES WHERE TABLE_TYPE = 'VIEW';
                        -- 更新视图
                        ALTER VIEW view_name AS
                        SELECT column1, column2, column3
                        FROM table_name
                        WHERE condition;
                        -- 删除视图
                        DROP VIEW IF EXISTS view_name;
                        

                        8.3 存储过程

                        -- 创建存储过程
                        DELIMITER //
                        CREATE PROCEDURE procedure_name(IN param1 INT, OUT param2 VARCHAR(100))
                        BEGIN
                            -- 存储过程体
                            SELECT column INTO param2 FROM table WHERE id = param1;
                        END //
                        DELIMITER ;
                        -- 调用存储过程
                        CALL procedure_name(5, @result);
                        SELECT @result;
                        -- 删除存储过程
                        DROP PROCEDURE IF EXISTS procedure_name;
                        

                        9. 事务控制

                        9.1 事务基本操作

                        -- 开始事务
                        START TRANSACTION;
                        -- 执行SQL语句
                        INSERT INTO accounts (account_id, balance) VALUES (1, 1000);
                        UPDATE accounts SET balance = balance - 500 WHERE account_id = 1;
                        INSERT INTO transactions (account_id, amount) VALUES (1, -500);
                        -- 提交事务
                        COMMIT;
                        -- 或回滚事务
                        -- ROLLBACK;
                        

                        9.2 设置保存点

                        -- 开始事务
                        START TRANSACTION;
                        -- 执行操作
                        INSERT INTO table1 VALUES (1, 'value');
                        -- 设置保存点
                        SAVEPOINT point1;
                        -- 执行更多操作
                        INSERT INTO table2 VALUES (2, 'value');
                        -- 回滚到保存点
                        ROLLBACK TO SAVEPOINT point1;
                        -- 提交事务(只提交保存点之前的操作)
                        COMMIT;
                        

                        9.3 事务隔离级别

                        -- 查看当前事务隔离级别
                        SELECT @@TRANSACTION_ISOLATION;
                        -- 设置事务隔离级别
                        SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
                        SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
                        SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
                        SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
                        

                        10. 实际应用案例

                        10.1 电子商务数据库设计

                        -- 创建数据库
                        CREATE DATABASE ecommerce CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
                        USE ecommerce;
                        -- 创建客户表
                        CREATE TABLE customers (
                            customer_id INT PRIMARY KEY AUTO_INCREMENT,
                            first_name VARCHAR(50) NOT NULL,
                            last_name VARCHAR(50) NOT NULL,
                            email VARCHAR(100) NOT NULL UNIQUE,
                            password VARCHAR(255) NOT NULL,
                            phone VARCHAR(20),
                            created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                            updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
                            INDEX idx_email (email),
                            INDEX idx_name (last_name, first_name)
                        );
                        -- 创建地址表
                        CREATE TABLE addresses (
                            address_id INT PRIMARY KEY AUTO_INCREMENT,
                            customer_id INT NOT NULL,
                            address_type ENUM('billing', 'shipping') DEFAULT 'shipping',
                            address_line1 VARCHAR(100) NOT NULL,
                            address_line2 VARCHAR(100),
                            city VARCHAR(50) NOT NULL,
                            state VARCHAR(50),
                            postal_code VARCHAR(20) NOT NULL,
                            country VARCHAR(50) NOT NULL,
                            is_default BOOLEAN DEFAULT FALSE,
                            FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE CASCADE,
                            INDEX idx_customer (customer_id)
                        );
                        -- 创建类别表
                        CREATE TABLE categories (
                            category_id INT PRIMARY KEY AUTO_INCREMENT,
                            name VARCHAR(50) NOT NULL,
                            description TEXT,
                            parent_id INT,
                            FOREIGN KEY (parent_id) REFERENCES categories(category_id) ON DELETE SET NULL
                        );
                        -- 创建产品表
                        CREATE TABLE products (
                            product_id INT PRIMARY KEY AUTO_INCREMENT,
                            name VARCHAR(100) NOT NULL,
                            description TEXT,
                            price DECIMAL(10, 2) NOT NULL CHECK (price > 0),
                            stock_quantity INT NOT NULL DEFAULT 0 CHECK (stock_quantity >= 0),
                            category_id INT,
                            created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                            updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
                            FOREIGN KEY (category_id) REFERENCES categories(category_id) ON DELETE SET NULL,
                            INDEX idx_category (category_id),
                            INDEX idx_name (name)
                        );
                        -- 创建订单表
                        CREATE TABLE orders (
                            order_id INT PRIMARY KEY AUTO_INCREMENT,
                            customer_id INT NOT NULL,
                            order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                            status ENUM('pending', 'processing', 'shipped', 'delivered', 'cancelled') DEFAULT 'pending',
                            shipping_address_id INT NOT NULL,
                            billing_address_id INT NOT NULL,
                            shipping_fee DECIMAL(10, 2) DEFAULT 0.00,
                            total_amount DECIMAL(10, 2) NOT NULL,
                            payment_method ENUM('credit_card', 'paypal', 'bank_transfer'),
                            notes TEXT,
                            FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE RESTRICT,
                            FOREIGN KEY (shipping_address_id) REFERENCES addresses(address_id) ON DELETE RESTRICT,
                            FOREIGN KEY (billing_address_id) REFERENCES addresses(address_id) ON DELETE RESTRICT,
                            INDEX idx_customer (customer_id),
                            INDEX idx_date (order_date)
                        );
                        -- 创建订单明细表
                        CREATE TABLE order_items (
                            order_id INT,
                            product_id INT,
                            quantity INT NOT NULL CHECK (quantity > 0),
                            unit_price DECIMAL(10, 2) NOT NULL,
                            PRIMARY KEY (order_id, product_id),
                            FOREIGN KEY (order_id) REFERENCES orders(order_id) ON DELETE CASCADE,
                            FOREIGN KEY (product_id) REFERENCES products(product_id) ON DELETE RESTRICT
                        );
                        -- 创建产品评价表
                        CREATE TABLE reviews (
                            review_id INT PRIMARY KEY AUTO_INCREMENT,
                            product_id INT NOT NULL,
                            customer_id INT NOT NULL,
                            rating TINYINT NOT NULL CHECK (rating BETWEEN 1 AND 5),
                            comment TEXT,
                            review_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                            FOREIGN KEY (product_id) REFERENCES products(product_id) ON DELETE CASCADE,
                            FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE CASCADE,
                            UNIQUE KEY unique_review (product_id, customer_id),
                            INDEX idx_product (product_id)
                        );
                        -- 创建产品库存历史表
                        CREATE TABLE inventory_history (
                            id INT PRIMARY KEY AUTO_INCREMENT,
                            product_id INT NOT NULL,
                            quantity_change INT NOT NULL,
                            reason ENUM('purchase', 'sale', 'return', 'adjustment'),
                            reference_id INT,
                            changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                            FOREIGN KEY (product_id) REFERENCES products(product_id) ON DELETE CASCADE,
                            INDEX idx_product (product_id),
                            INDEX idx_date (changed_at)
                        );
                        -- 创建订单状态历史视图
                        CREATE VIEW order_status_history AS
                        SELECT 
                            orders.order_id,
                            customers.email,
                            orders.status,
                            orders.total_amount,
                            orders.order_date
                        FROM orders
                        JOIN customers ON orders.customer_id = customers.customer_id;
                        -- 创建存储过程:处理订单
                        DELIMITER //
                        CREATE PROCEDURE process_order(IN order_id_param INT)
                        BEGIN
                            DECLARE current_status VARCHAR(20);
                            
                            -- 获取当前订单状态
                            SELECT status INTO current_status FROM orders WHERE order_id = order_id_param;
                            
                            -- 只处理待处理订单
                            IF current_status = 'pending' THEN
                                START TRANSACTION;
                                
                                -- 更新订单状态
                                UPDATE orders SET status = 'processing' WHERE order_id = order_id_param;
                                
                                -- 更新产品库存
                                UPDATE products p
                                JOIN order_items oi ON p.product_id = oi.product_id
                                SET p.stock_quantity = p.stock_quantity - oi.quantity
                                WHERE oi.order_id = order_id_param;
                                
                                -- 记录库存变更
                                INSERT INTO inventory_history (product_id, quantity_change, reason, reference_id)
                                SELECT product_id, -quantity, 'sale', order_id_param
                                FROM order_items
                                WHERE order_id = order_id_param;
                                
                                COMMIT;
                                
                                SELECT 'Order processed successfully' AS message;
                            ELSE
                                SELECT CONCAT('Cannot process order. Current status: ', current_status) AS message;
                            END IF;
                        END //
                        DELIMITER ;
                        

                        10.2 数据库维护操作

                        -- 分析表
                        ANALYZE TABLE customers, orders, products;
                        -- 检查表
                        CHECK TABLE customers, orders, products;
                        -- 优化表
                        OPTIMIZE TABLE customers, orders, products;
                        -- 修复表
                        REPAIR TABLE customers, orders, products;
                        

                        10.3 常见查询和操作示例

                        -- 插入客户
                        INSERT INTO customers (first_name, last_name, email, password, phone)
                        VALUES ('John', 'Doe', 'john.doe@example.com', SHA2('password123', 256), '555-123-4567');
                        -- 插入产品
                        INSERT INTO categories (name, description) VALUES ('Electronics', 'Electronic devices and accessories');
                        INSERT INTO products (name, description, price, stock_quantity, category_id)
                        VALUES ('Smartphone X', 'Latest smartphone with advanced features', 699.99, 50, 1);
                        -- 创建订单(简化版)
                        INSERT INTO addresses (customer_id, address_type, address_line1, city, postal_code, country)
                        VALUES (1, 'shipping', '123 Main St', 'New York', '10001', 'USA');
                        INSERT INTO orders (customer_id, shipping_address_id, billing_address_id, total_amount, payment_method)
                        VALUES (1, 1, 1, 699.99, 'credit_card');
                        INSERT INTO order_items (order_id, product_id, quantity, unit_price)
                        VALUES (1, 1, 1, 699.99);
                        -- 处理订单
                        CALL process_order(1);
                        -- 复杂查询:查找畅销产品
                        SELECT 
                            p.product_id,
                            p.name,
                            p.price,
                            SUM(oi.quantity) AS total_sold,
                            SUM(oi.quantity * oi.unit_price) AS total_revenue
                        FROM products p
                        JOIN order_items oi ON p.product_id = oi.product_id
                        JOIN orders o ON oi.order_id = o.order_id
                        WHERE o.order_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
                        GROUP BY p.product_id, p.name, p.price
                        ORDER BY total_sold DESC
                        LIMIT 10;
                        -- 创建每日销售报表视图
                        CREATE VIEW daily_sales AS
                        SELECT 
                            DATE(o.order_date) AS sale_date,
                            COUNT(DISTINCT o.order_id) AS order_count,
                            SUM(oi.quantity) AS items_sold,
                            SUM(o.total_amount) AS total_revenue
                        FROM orders o
                        JOIN order_items oi ON o.order_id = oi.order_id
                        GROUP BY DATE(o.order_date)
                        ORDER BY sale_date DESC;
                        

                        掌握数据库和表的基本操作是使用MySQL的基础。这些操作包括数据库的创建、修改和删除,表的设计、修改和管理,以及数据的增删改查。随着经验的积累,您可以进一步探索更高级的功能,如存储过程、触发器、视图和事务管理,以构建更复杂、更高效的数据库应用程序。

                        结语

                        感谢您的阅读!期待您的一键三连!欢迎指正!

                        【MySQL】数据库、数据表的基本操作

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码