今天學(xué)習(xí)了序列,一般用于序號(hào)遞增秋度,值得注意的是如果出錯(cuò)的話最好重新創(chuàng)建序列横漏,不要再做操作呼奢,還講了一些建表操作。
??1.創(chuàng)建sequence表
CREATE TABLE `sequence` (
? `name` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '序列的名字',
? `current_value` int(11) NOT NULL COMMENT '序列的當(dāng)前值',
? `increment` int(11) NOT NULL DEFAULT '1' COMMENT '序列的自增值',
? PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
2.創(chuàng)建–取當(dāng)前值的函數(shù)
BEGIN
? ? DECLARE value INTEGER;
? ? SET value = 0;
? ? SELECT current_value INTO value
? ? ? ? ? FROM sequence
? ? ? ? ? WHERE name = seq_name;
? ? RETURN value;
END
3.創(chuàng)建–取下一個(gè)值的函數(shù)
DROP FUNCTION IF EXISTS nextval;
DELIMITER $
CREATE FUNCTION nextval (seq_name VARCHAR(50))
? ? RETURNS INTEGER
? ? LANGUAGE SQL
? ? DETERMINISTIC
? ? CONTAINS SQL
? ? SQL SECURITY DEFINER
? ? COMMENT ''
BEGIN
? ? UPDATE sequence
? ? ? ? ? SET current_value = current_value + increment
? ? ? ? ? WHERE name = seq_name;
? ? RETURN currval(seq_name);
END
$
DELIMITER ;
4.創(chuàng)建–更新當(dāng)前值的函數(shù)
DROP FUNCTION IF EXISTS setval;
DELIMITER $
CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)
? ? RETURNS INTEGER
? ? LANGUAGE SQL
? ? DETERMINISTIC
? ? CONTAINS SQL
? ? SQL SECURITY DEFINER
? ? COMMENT ''
BEGIN
? ? UPDATE sequence
? ? ? ? ? SET current_value = value
? ? ? ? ? WHERE name = seq_name;
? ? RETURN currval(seq_name);
END
$
DELIMITER ;
還講了視圖坦敌,
視圖是表的select 返回的結(jié)果集酣衷,操作視圖的基表也會(huì)改變視圖,操作視圖也會(huì)改變基表,不過一般都不會(huì)改動(dòng)視圖,會(huì)造成很大的影響纸颜,所以設(shè)置為只讀的。? 視圖可以看作是JAVA中的封裝方法绎橘,多次使用簡(jiǎn)化時(shí)胁孙,才用得上。不是多次使用的不推薦使用称鳞。
今天暫時(shí)到這里涮较,明天還有= = !