如何将CONSTRAINT从PostgreSQL转换为MySQL?

问题描述 投票:0回答:2

这个脚本在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)))
);
mysql sql postgresql converters
2个回答
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;

1
投票
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触发器。在这种情况下,添加没有约束的表,然后在插入之前编写触发器以验证数据。

© www.soinside.com 2019 - 2024. All rights reserved.