ຄໍາຖາມ MySQL ຈັດການກັບຂໍ້ມູນທີ່ຊ້ໍາກັນແນວໃດ?ການກັ່ນຕອງເພື່ອເອົາຄໍາຖະແຫຼງການຂໍ້ມູນທີ່ຊ້ໍາກັນ

MySQLການສອບຖາມຈັດການກັບຂໍ້ມູນທີ່ຊ້ໍາກັນແນວໃດ?ການກັ່ນຕອງເພື່ອເອົາຄໍາຖະແຫຼງການຂໍ້ມູນທີ່ຊ້ໍາກັນ

MySQL ຈັດການຂໍ້ມູນຊໍ້າກັນ

ອາດຈະມີບັນທຶກຊໍ້າກັນໃນບາງຕາຕະລາງຂໍ້ມູນ MySQL ໃນບາງກໍລະນີ, ພວກເຮົາອະນຸຍາດໃຫ້ມີຂໍ້ມູນຊໍ້າກັນ, ແຕ່ບາງຄັ້ງພວກເຮົາຍັງຈໍາເປັນຕ້ອງລຶບຂໍ້ມູນທີ່ຊ້ໍາກັນເຫຼົ່ານີ້.

ໃນບົດນີ້, ພວກເຮົາຈະແນະນໍາວິທີການປ້ອງກັນຂໍ້ມູນຊ້ໍາກັນໃນຕາຕະລາງຂໍ້ມູນແລະວິທີການລຶບຂໍ້ມູນທີ່ຊ້ໍາກັນຢູ່ໃນຕາຕະລາງຂໍ້ມູນ.


ປ້ອງກັນຂໍ້ມູນຊໍ້າກັນໃນຕາຕະລາງ

ທ່ານສາມາດກໍານົດພາກສະຫນາມທີ່ລະບຸໄວ້ໃນຕາຕະລາງຂໍ້ມູນ MySQL ເປັນ ກະແຈຫຼັກ ຫຼື UNIQUE (ເປັນເອກະລັກ) ດັດຊະນີເພື່ອຮັບປະກັນຄວາມເປັນເອກະລັກຂອງຂໍ້ມູນ.

ໃຫ້ລອງຕົວຢ່າງ: ບໍ່ມີດັດສະນີແລະລະຫັດຕົ້ນຕໍໃນຕາຕະລາງຂ້າງລຸ່ມນີ້, ດັ່ງນັ້ນຕາຕະລາງອະນຸຍາດໃຫ້ບັນທຶກຊ້ໍາກັນຫຼາຍ.

CREATE TABLE person_tbl
(
    first_name CHAR(20),
    last_name CHAR(20),
    sex CHAR(10)
);

ຖ້າທ່ານຕ້ອງການກໍານົດ fields first_name ແລະ last_name ໃນຕາຕະລາງ, ຂໍ້ມູນບໍ່ສາມາດຊ້ໍາກັນໄດ້, ທ່ານສາມາດຕັ້ງໂຫມດຫຼັກສອງເທົ່າເພື່ອກໍານົດຄວາມເປັນເອກະລັກຂອງຂໍ້ມູນ. ຖ້າທ່ານຕັ້ງລະຫັດຫຼັກສອງເທົ່າ, ຄ່າເລີ່ມຕົ້ນຂອງລະຫັດນັ້ນ. ບໍ່ສາມາດເປັນ NULL, ແຕ່ສາມາດຕັ້ງເປັນ NOT NULL.ດັ່ງນີ້:

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10),
   PRIMARY KEY (last_name, first_name)
);

ຖ້າພວກເຮົາກໍານົດດັດສະນີທີ່ເປັນເອກະລັກ, ຫຼັງຈາກນັ້ນ, ເມື່ອໃສ່ຂໍ້ມູນຊ້ໍາກັນ, ຄໍາສັ່ງ SQL ຈະບໍ່ປະຕິບັດຢ່າງສໍາເລັດຜົນແລະຖິ້ມຄວາມຜິດພາດ.

