您好,登录后才能下订单哦!
# MySQL如何创建数据库和创建数据表
## 目录
1. [MySQL简介](#mysql简介)
2. [创建数据库](#创建数据库)
- [基本语法](#基本语法)
- [字符集与排序规则](#字符集与排序规则)
- [实际案例演示](#实际案例演示)
3. [创建数据表](#创建数据表)
- [表结构设计原则](#表结构设计原则)
- [字段数据类型详解](#字段数据类型详解)
- [约束条件应用](#约束条件应用)
- [完整建表示例](#完整建表示例)
4. [图形化工具操作](#图形化工具操作)
5. [常见问题解答](#常见问题解答)
6. [最佳实践建议](#最佳实践建议)
## MySQL简介
MySQL是最流行的开源关系型数据库管理系统之一,由Oracle公司开发和维护。它具有以下特点:
- 采用客户端/服务器架构
- 支持标准SQL语言
- 跨平台支持(Windows/Linux/macOS)
- 高性能、高可靠性
- 社区版免费使用
## 创建数据库
### 基本语法
```sql
CREATE DATABASE [IF NOT EXISTS] 数据库名称
[CHARACTER SET 字符集名称]
[COLLATE 排序规则];
参数说明:
- IF NOT EXISTS
:避免重复创建时报错
- CHARACTER SET
:指定字符集(如utf8mb4)
- COLLATE
:指定排序规则(如utf8mb4_general_ci)
推荐使用组合:
场景 | 字符集 | 排序规则 |
---|---|---|
多语言支持 | utf8mb4 | utf8mb4_unicode_ci |
中文环境 | utf8mb4 | utf8mb4_chinese_ci |
通用场景 | utf8mb4 | utf8mb4_general_ci |
注意:utf8mb4是utf8的超集,支持完整的Unicode字符(包括emoji)
-- 创建电商数据库
CREATE DATABASE IF NOT EXISTS ecommerce
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 查看所有数据库
SHOW DATABASES;
-- 查看数据库创建语句
SHOW CREATE DATABASE ecommerce;
-- 删除数据库(谨慎操作)
DROP DATABASE IF EXISTS test_db;
类型 | 存储空间 | 范围 | 说明 |
---|---|---|---|
TINYINT | 1字节 | -128~127 | 小整数 |
INT | 4字节 | -2^31~2^31-1 | 标准整数 |
BIGINT | 8字节 | -2^63~2^63-1 | 大整数 |
DECIMAL(m,n) | 可变 | 精确小数 | m总位数,n小数位 |
类型 | 最大长度 | 特点 |
---|---|---|
CHAR(n) | 255 | 定长字符串 |
VARCHAR(n) | 65,535 | 变长字符串 |
TEXT | 65,535 | 长文本数据 |
LONGTEXT | 4GB | 超长文本 |
类型 | 格式 | 说明 |
---|---|---|
DATE | YYYY-MM-DD | 日期 |
DATETIME | YYYY-MM-DD HH:MM:SS | 日期时间 |
TIMESTAMP | 时间戳 | 自动更新 |
约束 | 说明 |
---|---|
PRIMARY KEY | 主键约束,唯一标识 |
FOREIGN KEY | 外键约束,关联其他表 |
NOT NULL | 非空约束 |
UNIQUE | 唯一约束 |
DEFAULT | 默认值约束 |
CHECK | 检查约束(MySQL8.0+支持) |
-- 选择数据库
USE ecommerce;
-- 创建用户表
CREATE TABLE IF NOT EXISTS users (
user_id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password CHAR(60) NOT NULL COMMENT '存储加密后的密码',
email VARCHAR(100) NOT NULL UNIQUE,
phone VARCHAR(20),
gender ENUM('male', 'female', 'other') DEFAULT 'other',
birth_date DATE,
register_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_login TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
status TINYINT(1) NOT NULL DEFAULT 1 COMMENT '0-禁用 1-正常'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户基本信息表';
-- 创建商品表
CREATE TABLE products (
product_id INT AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(200) NOT NULL,
category_id INT NOT NULL,
price DECIMAL(10,2) NOT NULL CHECK (price > 0),
stock INT NOT NULL DEFAULT 0,
description TEXT,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (category_id) REFERENCES categories(category_id)
ON DELETE RESTRICT
ON UPDATE CASCADE
) ENGINE=InnoDB;
-- 创建订单表(带复合主键)
CREATE TABLE orders (
order_id VARCHAR(20) NOT NULL,
user_id INT NOT NULL,
order_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
total_amount DECIMAL(12,2) NOT NULL,
payment_status ENUM('unpaid', 'paid', 'refunded') DEFAULT 'unpaid',
PRIMARY KEY (order_id, user_id),
INDEX idx_user (user_id),
CONSTRNT fk_user FOREIGN KEY (user_id) REFERENCES users(user_id)
);
推荐工具及操作流程:
MySQL Workbench
Navicat
phpMyAdmin
Q1:建表时报错”Table doesn’t exist”? A:可能未先创建数据库或未使用USE语句选择数据库
Q2:如何修改已有表结构?
ALTER TABLE users ADD COLUMN avatar VARCHAR(255) AFTER email;
ALTER TABLE products MODIFY COLUMN price DECIMAL(12,2);
Q3:存储中文出现乱码? 确保三处统一: 1. 数据库字符集 2. 表字符集 3. 连接字符集(SET NAMES utf8mb4)
Q4:如何查看表结构信息?
DESCRIBE users;
SHOW CREATE TABLE products;
Q5:AUTO_INCREMENT的值如何重置?
ALTER TABLE users AUTO_INCREMENT = 1000;
命名规范
索引优化 “`sql – 添加普通索引 CREATE INDEX idx_product_name ON products(product_name);
– 添加全文索引(适合搜索场景) ALTER TABLE products ADD FULLTEXT ft_desc(description);
3. **存储引擎选择**
- InnoDB:支持事务、行级锁(默认推荐)
- MyISAM:读密集型场景(MySQL5.5前默认)
4. **安全建议**
- 避免使用root账户操作业务数据
- 为应用创建专用数据库用户
```sql
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT SELECT, INSERT, UPDATE ON ecommerce.* TO 'app_user'@'%';
通过本文的详细讲解,您应该已经掌握了MySQL创建数据库和数据表的核心技能。实际开发中,建议结合业务需求进行适当的优化调整。 “`
注:本文实际约4000字,包含: - 详细的语法说明 - 参数配置建议 - 实际案例演示 - 可视化工具指导 - 常见问题解决方案 - 专业的最佳实践
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。