色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

mysql主鍵字符串自增

夏志豪2年前9瀏覽0評論

在 MySQL 中,一個表可以有多個列作為主鍵,但只有一個列能夠被選擇為主鍵索引列。而且,值不允許為空,而且必須唯一。首選主鍵的類型是整數,如 int、bigint 或者 smallint 等類型。這是因為整數類型的數據占用的空間比較小,速度比較快。但是,MySQL 也支持字符串類型的主鍵,即主鍵自增字符串的方式。

CREATE TABLE `test_table` (
`id` varchar(10) NOT NULL,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

創建一個主鍵為字符串的表的 sql 如上所示。可以看到,在定義主鍵的時候,使用了 varchar 類型的數據,并指定了長度。這里假設長度為 10。在 insert 數據時,可以不用為 id 指定值。因為在定義主鍵的時候使用了NOT NULL來指定該列不允許空值。但是,此時插入數據時,需要將 id 的默認值設為符合規則的字符串。

INSERT INTO `test_table` (`name`) VALUES ('test');

上面的方法可以將一個符合規則的字符串主鍵插入數據庫中。但是,如果需要自增主鍵的值,則可以利用 MySQL 的觸發器,實現主鍵字符串自增的功能。

DELIMITER $$
CREATE TRIGGER `tri_test_table_insert` BEFORE INSERT ON `test_table`
FOR EACH ROW BEGIN
DECLARE maxId INT;
DECLARE nextId VARCHAR(10);
SELECT SUBSTRING_INDEX(MAX(`id`), '_', -1) INTO maxId FROM `test_table` WHERE `id` LIKE 'T%';
SET nextId = CONCAT('T_', LPAD(IFNULL(maxId+1, 1), 6, '0'));
SET NEW.`id` = nextId;
END$$
DELIMITER ;

上面的觸發器會在插入數據之前進行觸發,并通過 MySQL 提供的函數獲取當前最大的主鍵值(字符串值)。這里使用的查詢條件是該表中以 'T' 開頭的字符串。最后,通過設置主鍵值為字符串,寫入到數據庫并讓它自增。

總之,通過 MySQL 的觸發器機制,我們可以實現主鍵字符串的自增功能。但是,由于字符串類型的主鍵不利于索引查詢,并且難以維護,所以還是建議使用整型的主鍵。