ລາຍການຫົວເລື່ອງ
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 ເພື່ອຮັບອັບເດດຫຼ້າສຸດ!
📚ຄູ່ມືນີ້ມີຄຸນຄ່າອັນມະຫາສານ, 🌟ນີ້ເປັນໂອກາດທີ່ຫາຍາກ, ຢ່າພາດມັນ! ⏰⌛💨
Share and like ຖ້າມັກ!
ການແບ່ງປັນແລະການຖືກໃຈຂອງທ່ານແມ່ນການຊຸກຍູ້ຢ່າງຕໍ່ເນື່ອງຂອງພວກເຮົາ!