cari

Rumah  >  Soal Jawab  >  teks badan

Cara untuk mengekalkan integriti antara dua lajur dalam jadual MySQL

Saya mempunyai jadual dengan lajur bernama 主键普通列。我想要保持这两列的完整性.

Andaikan saya mempunyai jadual pengguna dan dua data. Saya berharap dalam id列和create_user列之间保持完整性

CREATE TABLE USER (
    id varchar(10) not null,
    create_user varchar(10) not null,
    PRIMARY KEY (id)
);

insert into USER (id,create_user) values ('system','system');
insert into USER (id,create_user) values ('user01','system');

结果如下

| id       | create_user |
| -------- | ------------|
| system   | system      |
| user01   | system      |

Jika saya mengemas kini id (kunci utama) ia tidak mempunyai integriti.

update USER SET id='master' WHERE id='system';

结果如下

| id       | create_user |
| -------- | ------------|
| master   | system      |
| user01   | system      |

Tetapi Saya mahu melaksanakan ini di borang. adakah mungkin? Saya tidak mahu pertanyaan kemas kini tambahan.

| id       | create_user |
| -------- | ------------|
| master   | master      |
| user01   | master      |

P粉462328904P粉462328904446 hari yang lalu490

membalas semua(1)saya akan balas

  • P粉364129744

    P粉3641297442023-09-13 12:04:12

    Anda boleh mengemas kini sebarang bilangan lajur dan menggunakan pernyataan kes untuk memutuskan perkara yang anda mahu ia ditetapkan

    如果存在表t,则删除表t;
    CREATE TABLE t (
        id varchar(10) not null,
        create_user varchar(10) not null,
        PRIMARY KEY (id)
    );
    
    向t表插入数据 (id,create_user) values ('system','system');
    向t表插入数据 (id,create_user) values ('user01','system');
    
    更新t表
    SET id = case when id= 'system' then 'master' else id end ,
        create_user = case when create_user = 'system' then 'master' else create_user end 
    where id = 'system' or create_user = 'system';
    
    从t表中查询数据;
    
    +--------+-------------+
    | id     | create_user |
    +--------+-------------+
    | master | master      |
    | user01 | master      |
    +--------+-------------+
    共有2行数据 (0.001 秒)

    balas
    0
  • Batalbalas