数据库的建表、序列

2019-04-19  本文已影响0人  倒霉的小当家

今天学习了序列,一般用于序号递增,值得注意的是如果出错的话最好重新创建序列,不要再做操作,还讲了一些建表操作。

  1.创建sequence表

CREATE TABLE `sequence` (

  `name` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '序列的名字',

  `current_value` int(11) NOT NULL COMMENT '序列的当前值',

  `increment` int(11) NOT NULL DEFAULT '1' COMMENT '序列的自增值',

  PRIMARY KEY (`name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

2.创建–取当前值的函数

BEGIN

    DECLARE value INTEGER;

    SET value = 0;

    SELECT current_value INTO value

          FROM sequence

          WHERE name = seq_name;

    RETURN value;

END

3.创建–取下一个值的函数

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.创建–更新当前值的函数

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 返回的结果集,操作视图的基表也会改变视图,操作视图也会改变基表,不过一般都不会改动视图,会造成很大的影响,所以设置为只读的。  视图可以看作是JAVA中的封装方法,多次使用简化时,才用得上。不是多次使用的不推荐使用。

今天暂时到这里,明天还有= = !

上一篇下一篇

猜你喜欢

热点阅读