【问题标题】:How do I translate CONSTRAINT from PostgreSQL to MySQL?如何将 CONSTRAINT 从 PostgreSQL 转换为 MySQL?
【发布时间】:2016-11-09 14:22:14
【问题描述】:

此脚本在 PostgreSQL 中。我想把它转换成 MySQL,我该怎么做?

CREATE TABLE language_history (
    pk int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    created TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    active boolean,
    jsondata varchar(255),
    polymorphic_type varchar(20),
    id varchar(255),
    name varchar(255),
    description varchar(255),
    markup_description varchar(255),
    latitude double precision,
    longitude double precision,
    version int NOT NULL,
    CONSTRAINT language_history_latitude_check CHECK (((((-90))::double precision <= latitude) AND (latitude <= (90)::double precision))),         
    CONSTRAINT language_history_longitude_check CHECK (((((-180))::double precision <= longitude) AND (longitude <= (180)::double precision)))
);

【问题讨论】:

  • 尝试更具体。 究竟是什么问题?您不知道如何转换哪些字段/定义?
  • CONSTRAINT 是主要的焦点,其他的似乎有点熟悉。谢谢。
  • 所以请教如何将一个约束从postgresql翻译成mysql

标签: mysql sql postgresql converters


【解决方案1】:

试试这个

CREATE TABLE language_history (
    pk int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    created TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    active bool,
    jsondata varchar(255),
    polymorphic_type varchar(20),
    id varchar(255),
    name varchar(255),
    description varchar(255),
    markup_description varchar(255),
    latitude double precision,
    longitude double precision,
    version int NOT NULL
) TYPE=MyISAM;

【讨论】:

    【解决方案2】:
    CONSTRAINT language_history_latitude_check CHECK (((((-90))::double precision <= latitude) AND (latitude <= (90)::double precision))),         
    CONSTRAINT language_history_longitude_check CHECK (((((-180))::double precision <= longitude) AND (longitude <= (180)::double precision)))
    

    首先,这对于 postgres 来说不是一个很好的表格设计。你遇到的这些限制,是穷人对postgis优秀Geography type的实现。

    上述约束的作用是确保整个 lat,lng 列中的值在地理纬度和经度的有效范围内。 (地理类型默认为您执行此操作,并为您提供许多其他功能)。

    在 mysql 中做的最简单的事情是创建没有约束的表。其次,您可以使用 mysql geometry 类型,但它不会自动为您提供数据验证。

    在 postgresql 表中重现约束的第三个选项是使用 BEFORE INSERT 触发器。这种情况下,添加不带约束的表,然后在插入前编写触发器验证数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-30
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多