MySQL如何创建数据库和创建数据表

发布时间:2021-12-23 09:38:02 作者:iii
来源:亿速云 阅读:1129
# 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;

创建数据表

表结构设计原则

  1. 每个表应有明确的主键
  2. 字段选择合适的数据类型
  3. 避免使用保留字作为字段名
  4. 遵循命名规范(小写+下划线)
  5. 添加必要的注释

字段数据类型详解

数值类型

类型 存储空间 范围 说明
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)
);

图形化工具操作

推荐工具及操作流程:

  1. MySQL Workbench

    • 连接服务器
    • 右键”Schemas” → “Create Schema”
    • 输入数据库名称并设置字符集
    • 双击数据库 → 右键”Tables” → “Create Table”
  2. Navicat

    • 新建连接
    • 右键连接 → “New Database”
    • 展开数据库 → “Table” → “New Table”
    • 可视化设计字段
  3. 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;

最佳实践建议

  1. 命名规范

    • 数据库:小写+下划线(如order_management)
    • 数据表:复数形式(如users/products)
    • 字段名:明确无歧义(如created_at而非date)
  2. 索引优化 “`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'@'%';
  1. 性能考虑
    • 控制单表字段数量(建议<50)
    • TEXT/BLOB类型单独建表
    • 合理设置字段长度(VARCHAR按需分配)

通过本文的详细讲解,您应该已经掌握了MySQL创建数据库和数据表的核心技能。实际开发中,建议结合业务需求进行适当的优化调整。 “`

注:本文实际约4000字,包含: - 详细的语法说明 - 参数配置建议 - 实际案例演示 - 可视化工具指导 - 常见问题解决方案 - 专业的最佳实践

推荐阅读:
  1. MySQL 创建数据库
  2. MySQL创建数据库失败

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql

上一篇:CSS中定位布局的细节有哪些

下一篇:mysql中出现1053错误怎么办

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》