ຄວາມແຕກຕ່າງລະຫວ່າງ INSERT IGNORE INTO ແລະ INSERT INTO ແມ່ນວ່າ INSERT IGNORE ບໍ່ສົນໃຈຂໍ້ມູນທີ່ມີຢູ່ແລ້ວໃນຖານຂໍ້ມູນ ຖ້າບໍ່ມີຂໍ້ມູນໃນຖານຂໍ້ມູນ, ມັນຈະໃສ່ຂໍ້ມູນໃຫມ່, ແລະຖ້າມີຂໍ້ມູນ, ມັນຈະຂ້າມຂໍ້ມູນນີ້.ດ້ວຍວິທີນີ້, ຂໍ້ມູນທີ່ມີຢູ່ໃນຖານຂໍ້ມູນສາມາດຖືກຮັກສາໄວ້, ແລະຈຸດປະສົງຂອງການໃສ່ຂໍ້ມູນໃນຊ່ອງຫວ່າງແມ່ນສາມາດບັນລຸໄດ້.

ຕົວຢ່າງຕໍ່ໄປນີ້ໃຊ້ INSERT IGNORE INTO, ເຊິ່ງດໍາເນີນການໂດຍບໍ່ມີຂໍ້ຜິດພາດ ແລະບໍ່ໄດ້ໃສ່ຂໍ້ມູນຊໍ້າກັນເຂົ້າໄປໃນຕາຕະລາງຂໍ້ມູນ:

mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
    -> VALUES( 'Jay', 'Thomas');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
    -> VALUES( 'Jay', 'Thomas');
Query OK, 0 rows affected (0.00 sec)

INSERT ignore ເຂົ້າໄປໃນເມື່ອໃສ່ຂໍ້ມູນ, ຫຼັງຈາກຄວາມເປັນເອກະລັກຂອງບັນທຶກໄດ້ຖືກກໍານົດ, ຖ້າຂໍ້ມູນຊ້ໍາກັນຖືກໃສ່, ບໍ່ມີຂໍ້ຜິດພາດຈະຖືກສົ່ງຄືນ, ແຕ່ວ່າຈະມີການເຕືອນຄືນເທົ່ານັ້ນ.ແລະປ່ຽນແທນເຂົ້າໄປໃນຖ້າມີບັນທຶກຫຼັກ ຫຼືເປັນເອກະລັກ, ໃຫ້ລຶບມັນອອກກ່ອນ.ໃສ່ບັນທຶກໃໝ່.

ອີກວິທີໜຶ່ງໃນການຕັ້ງຄ່າຄວາມເປັນເອກະລັກຂອງຂໍ້ມູນຂອງທ່ານແມ່ນການເພີ່ມດັດຊະນີ UNIQUE ແບບນີ້:

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10)
   UNIQUE (last_name, first_name)
);

ສະຖິຕິຂໍ້ມູນຊໍ້າກັນ

ຂ້າງລຸ່ມນີ້ພວກເຮົາຈະນັບຈໍານວນການຊ້ໍາກັນຂອງ first_name ແລະ last_name ໃນຕາຕະລາງ:

mysql> SELECT COUNT(*) as repetitions, last_name, first_name
    -> FROM person_tbl
    -> GROUP BY last_name, first_name
    -> HAVING repetitions > 1;

ຄໍາຖະແຫຼງການສອບຖາມຂ້າງເທິງຈະສົ່ງຄືນຈໍານວນບັນທຶກທີ່ຊ້ໍາກັນໃນຕາຕະລາງ person_tbl.ໂດຍທົ່ວໄປ, ເພື່ອສອບຖາມສໍາລັບຄ່າທີ່ຊ້ໍາກັນ, ເຮັດດັ່ງຕໍ່ໄປນີ້:

  • ກໍານົດວ່າຖັນໃດມີຄ່າຊໍ້າກັນທີ່ເປັນໄປໄດ້.
  • ໃຊ້ COUNT(*) ໃນຖັນເລືອກລາຍການເພື່ອສະແດງລາຍການຖັນເຫຼົ່ານັ້ນ.
  • ຖັນທີ່ລະບຸໄວ້ໃນ GROUP BY clause.
  • ຂໍ້ HAVING ກຳນົດຈຳນວນການຊ້ຳກັນຫຼາຍກວ່າ 1.

ກັ່ນຕອງຂໍ້ມູນຊໍ້າກັນ

