greatsql教程FG007-GreatSQL数据库与表创建实战
内容简介
本教程详细介绍GreatSQL数据库和表的创建方法,包括数据库创建、表结构设计、索引创建、表空间管理等内容。风哥教程参考GreatSQL官方文档SQL语言参考,帮助读者掌握数据库和表的创建技巧。
数据库和表的创建是使用GreatSQL的基础操作,合理的数据库设计和表结构对系统性能和可维护性至关重要。本教程将从基础概念入手,逐步深入到实战案例和最佳实践。
目录大纲
Part01-基础概念与理论知识
1.1 数据库概述
数据库是存储和管理数据的容器,GreatSQL中的数据库具有以下特点:
- 每个数据库有独立的命名空间
- 数据库包含表、视图、存储过程等对象
- 数据库可以设置字符集和校对规则
- 数据库可以进行权限控制
1.2 表结构设计
表结构设计的重要性:
- 合理的表结构可以提高查询性能
- 减少数据冗余,提高数据一致性
- 便于数据维护和扩展
- 适应业务需求的变化
1.3 数据类型选择
常用数据类型:
- 整数类型:TINYINT, SMALLINT, INT, BIGINT
- 浮点数类型:FLOAT, DOUBLE, DECIMAL
- 字符串类型:VARCHAR, CHAR, TEXT, BLOB
- 日期时间类型:DATE, TIME, DATETIME, TIMESTAMP
- 其他类型:BOOLEAN, ENUM, SET
Part02-生产环境规划与建议
2.1 数据库规划
风哥提示:生产环境建议根据业务模块划分数据库,便于管理和维护。
数据库规划建议:
- 根据业务功能划分数据库
- 考虑数据量和增长趋势
- 设置合理的字符集和校对规则
- 规划数据库备份策略
2.2 表结构设计原则
表结构设计原则:
- 范式原则:遵循第一、第二、第三范式
- 主键设计:每个表应有主键
- 数据类型选择:选择合适的数据类型,避免过度使用大字段
- 索引设计:根据查询需求设计索引
- 命名规范:使用统一的命名规范
2.3 索引设计策略
索引设计策略:
- 为常用查询字段创建索引
- 避免过度索引
- 考虑复合索引的顺序
- 定期维护索引
更多视频教程www.fgedu.net.cn
Part03-生产环境项目实施方案
3.1 数据库创建方案
数据库创建步骤:
- 连接GreatSQL服务器
- 创建数据库
- 设置字符集和校对规则
- 授予用户权限
- 验证数据库创建成功
3.2 表创建方案
表创建步骤:
- 设计表结构
- 编写CREATE TABLE语句
- 执行创建语句
- 添加索引
- 验证表创建成功
3.3 表空间管理方案
表空间管理建议:
- 使用独立表空间(innodb_file_per_table=1)
- 为大表创建独立表空间
- 定期监控表空间使用情况
- 设置合理的表空间自动扩展策略
Part04-生产案例与实战讲解
4.1 数据库创建实战
# 连接GreatSQL
mysql -u root -pFGedu123456!
mysql -u root -pFGedu123456!
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.32-24 GreatSQL, Release 24, Revision 3736467bc8c
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>
Your MySQL connection id is 12
Server version: 8.0.32-24 GreatSQL, Release 24, Revision 3736467bc8c
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>
# 创建数据库 CREATE DATABASE fgedudb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Query OK, 1 row affected (0.01 sec)
# 创建测试数据库 CREATE DATABASE fgedudb01 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Query OK, 1 row affected (0.00 sec)
# 查看数据库 SHOW DATABASES;
+——————–+
| Database |
+——————–+
| fgedudb |
| fgedudb01 |
| information_schema |
| mysql |
| performance_schema |
| sys |
+——————–+
| Database |
+——————–+
| fgedudb |
| fgedudb01 |
| information_schema |
| mysql |
| performance_schema |
| sys |
+——————–+
学习交流加群风哥微信: itpux-com
4.2 表创建实战
# 切换到fgedudb数据库 USE fgedudb;
Database changed
# 创建用户表 CREATE TABLE fgedu_users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(100) NOT NULL, email VARCHAR(100) NOT NULL UNIQUE, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Query OK, 0 rows affected (0.02 sec)
# 创建订单表 CREATE TABLE fgedu_orders ( order_id INT PRIMARY KEY AUTO_INCREMENT, user_id INT NOT NULL, order_date DATETIME DEFAULT CURRENT_TIMESTAMP, total_amount DECIMAL(10,2) NOT NULL, status VARCHAR(20) NOT NULL, FOREIGN KEY (user_id) REFERENCES fgedu_users(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Query OK, 0 rows affected (0.02 sec)
# 创建商品表 CREATE TABLE fgedu_products ( product_id INT PRIMARY KEY AUTO_INCREMENT, product_name VARCHAR(100) NOT NULL, price DECIMAL(10,2) NOT NULL, stock INT NOT NULL, description TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Query OK, 0 rows affected (0.02 sec)
# 查看表结构 SHOW TABLES;
+——————+
| Tables_in_fgedudb |
+——————+
| fgedu_orders |
| fgedu_products |
| fgedu_users |
+——————+
| Tables_in_fgedudb |
+——————+
| fgedu_orders |
| fgedu_products |
| fgedu_users |
+——————+
学习交流加群风哥QQ113257174
4.3 索引创建实战
# 为用户表添加索引 CREATE INDEX idx_username ON fgedu_users(username); CREATE INDEX idx_email ON fgedu_users(email);
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
# 为订单表添加索引 CREATE INDEX idx_user_id ON fgedu_orders(user_id); CREATE INDEX idx_order_date ON fgedu_orders(order_date); CREATE INDEX idx_status ON fgedu_orders(status);
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
# 为商品表添加索引 CREATE INDEX idx_product_name ON fgedu_products(product_name); CREATE INDEX idx_price ON fgedu_products(price);
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
# 查看索引 SHOW INDEX FROM fgedu_users;
+————-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+—————+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+————-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+—————+
| fgedu_users | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | |
| fgedu_users | 0 | username | 1 | username | A | 0 | NULL | NULL | | BTREE | | |
| fgedu_users | 0 | email | 1 | email | A | 0 | NULL | NULL | | BTREE | | |
| fgedu_users | 1 | idx_username | 1 | username | A | 0 | NULL | NULL | | BTREE | | |
| fgedu_users | 1 | idx_email | 1 | email | A | 0 | NULL | NULL | | BTREE | | |
+————-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+—————+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+————-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+—————+
| fgedu_users | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | |
| fgedu_users | 0 | username | 1 | username | A | 0 | NULL | NULL | | BTREE | | |
| fgedu_users | 0 | email | 1 | email | A | 0 | NULL | NULL | | BTREE | | |
| fgedu_users | 1 | idx_username | 1 | username | A | 0 | NULL | NULL | | BTREE | | |
| fgedu_users | 1 | idx_email | 1 | email | A | 0 | NULL | NULL | | BTREE | | |
+————-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+—————+
Part05-风哥经验总结与分享
5.1 常见创建问题与解决方案
| 问题 | 解决方案 |
|---|---|
| 数据库已存在 | 使用CREATE DATABASE IF NOT EXISTS语句 |
| 表已存在 | 使用CREATE TABLE IF NOT EXISTS语句 |
| 外键约束错误 | 确保引用的表和字段存在 |
| 索引创建失败 | 检查字段类型和长度是否合理 |
5.2 数据库设计最佳实践
- 使用语义化的表名和字段名
- 为每个表设置主键
- 使用合适的数据类型,避免过度使用TEXT等大字段
- 合理设计索引,避免过度索引
- 使用外键约束保证数据一致性
- 设置合理的默认值
更多学习教程公众号风哥教程itpux_com
5.3 性能优化建议
# 优化表结构 ALTER TABLE fgedu_orders ADD INDEX idx_user_status (user_id, status);
Query OK, 0 rows affected (0.01 sec)
# 分析表 ANALYZE TABLE fgedu_users, fgedu_orders, fgedu_products;
+——————+———+———-+———-+
| Table | Op | Msg_type | Msg_text |
+——————+———+———-+———-+
| fgedudb.fgedu_users | analyze | status | OK |
| fgedudb.fgedu_orders | analyze | status | OK |
| fgedudb.fgedu_products | analyze | status | OK |
+——————+———+———-+———-+
| Table | Op | Msg_type | Msg_text |
+——————+———+———-+———-+
| fgedudb.fgedu_users | analyze | status | OK |
| fgedudb.fgedu_orders | analyze | status | OK |
| fgedudb.fgedu_products | analyze | status | OK |
+——————+———+———-+———-+
批量创建脚本
# 创建批量创建脚本
cat > /greatsql/scripts/create_tables.sh << 'EOF'
#!/bin/bash # create_tables.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 连接数据库
mysql -u root -pFGedu123456! << 'SQL'
# 使用fgedudb数据库 USE fgedudb;
# 创建商品分类表 CREATE TABLE IF NOT EXISTS fgedu_categories (
category_id INT PRIMARY KEY AUTO_INCREMENT, category_name VARCHAR(50) NOT NULL UNIQUE, description TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
# 创建订单详情表 CREATE TABLE IF NOT EXISTS fgedu_order_items ( item_id INT PRIMARY KEY AUTO_INCREMENT, order_id INT NOT NULL, product_id INT NOT NULL, quantity INT NOT NULL, price DECIMAL(10,2) NOT NULL, FOREIGN KEY (order_id) REFERENCES fgedu_orders(order_id), FOREIGN KEY (product_id) REFERENCES fgedu_products(product_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
# 添加索引 CREATE INDEX IF NOT EXISTS idx_category_name ON fgedu_categories(category_name); CREATE INDEX IF NOT EXISTS idx_order_id ON fgedu_order_items(order_id); CREATE INDEX IF NOT EXISTS idx_product_id ON fgedu_order_items(product_id); SQL
echo “Tables created successfully!” EOF
# 设置脚本权限
chmod +x /greatsql/scripts/create_tables.sh
cat > /greatsql/scripts/create_tables.sh << 'EOF'
#!/bin/bash # create_tables.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 连接数据库
mysql -u root -pFGedu123456! << 'SQL'
# 使用fgedudb数据库 USE fgedudb;
# 创建商品分类表 CREATE TABLE IF NOT EXISTS fgedu_categories (
category_id INT PRIMARY KEY AUTO_INCREMENT, category_name VARCHAR(50) NOT NULL UNIQUE, description TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
# 创建订单详情表 CREATE TABLE IF NOT EXISTS fgedu_order_items ( item_id INT PRIMARY KEY AUTO_INCREMENT, order_id INT NOT NULL, product_id INT NOT NULL, quantity INT NOT NULL, price DECIMAL(10,2) NOT NULL, FOREIGN KEY (order_id) REFERENCES fgedu_orders(order_id), FOREIGN KEY (product_id) REFERENCES fgedu_products(product_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
# 添加索引 CREATE INDEX IF NOT EXISTS idx_category_name ON fgedu_categories(category_name); CREATE INDEX IF NOT EXISTS idx_order_id ON fgedu_order_items(order_id); CREATE INDEX IF NOT EXISTS idx_product_id ON fgedu_order_items(product_id); SQL
echo “Tables created successfully!” EOF
# 设置脚本权限
chmod +x /greatsql/scripts/create_tables.sh
# 执行创建脚本 /greatsql/scripts/create_tables.sh
Tables created successfully!
# 查看所有表 USE fgedudb; SHOW TABLES;
Database changed
+——————+
| Tables_in_fgedudb |
+——————+
| fgedu_categories |
| fgedu_order_items |
| fgedu_orders |
| fgedu_products |
| fgedu_users |
+——————+
+——————+
| Tables_in_fgedudb |
+——————+
| fgedu_categories |
| fgedu_order_items |
| fgedu_orders |
| fgedu_products |
| fgedu_users |
+——————+
from greatsql视频:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
