检查主键值

时间:2018-08-08 14:03:21

标签: sql sqlite

这些是SQLite中的表:especie_similar

CREATE TABLE especie_similar (
    id_especie INTEGER NOT NULL,
    id_similar INTEGER NOT NULL,
    PRIMARY KEY (
        id_especie,
        id_similar
    ),
    FOREIGN KEY (
        id_especie
    )
    REFERENCES especie (id_especie) ON DELETE CASCADE,
    FOREIGN KEY (
        id_similar
    )
    REFERENCES especie (id_especie) ON DELETE CASCADE
);

especie表:

CREATE TABLE especie (
    id_especie     INTEGER PRIMARY KEY AUTOINCREMENT
                           NOT NULL,
    nombre_especie VARCHAR NOT NULL,
    cient_especie  VARCHAR NOT NULL,
    desc_especie   TEXT,
    nidificacion   TEXT    NOT NULL,
    dimorfismo     INTEGER NOT NULL,
    genero_id      INTEGER NOT NULL,
    endemismo_id   INTEGER NOT NULL,
    abundancia_id  INTEGER NOT NULL,
    FOREIGN KEY (
        genero_id
    )
    REFERENCES genero (id_genero),
    FOREIGN KEY (
        endemismo_id
    )
    REFERENCES endemismo (id_endemismo),
    FOREIGN KEY (
        abundancia_id
    )
    REFERENCES abundancia (id_abundancia) 
);

我的情况:表especie有多个数据,我想在表especie_similar的{​​{1}} ID中插入。

  1. 我如何编写触发器或sql语句以检查especieid_especie是否不相等?
  2. 如何编码以检索所有与目标ID不同的id_similar (例如:表especie的{​​{1}} = 1和especie_similar = 2 表示物种id 1与另一个物种id 2相似,但是 由于先前,无法插入id_especie = 2和id_similar = 1 重复数据)?

非常抱歉,我的英语不好。

1 个答案:

答案 0 :(得分:0)

对于问题1,您可以使用标准的SQL约束:

$('#table_id').DataTable({
                   data:{{ data|safe}},
                    columns: [
                        {data: 'table_name'},
                        {data: 'col_name'},
                        {data: 'rule'},
                        {data: 'current'},
                        {data: 'min'},
                        {data: 'max'},
                        {data: 'median'},
                        {data: 'mean'},
                        {data: 'data'},

                    ],
                    "aoColumnDefs": [
                    {
                        "aTargets": [8],
                        "mRender": function (data, type, full) {
                             // since data is an array of values [1,2,3,4]
                            return '<span class="spark">' + data + '</span>'
                        }
                    }
                ],
               "drawCallback": (oSettings) => {
                   console.log('callback');
                   console.log($('.spark:not(:has(canvas))'))
                  $('.spark:not(:has(canvas))').sparkline('html', {
                      type: 'line',
                      minSpotColor: 'red',
                      maxSpotColor: 'green',
                      spotColor: false
                  });
              }
               });

对于问题2,您可以使用标准的“递归CTE”。参见SQLite WITH Clause。示例:

create table especie_similar (
  ...
  check (id_especie <> id_similar) -- your condition here
);