• 创建第一个MySQL数据库earth及表area


    Windows 10家庭中文版,MySQL 5.7.20 for Win 64,2018-05-08

    数据库earth描述:

    用于记录地球上的事物,一期包含地理区域信息——表area。

    字符集编码:utf8。

    表area描述:

    记录地区的地理区域信息,顶级为七大洲四大洋,然后是国家和地区。

    表area数据字典如下:

    注意:字段id为主键,故每条记录的id是不同的,从1开始;字段parent_id的值从0开始,0表示地球,除了0以外,其它值来自id;(设计

    好像有些问题——id从0开始多好?也不行,不设置会好一些。而且parent_id也无需设置和id的关系了)

    在命令行中建立数据库earth:

    在命令行中建立数据库earth下的表area:

    选择(使用)数据库earth并检查status

    在命令行中创建数据表area:

    第一次创建的表area存在问题——没有将name_cn、create_t、update_t设置为NOT NULL,因此,需要修改完善。

    使用ALTER命令将name_cn、create_t、update_t设置为NOT NULL:

    mysql> ALTER TABLE area MODIFY name_cn varchar(100) DEFAULT "" NOT NULL;

    mysql> ALTER TABLE area MODIFY create_t DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL;

    mysql> ALTER TABLE area MODIFY update_t DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP;

    说明:

    DEFAULT CURRENT_TIMESTAMP——在创建记录(record)时记录操作时间;

    ON UPDATE CURRENT_TIMESTAMP——在更新记录(record)时记录操作时间。

    create_t、update_t为什么选择DATETIME类型,而不是TIMESTAMP类型?因为前者的时间范围更大。在两者都支持使用NOW()、

    CURRENT_TIMESTAMP获取当前时间并记录时,选择DATETIME。

    参考:官方链接1官方链接2

    使用desc命令查看表area的结构,如下图,符合设计。

    导出数据库earth和表area:

    将数据库和表导出的目的是为了数据迁移、备份等,请参考链接

    导出功能 可以将数据库的所有表或部分表 创建语句及所有数据 导出到外部文件中,然后,可以通过将导出的外部文件导入到其它

    数据库中重新建立表和记录。

    导出功能 使用命令mysqldump,可以使用mysqldump --help命令查看其用法(很长,我自己是没看细看的)。

    导出数据库earth:

    >mysqldump -uroot -p earth > d:dbearth.sql

    导出数据库earth到文件dbearth.sql。

    >mysqldump -uroot -p earth area > d: barea.sql

    导出数据库earth下的表area到文件tbarea.sql。

    注意,上面两条命令是将表的创建语句和表中的全部数据导出,不过目前只有一个表,表中还没有数据,因此,两者导出

    的文件内容是相同的。

    导出后的文件内容截图:

    数据库导出到文件后,怎么将文件导入其它数据库呢?进入MySQL命令行,再选择(使用)数据库-use,使用source命令即可将导出的文件

    中的数据表和数据导入到选择的数据库中,使用样式:

    source 文件路径

    作者:Ben.Z

    参考链接:

    Date and Time Type Overview
    Automatic Initialization and Updating for TIMESTAMP and DATETIME
    mysql 数据库导入导出方法总结
    MySQL自增ID 起始值 修改方法

    后记:

    在数据库、表设计之初,是想讲七大洲四大洋放到一个表,再将国家放到一个表,再将国家下的一级行政区域放到一个表……

    但后来发现这样的设计很麻烦,而且每个国家的行政区划是有很大差别的。

    因此,才将所有区域信息统一放到一个表area中。

    一些疑问:

    这样的设计是最优的吗?扩展性如何?

    数据库及表要如何设计才是最好的呢?应该遵循什么原则?

  • 相关阅读:
    每次阅读外文技术资料都头疼,终于知道原因了。
    前端利器躬行记(6)——Fiddler
    前端利器躬行记(5)——Git
    前端利器躬行记(4)——webpack进阶
    前端利器躬行记(3)——webpack基础
    xshell的快捷命令
    本机,同机房,同城,异地,不同城,腾讯云ping延时值
    Redis入门指南(第2版) Redis设计思路学习与总结
    与MySQL传统复制相比,GTID有哪些独特的复制姿势?
    iptables的conntrack表满了导致访问网站很慢
  • 原文地址:https://www.cnblogs.com/luo630/p/9007714.html
Copyright © 2020-2023  润新知