创建数据库

  1. CREATE DATABASE
  2. IF
  3. NOT EXISTS blog_service DEFAULT CHARACTER
  4. SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;

确定数据源

(1) information_schema数据库

information_schema 数据库在 MySQL 中提供了对数据库元数据的访问, 可以获得 MySQL 服务器自身相关的信息,如数据库、表名称、列数据类型、访问权限等。

  • SCHEMATA:提供有关数据库的信息, 可与 SHOW DATABASES语句等效。

    use information_schema;
    SELECT * FROM SCHEMATA;
    

    image.png

  • COLUMNS:提供有关表中列的信息, 可与 SHOW COLUMNS 语句等效。

    use information_schema;
    SELECT * FROM COLUMNS
    WHERE table_schema= 'blog_service' AND TABLE_NAME= 'blog_tag'
    
    use blog_service;
    SHOW COLUMNS FROM blog_tag;
    
  • TABLES:提供有关数据库中表的信息, 可与SHOW FULL TABLES语句等效。

    use information_schema;
    SELECT * FROM TABLES WHERE TABLE_SCHEMA='blog_service'
    
    use blog_service;
    SHOW FULL TABLES
    
  • STATISTICS:提供有关表索引的信息, 可与 SHOW INDEX 语句等效。

    use information_schema;
    SELECT * FROM STATISTICS WHERE TABLE_SCHEMA='blog_service' AND TABLE_NAME='blog_tag'
    
    use blog_service;
    SHOW INDEX FROM blog_tag;
    
  • USER_PRIVILEGES:提供有关全局权限的信息, 从 mysql.user 系统表中获取值。

    use information_schema;
    SELECT * FROM USER_PRIVILEGES
    
    use mysql;
    SELECT * FROM user
    
  • CHARACTER_SETS:提供数据库可用字符集的信息, 可与SHOW CHARACTER SET语句等效。

    use information_schema;
    SELECT * FROM CHARACTER_SETS;
    
    use information_schema;
    SHOW CHARACTER SET
    

    (2) COLUMNS表

    COLUMNS 表提供了整个数据库中列的信息, 其包含以下几个常用字段。

  • COLUMN_NAME:列的名称。

  • TABLE_NAME:列所属的表名称。
  • COLUMN DEFAULT:列的默认值。
  • IS_NULLABLE:列是否允许为 NULL, 值为 YESNO
  • DATA_TYPE:列的数据类型, 仅包含类型信息。
  • COLUMN_TYPE:列的数据类型, 包含类型名称和可能的其他信息。例如, 精度、长度、是否无符号等,
  • COLUMN_KEY:列是否被索引。
  • COLUMN_COMMENT:列的注释信息。

Go 语言中, 一个结构体的最小包含为字段名和字段类型。实际上, 可以看到 COLUMNS 表中基本都具备了,它能够直接帮助程序进行表到结构体的映射转换。