DELIMITER //
DROP TRIGGER IF EXISTS url_trigger_before_insert //
CREATE TRIGGER url_trigger_before_insert
BEFORE INSERT ON url_table
FOR EACH ROW
BEGIN
DECLARE no_proto CHAR;
SET NEW.scheme = SUBSTRING_INDEX(NEW.url, ':', 1);
SET @no_proto = REPLACE(NEW.url,CONCAT(NEW.scheme,'://'),'');
SET @no_proto = SUBSTRING_INDEX(@no_proto, '/', 1);
SET NEW.subdomain = SUBSTRING_INDEX(@no_proto, '.', 1);
SET NEW.host = SUBSTRING_INDEX(@no_proto, '.', -2);
END //
DROP TRIGGER IF EXISTS url_trigger_before_update //
CREATE TRIGGER url_trigger_before_update
BEFORE UPDATE ON url_table
FOR EACH ROW
BEGIN
DECLARE no_proto CHAR;
SET NEW.scheme = SUBSTRING_INDEX(NEW.url, ':', 1);
SET @no_proto = REPLACE(NEW.url,CONCAT(NEW.scheme,'://'),'');
SET @no_proto = SUBSTRING_INDEX(@no_proto, '/', 1);
SET NEW.subdomain = SUBSTRING_INDEX(@no_proto, '.', 1);
SET NEW.host = SUBSTRING_INDEX(@no_proto, '.', -2);
END //
DELIMITER ;
首先,「* domain *」沒有明確定義。有沒有簡單的方法來確定「域」結束和子域/主機開始的地方(不僅僅是因爲它們是由所討論域的運營商所做的語義區分,並且與其他地區無法區分)......最常見的方法是使用Mozilla的[公共後綴列表](https://wiki.mozilla.org/Public_Suffix_List)來確定公有域名註冊的級別,然後假設其下的任何內容都是私有主機/子域名。但這並不簡單。 – eggyal
爲什麼索引標籤? –
如果您使用亞馬遜的RDS,請知道設置觸發器相當複雜(http://stackoverflow.com/questions/8919907/can-i-create-trigger-in-an-rds-db)。將這種行爲放在代碼中可能會更容易。 –