mysql怎么建库建表?mysql怎么用语句建表

2019-01-17 9:46:02 88点热度 0人点赞 0条评论
MySQL作为关系型数据库管理系统,其核心功能之一就是创建数据库和表。本文将从基础语法到实战技巧,系统解析如何高效完成数据库与表的创建。 一、数据库创建基础 创建数据库语法 CASE 1:基础创建CREATE DATAB […]
  • MySQL作为关系型数据库管理系统,其核心功能之一就是创建数据库和表。本文将从基础语法到实战技巧,系统解析如何高效完成数据库与表的创建。

一、数据库创建基础

  • 创建数据库语法
  • CASE 1:基础创建
    CREATE DATABASE mydb;
  • CASE 2:指定字符集
    CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • CASE 3:完整配置参数
    CREATE DATABASE mydbCHARACTER SET = latin1COLLATE = latin1_swedish_ciCOMMENT '测试环境数据库';

二、数据库管理关键点

  • 查看所有数据库:
    SHOW DATABASES;
  • 切换数据库:
    USE mydb;
  • 修改数据库:
    ALTER DATABASE mydbCHARACTER SET = gbkCOLLATE = gbk_chinese_ci;
  • 删除数据库:
    DROP DATABASE IF EXISTS mydb;

三、表创建深度解析

1. 基础建表语句

CREATE TABLE users (    id INT PRIMARY KEY AUTO_INCREMENT,    username VARCHAR(50) NOT NULL UNIQUE,    email VARCHAR(100) DEFAULT 'noemail@example.com',    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP) ENGINE=InnoDB CHARSET=utf8mb4;

2. 字段类型选择指南

  • 数值类型:
    - TINYINT(1字节)
    - SMALLINT(2字节)
    - MEDIUMINT(3字节)
    - INT(4字节)
    - BIGINT(8字节)
  • 字符串类型:
    - VARCHAR(n) 可变长度
    - TEXT 大文本类型
    - ENUM('选项1','选项2')
  • 时间类型:
    - DATE('YYYY-MM-DD')
    - DATETIME('YYYY-MM-DD HH:MM:SS')
    - TIMESTAMP

3. 约束条件详解

约束类型 语法 作用
主键约束 PRIMARY KEY (column) 唯一标识记录,自动创建索引
非空约束 NOT NULL 禁止插入NULL值
默认值 DEFAULT 'value' 未指定值时的默认数据
唯一约束 UNIQUE (column) 列值唯一性校验
外键约束 FOREIGN KEY (col) REFERENCES parent(col) 维护表间数据完整性

4. 进阶建表技巧

  • 自增主键优化:
    建议使用BIGINT并设置AUTO_INCREMENT=10000
  • 全文索引创建:
    CREATE FULLTEXT INDEX idx_content ON articles(content);
  • 分区表设计:
    CREATE TABLE sales (...)
    PARTITION BY RANGE(YEAR(order_date))
    (PARTITION p0 VALUES LESS THAN (2020), ...);

四、实战案例解析

场景1:电商订单表

CREATE TABLE orders (    order_id BIGINT PRIMARY KEY AUTO_INCREMENT,    user_id INT NOT NULL,    product_id INT NOT NULL,    amount DECIMAL(10,2) NOT NULL CHECK (amount > 0),    status ENUM('pending','shipped','delivered') DEFAULT 'pending',    created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,    FOREIGN KEY (user_id) REFERENCES customers(user_id),    FOREIGN KEY (product_id) REFERENCES products(product_id)) ENGINE=InnoDB CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

场景2:日志记录表

CREATE TABLE access_logs (    log_id BIGINT PRIMARY KEY AUTO_INCREMENT,    ip VARCHAR(45) NOT NULL,    request_uri VARCHAR(255) NOT NULL,    user_agent TEXT,    referer VARCHAR(255),    timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,    INDEX idx_ip (ip),    INDEX idx_time (timestamp)) ENGINE=ARCHIVE COMMENT='网站访问日志';

五、常见问题解决

  • Q:创建表提示"Table doesn't exist in engine"
    A:检查存储引擎是否可用,尝试指定ENGINE=MyISAM
  • Q:插入数据报错"Duplicate entry"
    A:检查UNIQUE/PRIMARY KEY约束是否存在重复值
  • Q:中文乱码问题
    A:确保数据库、表、客户端字符集均为utf8mb4
  • Q:外键约束失效
    A:确认父表存在且字段类型匹配,启用foreign_key_checks

六、性能优化建议

  • 字段最小化原则:避免VARCHAR(255)存储手机号等固定长度数据
  • 合理使用ENUM:状态字段优先用枚举类型替代VARCHAR
  • 索引策略:
    - 主键自动建立聚簇索引
    - 频繁查询字段建立二级索引
    - 避免过度索引影响写入速度
  • 分区策略:
    - 按时间范围分区
    - 按哈希分区处理热点数据

七、工具辅助操作

  • Navicat可视化建表:
    1. 新建表后设置存储引擎
    2. 使用设计器拖拽关联关系
    3. 导出SQL脚本备份
  • 命令行批量操作:
    source /path/to/create.sql
  • 迁移方案:
    mysqldump --databases mydb > backup.sql

八、最佳实践总结

  • 命名规范:
    - 数据库名:小写字母+下划线
    - 表名:复数形式如users
    - 字段名:snake_case风格
  • 版本控制:
    将DDL语句纳入Git管理
  • 文档同步:
    使用SchemaSpy生成可视化ER图
  • 测试环境:
    开发环境建议使用_innodb_test等后缀区分

掌握本文所述的创建技巧后,建议通过实际项目进行练习。可尝试构建简单论坛系统,包含用户表、帖子表、评论表等关联结构,逐步体验数据库设计的完整流程。当面对复杂业务需求时,建议采用ER图工具辅助设计后再实施代码创建。

PC400

这个人很懒,什么都没留下