Home / Server Side / ຖານຂໍ້ມູນ MySQL / ຄຳສັ່ງ Table & Views
ຕາຕະລາງຖືກນໍາໃຊ້ເພື່ອຈັດລະບຽບຂໍ້ມູນໃນຮູບແບບຂອງແຖວແລະຖັນແລະໃຊ້ສໍາລັບທັງເກັບຮັກສາແລະສະແດງບັນທຶກໃນຮູບແບບໂຄງສ້າງ. ມັນຄ້າຍຄື Excel. ຄໍາສັ່ງສ້າງຕາຕະລາງຕ້ອງການສາມຢ່າງ:
ຊື່ຂອງຕາຕະລາງ table_name
ຊື່ຂອງຖັນ ຫຼື ຊ່ອງຂໍ້ມູນ column
ປະເພດຂໍ້ມູນ datatype
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
PRIMARY KEY (column1)
);
table_name ຊື່ຂອງຕາຕະລາງ
column1 ຊື່ຂອງຫົວຂໍ້ຕາຕະລາງ
datatype ປະເພດຂໍ້ມູນທີ່ຕ້ອງການຈັດເກັບ
PRIMARY KEY ກຳນົດຄີໃຫ້ຕາຕະລາງ
CHAR(size) ສະຕຣິງຄວາມຍາວ FIXED (ສາມາດມີຕົວອັກສອນ, ຕົວເລກ ແລະຕົວອັກສອນພິເສດ). ຕົວກໍານົດການຂະຫນາດກໍານົດຄວາມຍາວຖັນໃນຕົວອັກສອນ - ສາມາດຕັ້ງແຕ່ 0 ຫາ 255. ຄ່າເລີ່ມຕົ້ນແມ່ນ 1.
VARCHAR(size) ສະຕຣິງຄວາມຍາວຂອງຕົວແປ (ສາມາດມີຕົວອັກສອນ, ຕົວເລກ ແລະຕົວອັກສອນພິເສດ). ພາລາມິເຕີຂະຫນາດກໍານົດຄວາມຍາວຂອງຖັນສູງສຸດໃນຕົວອັກສອນ - ສາມາດຕັ້ງແຕ່ 0 ຫາ 65535
BINARY(size) ເທົ່າກັບ CHAR(), ແຕ່ເກັບຮັກສາ binary byte strings. ຕົວກໍານົດການຂະຫນາດກໍານົດຄວາມຍາວຖັນເປັນ bytes. ຄ່າເລີ່ມຕົ້ນແມ່ນ 1
VARBINARY(size) ເທົ່າກັບ VARCHAR(), ແຕ່ເກັບຮັກສາ binary byte strings. ຕົວກໍານົດການຂະຫນາດກໍານົດຄວາມຍາວຖັນສູງສຸດໃນ bytes.
TINYBLOB ສຳລັບ BLOBs (Binary Large Objects). ຄວາມຍາວສູງສຸດ: 255 bytes
TINYTEXT ຖືສະຕຣິງທີ່ມີຄວາມຍາວສູງສຸດ 255 ຕົວອັກສອນ
TEXT(size) ຖືສະຕຣິງທີ່ມີຄວາມຍາວສູງສຸດ 65,535 ໄບຕ໌
BLOB(size) ສຳລັບ BLOBs (Binary Large Objects). ຖືຂໍ້ມູນໄດ້ເຖິງ 65,535 bytes
MEDIUMTEXT ຖືສະຕຣິງທີ່ມີຄວາມຍາວສູງສຸດ 16,777,215 ຕົວອັກສອນ
MEDIUMBLOB ສຳລັບ BLOBs (Binary Large Objects). ຖືຂໍ້ມູນໄດ້ເຖິງ 16,777,215 bytes
LONGTEXT ຖືສະຕຣິງທີ່ມີຄວາມຍາວສູງສຸດ 4,294,967,295 ຕົວອັກສອນ
LONGBLOB ສຳລັບ BLOBs (Binary Large Objects). ຖືຂໍ້ມູນໄດ້ເຖິງ 4,294,967,295 bytes
ENUM(val1, val2, val3, ...) ວັດຖຸສະຕຣິງທີ່ສາມາດມີພຽງແຕ່ຄ່າດຽວ, ເລືອກ ຈາກບັນຊີລາຍຊື່ຂອງຄ່າທີ່ເປັນໄປໄດ້. ທ່ານສາມາດລາຍຊື່ໄດ້ເຖິງ 65535 ຄ່າໃນບັນຊີລາຍຊື່ ENUM. ຖ້າຄ່າໃດນຶ່ງຖືກໃສ່ທີ່ບໍ່ໄດ້ຢູ່ໃນລາຍການ, ຄ່າຫວ່າງເປົ່າຈະຖືກໃສ່ໃສ່. ຄ່າຖືກຈັດຮຽງຕາມລຳດັບທີ່ທ່ານໃສ່ພວກມັນ
SET(val1, val2, val3, ...) ວັດຖຸສະຕຣິງທີ່ສາມາດມີຄ່າ 0 ຫຼືຫຼາຍກວ່ານັ້ນ, ເລືອກຈາກລາຍຊື່ຂອງຄ່າທີ່ເປັນໄປໄດ້. ທ່ານສາມາດສະແດງເຖິງ 64 ຄ່າໃນບັນຊີລາຍຊື່ SET
BIT(size) ປະເພດບິດມູນຄ່າ. ຈໍານວນບິດຕໍ່ຄ່າແມ່ນລະບຸໃນຂະຫນາດ. ຕົວກໍານົດຂະຫນາດສາມາດຖືຄ່າຈາກ 1 ຫາ 64. ຄ່າເລີ່ມຕົ້ນຂອງຂະຫນາດແມ່ນ 1.
TINYINT(size) ຈຳນວນໜ້ອຍຫຼາຍ. ໄລຍະເຊັນຊື່ແມ່ນຕັ້ງແຕ່ -128 ຫາ 127. ຊ່ວງທີ່ບໍ່ໄດ້ເຊັນແມ່ນຕັ້ງແຕ່ 0 ຫາ 255. ພາຣາມິເຕີຂະໜາດກຳນົດຄວາມກວ້າງຂອງການສະແດງຜົນສູງສຸດ (ເຊິ່ງແມ່ນ 255)
BOOL ສູນຖືກພິຈາລະນາເປັນຜິດ, ຄ່າທີ່ບໍ່ແມ່ນສູນແມ່ນຖືວ່າເປັນຄວາມຈິງ.
BOOLEAN ເທົ່າກັບ BOOL
SMALLINT(size) ຈຳນວນໜ້ອຍ. ໄລຍະເຊັນຊື່ແມ່ນຕັ້ງແຕ່ -32768 ຫາ 32767. ຊ່ວງທີ່ບໍ່ໄດ້ເຊັນແມ່ນຕັ້ງແຕ່ 0 ຫາ 65535. ພາຣາມິເຕີຂະໜາດລະບຸຄວາມກວ້າງຂອງການສະແດງຜົນສູງສຸດ (ເຊິ່ງແມ່ນ 255)
MEDIUMINT(size) ຈຳນວນຂະໜາດກາງ. ຊ່ວງທີ່ລົງນາມແມ່ນຕັ້ງແຕ່ -8388608 ຫາ 8388607. ຊ່ວງທີ່ບໍ່ໄດ້ເຊັນແມ່ນຕັ້ງແຕ່ 0 ຫາ 16777215. ພາຣາມິເຕີຂະໜາດລະບຸຄວາມກວ້າງຂອງຈໍສະແດງຜົນສູງສຸດ (ເຊິ່ງແມ່ນ 255)
INT(size) ຈຳນວນຂະໜາດກາງ. ຊ່ວງທີ່ລົງນາມແມ່ນຕັ້ງແຕ່ -2147483648 ຫາ 2147483647. ຊ່ວງທີ່ບໍ່ໄດ້ເຊັນແມ່ນຕັ້ງແຕ່ 0 ຫາ 4294967295. ພາຣາມິເຕີຂະໜາດລະບຸຄວາມກວ້າງຂອງຈໍສະແດງຜົນສູງສຸດ (ເຊິ່ງແມ່ນ 255)
INTEGER(size) ເທົ່າກັບ INT(ຂະໜາດ)
BIGINT(size) ຈຳນວນເຕັມ. ໄລຍະເຊັນຊື່ແມ່ນຕັ້ງແຕ່ -9223372036854775808 ຫາ 9223372036854775807. ຊ່ວງທີ່ບໍ່ໄດ້ເຊັນແມ່ນຕັ້ງແຕ່ 0 ຫາ 18446744073709551615. ພາຣາມິເຕີຂະໜາດລະບຸຄວາມກວ້າງຂອງຈໍສະແດງຜົນສູງສຸດ (ເຊິ່ງແມ່ນ 255).
FLOAT(size, d) ຕົວເລກຈຸດລອຍ. ຈຳນວນຕົວເລກທັງໝົດແມ່ນລະບຸໃນຂະໜາດ. ຈໍານວນຕົວເລກຫຼັງຈາກຈຸດທົດສະນິຍົມແມ່ນລະບຸໄວ້ໃນພາລາມິເຕີ d. syntax ນີ້ຖືກຍົກເລີກໃນ MySQL 8.0.17, ແລະມັນຈະຖືກລຶບອອກໃນ MySQL ຮຸ່ນໃນອະນາຄົດ
FLOAT(p) ຕົວເລກຈຸດລອຍ. MySQL ໃຊ້ຄ່າ p ເພື່ອກໍານົດວ່າຈະໃຊ້ FLOAT ຫຼື DOUBLE ສໍາລັບປະເພດຂໍ້ມູນຜົນໄດ້ຮັບ. ຖ້າ p ແມ່ນຕັ້ງແຕ່ 0 ຫາ 24, ປະເພດຂໍ້ມູນຈະກາຍເປັນ FLOAT(). ຖ້າ p ແມ່ນຕັ້ງແຕ່ 25 ຫາ 53, ປະເພດຂໍ້ມູນຈະກາຍເປັນ DOUBLE()
DOUBLE(size, d) ຕົວເລກຈຸດລອຍຂະໜາດປົກກະຕິ. ຈຳນວນຕົວເລກທັງໝົດແມ່ນລະບຸໃນຂະໜາດ. ຈໍານວນຕົວເລກຫຼັງຈາກຈຸດທົດສະນິຍົມແມ່ນລະບຸໄວ້ໃນພາລາມິເຕີ d
DOUBLE PRECISION(size, d)
DECIMAL(size, d) ຕົວເລກຈຸດຄົງທີ່ທີ່ແນ່ນອນ. ຈຳນວນຕົວເລກທັງໝົດແມ່ນລະບຸໃນຂະໜາດ. ຈໍານວນຕົວເລກຫຼັງຈາກຈຸດທົດສະນິຍົມແມ່ນລະບຸໄວ້ໃນພາລາມິເຕີ d. ຈໍານວນສູງສຸດສໍາລັບຂະຫນາດແມ່ນ 65. ຈໍານວນສູງສຸດສໍາລັບ d ແມ່ນ 30. ຄ່າເລີ່ມຕົ້ນສໍາລັບຂະຫນາດແມ່ນ 10. ຄ່າເລີ່ມຕົ້ນຂອງ d ແມ່ນ 0.
DEC(size, d) ເທົ່າກັບ DECIMAL(size,d)
DATE ວັນທີ. ຮູບແບບ: YYYY-MM-DD. ຂອບເຂດທີ່ຮອງຮັບແມ່ນຕັ້ງແຕ່ '1000-01-01' ຫາ '9999-12-31'
DATETIME(fsp) ການປະສົມປະສານວັນທີ ແລະເວລາ. ຮູບແບບ: YYYY-MM-DD hh:mm:ss. ຊ່ວງທີ່ຮອງຮັບແມ່ນຈາກ '1000-01-01 00:00:00' ຫາ '9999-12-31 23:59:59'. ເພີ່ມ DEFAULT ແລະ ON UPDATE ໃນຄໍານິຍາມຖັນເພື່ອໃຫ້ໄດ້ຮັບການເລີ່ມຕົ້ນອັດຕະໂນມັດແລະການປັບປຸງກັບວັນທີແລະເວລາປະຈຸບັນ.
TIMESTAMP(fsp) ສະແຕມເວລາ. ຄ່າ TIMESTAMP ຖືກເກັບໄວ້ເປັນຈໍານວນວິນາທີນັບຕັ້ງແຕ່ Unix epoch ('1970-01-01 00:00:00' UTC). ຮູບແບບ: YYYY-MM-DD hh:mm:ss. ຂອບເຂດທີ່ສະຫນັບສະຫນູນແມ່ນຈາກ '1970-01-01 00:00:01' UTC ຫາ '2038-01-09 03:14:07' UTC. ການເລີ່ມຕົ້ນອັດຕະໂນມັດແລະການອັບເດດເປັນວັນທີແລະເວລາປະຈຸບັນສາມາດຖືກກໍານົດໂດຍໃຊ້ DEFAULT CURRENT_TIMESTAMP ແລະ ON UPDATE CURRENT_TIMESTAMP ໃນຄໍານິຍາມຖັນ.
TIME(fsp) ເວລາ. ຮູບແບບ: hh:mm:ss. ຊ່ວງທີ່ຮອງຮັບແມ່ນຕັ້ງແຕ່ '-838:59:59' ຫາ '838:59:59'
YEAR ປີໃນຮູບແບບສີ່ຕົວເລກ. ຄ່າທີ່ອະນຸຍາດໃນຮູບແບບສີ່ຕົວເລກ: 1901 ຫາ 2155, ແລະ 0000. MySQL 8.0 ບໍ່ຮອງຮັບປີໃນຮູບແບບສອງຕົວເລກ.
ຕົວຢ່າງຕໍ່ໄປນີ້ແມ່ນການສ້າງຕາຕະລາງຂອງບຸກຄົນ ທີ່ມີຂໍ້ມູນ 5 ຢ່າງເຊັ່ນ PersonID, LastName, FirstName, Address, and City
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255),
Primary key(PersonID)
);
ALTER TABLE ໃຊ້ເພື່ອ ເພີ່ມ,ລົບ ຫຼື ແກ້ໄຂ Column ທີ່ມີຢູ່ໃນຕາຕະລາງ ນອກຈາກນັ້ນຍັງສາມາດແກ້ໄຂປະເພດຂໍ້ມູນຂອງຕາຕະລາງ
ADD ເພີ່ມ Column
ADD ເພີ່ມຫຼາຍ columns
MODIFY ແກ້ໄຂ column
DROP ລົບ column
CHANGE ປ່ຽນຊື່ column
RENAME TO ປ່ຽນຊື່ຕາຕະລາງ
ADD ເຮົາໃຊ້ເພື່ອເພີ່ມຈຳນວນ column ໃນຕາຕະລາງ
Syntax:
ALTER TABLE table_name
ADD new_column_name column_definition
[ FIRST | AFTER column_name ];
new_column_name: ລະບຸຊື່ Column ທີ່ຕ້ອງການເພີ່ມລົງໃນຕາຕະລາງ
column_definition: ລະບຸປະເພດຂໍ້ມູນ ແລະ ຄຳຈຳກັດຄວາມຂອງ Column(Null ຫຼື Not Null)
FIRST | AFTER column_name: ເປັນທາງເລືອກບອກ MySQL ວ່າຈະສ້າງ Column ໃໝ່ໃສ່ກ່ອນຫຼືຫຼັງ Column ທີ່ມີຢູ່ໃນຕາຕະລາງ ຖ້າບໍລະບຸ Column ໃໝ່ຈະຖືກສ້າງທີ່ສ່ວນທ້າຍຂອງຕາຕະລາງ
Example:
ໃນຕົວຢ່າງນີ້ ເຮົາຈະເພີ່ມ Column ໃໝ່ "cus_age" ໃນຕາຕະລາງ "cus_tbl".
ALTER TABLE cus_tbl
ADD cus_age varchar(40) NOT NULL;
SELECT* FROM cus_tbl;
Syntax:
ALTER TABLE table_name
ADD new_column_name datatype
[ FIRST | AFTER column_name ],
ADD new_column_name datatype
[ FIRST | AFTER column_name ],
...
;
ໃນຕົວຢ່າງນີ້ ເຮົາເພີ່ມສອງ Column ໃໝ່ "cus_address", ແລະ cus_salary ໃນຕາຕະລາງ "cus_tbl" ຮູບແບບການເພີ່ມແມ່ນ cus_address ເພີ່ມຫຼັງ Column cus_surname ແລະ cus_salary ເພີ່ມຫຼັງ Column cus_age
ALTER TABLE cus_tbl
ADD cus_address varchar(100) NOT NULL
AFTER cus_surname,
ADD cus_salary int(100) NOT NULL
AFTER cus_age ;
SELECT* FROM cus_tbl;
Syntax:
ALTER TABLE table_name
MODIFY column_name column_definition
[ FIRST | AFTER column_name ];
ໃນຕົວຢ່າງນີ້ ເຮົາແກ້ໄຂ Column cus_surname ໃຫ້ເປັນ varchar(50) ແລະ ກຳນົດໃຫ້ອານຸຍາດມີຄ່າ NULL ໄດ້
ALTER TABLE cus_tbl
MODIFY cus_surname varchar(50) NULL;
ໂຄງສ້າງຕາຕະລາງປ່ຽນແປງ
Syntax:
ALTER TABLE table_name
DROP COLUMN column_name;
ມາເບິ່ງຕົວຢ່າງການລົບ Column "cus_address" ຈາກຕາຕະລາງ "cus_tbl".
ALTER TABLE cus_tbl
DROP COLUMN cus_address;
ໂຄງສ້າງຕາຕະລາງປ່ຽນແປງ
Syntax:
ALTER TABLE table_name
CHANGE COLUMN old_name new_name
column_definition
[ FIRST | AFTER column_name ]
ໃນຕົວຢ່າງນີ້ເຮົາຈະປ່ຽນຊື່ Column "cus_surname" ໄປເປັນ "cus_title"
ALTER TABLE cus_tbl
CHANGE COLUMN cus_surname cus_title
varchar(20) NOT NULL;
Syntax:
ALTER TABLE table_name
RENAME TO new_table_name;
ໃນຕົວຢ່າງນີ້ເຮົາປ່ຽນຊື່ຕາຕະລາງ cus_tbl ໄປເປັນ cus_table
ALTER TABLE cus_tbl
RENAME TO cus_table;
ໂຄງສ້າງຕາຕະລາງປ່ຽນແປງ
ຄຳສັ່ງ TRUNCATE ໃນ MySQL ຈະເປັນການລົບຂໍ້ມູນທັງໝົດໂດຍບໍ່ລົບໂຄງສ້າງຂອງຕາຕະລາງອອກເປັນສ່ວນໜຶ່ງຂອງພາສາ DDL ຄຳສັ່ງ TRUNCATE ຈະເຮັດວຽກຄືກັບຄຳສັ່ງ Delete ໂດຍບໍ່ຕ້ອງໃຊ້ຄຳສັ່ງ Where ໂດຍທົ່ວໄປແລ້ວຄຳສັ່ງ TRUNCATE ຈະມີປະສິດທິພາບກ່ວາຄຳສັ່ງ Delete ເພາະການເຮັດວຽກແມ່ນຈະລົບຕາຕາລາງອອກແລ້ວສ້າງຂື້ນມາໃໝ່ແທນທີ່ຈະລົບເທື່ອລະລາຍການດັ່ງນັ້ນການລົບຂໍ້ມູນຈຶ່ງໄວ ແລະ ມີປະສິດທິພາບສູງສຸດ
Syntax
TRUNCATE [TABLE] table_name;
Truncate Table Example
ໃນຕົວຢ່າງນີ້ເຮົາຈະທົດລອງສ້າງຕາຕະລາງລູກຄ້າຂື້ນມາ customer ຈາກນັ້ນເຮົາຈະເພີ່ມຂໍ້ມູນເຂົ້າໄປໃນຕາຕະລາງ
CREATE TABLE customer (
Id int PRIMARY KEY NOT NULL,
Name varchar(45) NOT NULL,
Product varchar(45) DEFAULT NULL,
Country varchar(25) DEFAULT NULL,
Year int NOT NULL
);
ຕໍ່ໄປຈະເພີ່ມຂໍ້ມູນລົງໄປໃນຕະລາງ Customer
INSERT INTO customer ( Id, Name, Product, Country, Year)
VALUES (1, 'Stephen', 'Computer', 'USA', 2015),
(2, 'Joseph', 'Laptop', 'India', 2016),
(3, 'John', 'TV', 'USA', 2016),
(4, 'Donald', 'Laptop', 'England', 2015),
(5, 'Joseph', 'Mobile', 'India', 2015),
(6, 'Peter', 'Mouse', 'England', 2016);
ຕໍ່ໄປເຮົາຈະໃຊ້ຄຳສັ່ງ Select ເພື່ອດຶງຂໍ້ມູນໃນຕາຕະລາງ
mysql> SELECT * FROM customer;
ໃນປັດຈຸບັນ, ໃຊ້ຄຳສັ່ງຕໍ່ໄປນີ້ລົບຂໍ້ມູນລູກຄ້າຕາຕະລາງໂດຍໃຊ້ TRUNCATE ທີ່ສົນທະນາຂ້າງເທິງ:
mysql> TRUNCATE TABLE customer;
ດັ່ງທີ່ເຮົາເຫັນ ຂໍ້ມູນທີ່ສົ່ງກັບມາເປັນ 0 ແຖວເຮົາສາມາດກວດສອບການລົບຂໍ້ມູນໄດ້ໂດຍດຳເນີນການຄຳສັ່ງ SELECT ອີກເທື່ອ ຄຳສັ່ງນີ້ໃຫ້ຜົນຕໍ່ໄປນີ້
ເປັນຄຳສັ່ງທີ່ໃຊ້ໄວ້ສະແດງໂຄງສ້າງຂອງຕາຕະລາງທີ່ເຮົາຕ້ອງການ ລະບົບຈະສະແດງຂອງມູນທັງໝົດຂື້ນມາໃຫ້ເຮົາເຫັນ
Syntax
{DESCRIBE | DESC} table_name;
ຫາກເຮົາຕ້ອງການສະແດງຂໍ້ມູນຄໍລັມນ໌ເພິ່ມເຕິມ ເຮົາຈຳເປັນຕ້ອງເພີ່ມໃຊ້ຄິເວີດ FULL ດ້ວຍຄຳສັ່ງ SHOW TABLES ດັ່ງນີ້:
SHOW FULL COLUMNS FROM table_name;
ຕົວຢ່າງເຊັ່ນ ຫາກເຮົາຕ້ອງການສະແດງໂຄງສ້າງຕາຕະລາງລູກຄ້າ Customer ໃຫ້ດຳເນີນການຕາມຄຳສັ່ງດ້ານລຸມ ຫຼັງຈາກດຳເນີນການສຳເລັດ ມັນຈະໃຫ້ຜົນລັບທ໌ດັ່ງພາບດ້ານລຸມ
mysql> DESCRIBE customer;
ຕົວຢ່າງເຊັ່ນ ດ້ານລຸມສະແດງລາຍການຄໍລໍ່າທັງໝົດຂອງຕາຕະລາງ student_info ໃນຖານຂໍ້ມູນ mystudentdb:
mysql> SHOW FULL COLUMNS FROM student_info;
MYSQL ໃຊ້ຄຳສັ່ງ Drop Table ເພື່ອລົບຕາຕະລາງທີ່ມີຢູ່ ຄຳສັ່ງນີ້ຈະລົບຂໍ້ມູນທັງໝົດຂອງຕາຕະລາງພ້ອມກັບໂຄງສ້າງ ຫຼື ຄຳຈຳກັດຄວາມທັງໝົດອອກຈາກຖານຂໍ້ມູນຢ່າງຖາວອນ ດັ່ງນັ້ນ ເຈົ້າຕ້ອງລະວັງໃຫ້ຫລາຍໃນຂະນະທີ່ລົບຕາຕະລາງເພາະເຮົາບໍ່ສາມາດກູ້ຄືນຂໍ້ມູນທີ່ສູຍຫາຍໄດ້ຫຼັງຈາກລົບໄປແລ້ວ
Syntax
DROP TABLE table_name;
ຫຼື,
DROP TABLE schema_name.table_name;
ຕົວຢ່າງນີ້ ວິທີທີ່ເຮົາສາມາດວາງຕາຕະລາງທີ່ມີຢູ່ຈາກຖານຂໍ້ມູນ ສມົມຕິວ່າຖານຂໍ້ມູນຂອງເຮົາມີຕາຕະລາງ "orders" ດັ່ງສະແດງໃນພາບດ້ານລຸມ:
ຕົວຢ່າງ mysql> DROP TABLE orders;