ຖ້າທ່ານຕ້ອງການອ່ານຂໍ້ມູນທີ່ເປັນເອກະລັກ, ທ່ານສາມາດນໍາໃຊ້ຄໍາສໍາຄັນ DISTINCT ໃນຄໍາສັ່ງ SELECT ເພື່ອກັ່ນຕອງຂໍ້ມູນທີ່ຊ້ໍາກັນ.

mysql> SELECT DISTINCT last_name, first_name
    -> FROM person_tbl;

ທ່ານຍັງສາມາດໃຊ້ GROUP BY ເພື່ອອ່ານຂໍ້ມູນທີ່ເປັນເອກະລັກຈາກຕາຕະລາງ:

mysql> SELECT last_name, first_name
    -> FROM person_tbl
    -> GROUP BY (last_name, first_name);

ຂໍ້ມູນຊໍ້າກັນ

ຖ້າທ່ານຕ້ອງການລຶບຂໍ້ມູນທີ່ຊ້ໍາກັນໃນຕາຕະລາງຂໍ້ມູນ, ທ່ານສາມາດນໍາໃຊ້ຄໍາສັ່ງ SQL ຕໍ່ໄປນີ້:

mysql> CREATE TABLE tmp SELECT last_name, first_name, sex
    ->                  FROM person_tbl;
    ->                  GROUP BY (last_name, first_name, sex);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;

ແນ່ນອນ, ທ່ານຍັງສາມາດເພີ່ມ INDEX (ດັດສະນີ) ແລະ PRIMAY KEY (ກຸນແຈຕົ້ນຕໍ) ໃນຕາຕະລາງຂໍ້ມູນເພື່ອລຶບບັນທຶກທີ່ຊ້ໍາກັນຢູ່ໃນຕາຕະລາງ.ວິ​ທີ​ການ​ດັ່ງ​ລຸ່ມ​ນີ້​:

mysql> ALTER IGNORE TABLE person_tbl
    -> ADD PRIMARY KEY (last_name, first_name);

ຫວັງ Chen Weiliang Blog ( https://www.chenweiliang.com/ ) shared "ການສອບຖາມ MySQL ແລະຈັດການກັບຂໍ້ມູນທີ່ຊ້ໍາກັນແນວໃດ?ການ​ກັ່ນ​ຕອງ​ແລະ​ລາຍ​ງານ​ການ​ລົບ​ລ້າງ​" ຈະ​ຊ່ວຍ​ໃຫ້​ທ່ານ​.

ຍິນດີຕ້ອນຮັບແບ່ງປັນການເຊື່ອມຕໍ່ຂອງບົດຄວາມນີ້:https://www.chenweiliang.com/cwl-499.html

ຍິນດີຕ້ອນຮັບສູ່ຊ່ອງ Telegram ຂອງບລັອກຂອງ Chen Weiliang ເພື່ອຮັບອັບເດດຫຼ້າສຸດ!

🔔 ເປັນຜູ້ທຳອິດທີ່ໄດ້ຮັບ "ຄູ່ມືການໃຊ້ເຄື່ອງມືການຕະຫຼາດເນື້ອຫາ ChatGPT AI" ທີ່ມີຄຸນຄ່າໃນລາຍການທາງເທິງ! 🌟
📚ຄູ່ມືນີ້ມີຄຸນຄ່າອັນມະຫາສານ, 🌟ນີ້ເປັນໂອກາດທີ່ຫາຍາກ, ຢ່າພາດມັນ! ⏰⌛💨
Share and like ຖ້າມັກ!
ການ​ແບ່ງ​ປັນ​ແລະ​ການ​ຖືກ​ໃຈ​ຂອງ​ທ່ານ​ແມ່ນ​ການ​ຊຸກ​ຍູ້​ຢ່າງ​ຕໍ່​ເນື່ອງ​ຂອງ​ພວກ​ເຮົາ​!

 

评论评论

ທີ່ຢູ່ອີເມວຂອງທ່ານຈະບໍ່ຖືກເຜີຍແຜ່. ທົ່ງນາທີ່ກໍານົດໄວ້ແມ່ນຖືກນໍາໃຊ້ * ປ້າຍ ກຳ ກັບ

ເລື່ອນໄປເທິງສຸດ