ລາຍການຫົວເລື່ອງ
ປະເພດດັດຊະນີ/ການສ້າງ/ການນຳໃຊ້ລວມກັນ ຂອງ MySQL ແລະ ການນຳໃຊ້ຄຳສັ່ງ ALTER ໃນ MySQL.
ດັດສະນີ MySQL
ການສ້າງດັດສະນີ MySQL ມີຄວາມສໍາຄັນຫຼາຍສໍາລັບການປະຕິບັດງານທີ່ມີປະສິດທິພາບຂອງ MySQL, ແລະດັດສະນີສາມາດປັບປຸງຄວາມໄວໃນການດຶງຂໍ້ມູນຂອງ MySQL ຢ່າງຫຼວງຫຼາຍ.
ຕົວຢ່າງ, ຖ້າ MySQL ທີ່ມີການອອກແບບທີ່ສົມເຫດສົມຜົນແລະການນໍາໃຊ້ດັດສະນີແມ່ນ Lamborghini, ຫຼັງຈາກນັ້ນ MySQL ທີ່ບໍ່ມີດັດສະນີແລະດັດສະນີແມ່ນສາມລໍ້ຂອງມະນຸດ.
ດັດຊະນີແບ່ງອອກເປັນດັດຊະນີຄໍລຳດຽວ ແລະ ດັດຊະນີປະສົມ.ດັດຊະນີຖັນດຽວ, ນັ້ນແມ່ນ, ດັດຊະນີມີພຽງຖັນດຽວ, ຕາຕະລາງສາມາດມີດັດຊະນີຖັນດຽວຫຼາຍ, ແຕ່ນີ້ບໍ່ແມ່ນດັດຊະນີປະສົມ.ດັດຊະນີປະສົມ, ນັ້ນແມ່ນ, ດັດຊະນີປະກອບດ້ວຍຫຼາຍຖັນ.
ເມື່ອສ້າງດັດສະນີ, ທ່ານຈໍາເປັນຕ້ອງໃຫ້ແນ່ໃຈວ່າດັດສະນີແມ່ນເງື່ອນໄຂທີ່ໃຊ້ກັບຄໍາຖາມ SQL (ໂດຍທົ່ວໄປເປັນເງື່ອນໄຂຂອງ WHERE clause).
ໃນຄວາມເປັນຈິງ, ດັດຊະນີຍັງເປັນຕາຕະລາງ, ຕາຕະລາງບັນທຶກຂໍ້ມູນຕົ້ນຕໍແລະດັດສະນີ, ແລະຊີ້ໃຫ້ເຫັນບັນທຶກຂອງຕາຕະລາງຫນ່ວຍງານ.
ຂ້າງເທິງນີ້ແມ່ນເວົ້າກ່ຽວກັບຜົນປະໂຫຍດຂອງການນໍາໃຊ້ດັດສະນີ, ແຕ່ການນໍາໃຊ້ດັດສະນີຫຼາຍເກີນໄປຈະນໍາໄປສູ່ການລ່ວງລະເມີດ.ດັ່ງນັ້ນ, ດັດຊະນີຍັງຈະມີຂໍ້ບົກຜ່ອງຂອງມັນ: ເຖິງແມ່ນວ່າດັດຊະນີຈະປັບປຸງຄວາມໄວການສອບຖາມຢ່າງຫຼວງຫຼາຍ, ມັນຈະຫຼຸດລົງຄວາມໄວໃນການປັບປຸງຕາຕະລາງເຊັ່ນ INSERT, UPDATE ແລະ DELETE ຂອງຕາຕະລາງ.ເນື່ອງຈາກວ່າໃນເວລາທີ່ການປັບປຸງຕາຕະລາງ, MySQL ບໍ່ພຽງແຕ່ຊ່ວຍປະຢັດຂໍ້ມູນ, ແຕ່ຍັງຊ່ວຍປະຢັດໄຟລ໌ດັດສະນີ.
ການສ້າງດັດຊະນີໄຟລ໌ດັດສະນີທີ່ກິນພື້ນທີ່ດິສກ໌.
ດັດຊະນີປົກກະຕິ
ສ້າງດັດສະນີ
ນີ້ແມ່ນດັດຊະນີພື້ນຖານທີ່ສຸດ, ມັນບໍ່ມີຂໍ້ຈໍາກັດ.ມັນສາມາດໄດ້ຮັບການສ້າງຕັ້ງຂຶ້ນໃນວິທີການດັ່ງຕໍ່ໄປນີ້:
CREATE INDEX indexName ON mytable(username(length));
ສໍາລັບປະເພດ CHAR ແລະ VARCHAR, ຄວາມຍາວສາມາດໜ້ອຍກວ່າຄວາມຍາວຕົວຈິງຂອງຊ່ອງຂໍ້ມູນ; ສໍາລັບປະເພດ BLOB ແລະ TEXT, ຄວາມຍາວຈະຕ້ອງລະບຸ.
ແກ້ໄຂໂຄງສ້າງຕາຕະລາງ (ເພີ່ມດັດສະນີ)
ALTER table tableName ADD INDEX indexName(columnName)
ລະບຸໂດຍກົງໃນເວລາສ້າງຕາຕະລາງ
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) );
Syntax ເພື່ອຫຼຸດດັດຊະນີ
DROP INDEX [indexName] ON mytable;
ດັດຊະນີທີ່ເປັນເອກະລັກ
ມັນຄ້າຍຄືກັນກັບດັດສະນີທໍາມະດາທີ່ຜ່ານມາ, ຄວາມແຕກຕ່າງແມ່ນ: ມູນຄ່າຂອງຄໍລໍາດັດສະນີຕ້ອງເປັນເອກະລັກ, ແຕ່ຄ່າ null ແມ່ນອະນຸຍາດໃຫ້.ໃນກໍລະນີຂອງດັດສະນີປະສົມປະສານ, ການປະສົມປະສານຂອງຄ່າຄໍລໍາຕ້ອງເປັນເອກະລັກ.ມັນສາມາດໄດ້ຮັບການສ້າງຕັ້ງຂຶ້ນໃນວິທີການດັ່ງຕໍ່ໄປນີ້:
ສ້າງດັດສະນີ
CREATE UNIQUE INDEX indexName ON mytable(username(length))
ປັບປຸງໂຄງສ້າງຕາຕະລາງ
ALTER table mytable ADD UNIQUE [indexName] (username(length))
ລະບຸໂດຍກົງໃນເວລາສ້າງຕາຕະລາງ
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );
ເພີ່ມແລະເອົາດັດສະນີໂດຍໃຊ້ຄໍາສັ່ງ ALTER
ມີສີ່ວິທີທີ່ຈະເພີ່ມດັດຊະນີໃສ່ຕາຕະລາງຂໍ້ມູນ:
- ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): ຄໍາຖະແຫຼງການນີ້ເພີ່ມລະຫັດຫຼັກ, ຊຶ່ງຫມາຍຄວາມວ່າຄ່າດັດສະນີຕ້ອງເປັນເອກະລັກແລະບໍ່ສາມາດເປັນ NULL.
- ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): ມູນຄ່າຂອງດັດຊະນີທີ່ສ້າງຂຶ້ນໂດຍຄໍາຖະແຫຼງນີ້ຕ້ອງເປັນເອກະລັກ (ຍົກເວັ້ນ NULL, NULL ອາດຈະປາກົດຫຼາຍຄັ້ງ).
- ALTER TABLE tbl_name ADD INDEX index_name (column_list): ເພີ່ມດັດຊະນີປົກກະຕິ, ມູນຄ່າດັດສະນີສາມາດປາກົດຫຼາຍຄັ້ງ.
- ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):ຄໍາຖະແຫຼງການກໍານົດດັດຊະນີເປັນ FULLTEXT ສໍາລັບການດັດສະນີຂໍ້ຄວາມເຕັມ.
ຕົວຢ່າງຕໍ່ໄປນີ້ແມ່ນການເພີ່ມດັດສະນີໃສ່ຕາຕະລາງ.
mysql> ALTER TABLE testalter_tbl ADD INDEX (c);
ທ່ານຍັງສາມາດໃຊ້ DROP clause ໃນຄໍາສັ່ງ ALTER ເພື່ອຫຼຸດລົງດັດສະນີ.ລອງໃຊ້ຕົວຢ່າງຕໍ່ໄປນີ້ເພື່ອຫຼຸດດັດຊະນີ:
mysql> ALTER TABLE testalter_tbl DROP INDEX c;
ເພີ່ມ ແລະເອົາກະແຈຫຼັກອອກໂດຍໃຊ້ຄຳສັ່ງ ALTER
ກະແຈຫຼັກສາມາດປະຕິບັດໄດ້ພຽງແຕ່ຖັນດຽວເທົ່ານັ້ນ. ເມື່ອເພີ່ມດັດຊະນີຫຼັກຫຼັກ, ເຈົ້າຕ້ອງຮັບປະກັນວ່າກະແຈຫຼັກບໍ່ແມ່ນ NULL ຕາມຄ່າເລີ່ມຕົ້ນ (ບໍ່ແມ່ນ NULL).ຕົວຢ່າງມີດັ່ງນີ້:
mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL; mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);
ນອກນັ້ນທ່ານຍັງສາມາດລຶບລະຫັດຫຼັກດ້ວຍຄໍາສັ່ງ ALTER:
mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;
ທ່ານພຽງແຕ່ຕ້ອງການລະບຸ PRIMARY KEY ເມື່ອລົງລະຫັດຫຼັກ, ແຕ່ເມື່ອຫຼຸດລົງດັດຊະນີ, ທ່ານຕ້ອງຮູ້ຊື່ດັດສະນີ.
ສະແດງຂໍ້ມູນດັດສະນີ
ທ່ານສາມາດນໍາໃຊ້ຄໍາສັ່ງ SHOW INDEX ເພື່ອລາຍຊື່ຂໍ້ມູນດັດສະນີທີ່ກ່ຽວຂ້ອງໃນຕາຕະລາງ.ຂໍ້ມູນຜົນຜະລິດສາມາດຖືກຈັດຮູບແບບໂດຍການເພີ່ມ \G.
ລອງໃຊ້ຕົວຢ່າງຕໍ່ໄປນີ້:
mysql> SHOW INDEX FROM table_name; \G ........
ຫວັງວ່າ ບົດຄວາມ "ປະເພດດັດຊະນີຖານຂໍ້ມູນ MySQL/ການສ້າງ/ການນຳໃຊ້ຄຳສັ່ງ ALTER ລວມໃນ MySQL" ທີ່ແບ່ງປັນໃນ ບລັອກຂອງ Chen Weiliang ( https://www.chenweiliang.com/ ) ຈະເປັນປະໂຫຍດຕໍ່ທ່ານ.
ຮູ້ສຶກວ່າບໍ່ເສຍຄ່າທີ່ຈະແບ່ງປັນລິ້ງຂອງບົດຄວາມນີ້: https://www.chenweiliang.com/cwl-496.html
