从MySQL到Oracle(NOW()和autoincrement ID)

从MySQL到Oracle(NOW()和autoincrement ID),mysql,oracle,timestamp,auto-increment,Mysql,Oracle,Timestamp,Auto Increment,我真的不知道该怎么问,但是。。。代码将帮助我: /** * Languages table definition */ DROP TABLE IF EXISTS `languages`; CREATE TABLE `languages` ( -- Common: `id` INTEGER NOT NULL AUTO_INCREMENT COMMENT 'Unique registry identifier', `creat

我真的不知道该怎么问,但是。。。代码将帮助我:

/**
 * Languages table definition
 */
DROP TABLE IF EXISTS `languages`;
CREATE TABLE `languages`
(
    -- Common:
    `id`      INTEGER    NOT NULL AUTO_INCREMENT                COMMENT 'Unique registry identifier',
    `created` TIMESTAMP  NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'Registry creation TIMESTAMP',
    `updated` TIMESTAMP  NOT NULL DEFAULT NOW() ON UPDATE NOW() COMMENT 'Registry last update TIMESTAMP',
    `active`  BOOLEAN    NOT NULL DEFAULT TRUE                  COMMENT 'Virtual deletion flag',
    PRIMARY KEY (`id`),
    -- /Common
    `language_id`   INTEGER(2)  UNSIGNED NOT NULL COMMENT 'Language identifier',
    `language_code` VARCHAR(2)           NOT NULL COMMENT 'ISO 639-1 Code',
    `language_name` VARCHAR(20)          NOT NULL COMMENT 'Language name',
    -- Indexes
    UNIQUE KEY `language_id` (`language_id`)
) ENGINE=InnoDB CHARACTER SET 'latin1' COLLATE 'latin1_general_ci';

/**
 * Updates multilang field to UTF-8
 */
ALTER TABLE `languages` MODIFY `language_name` VARCHAR(20) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

/**
 * Assigns the current TIMESTAMP to the created field without user input
 */
CREATE TRIGGER `insert_languages` BEFORE INSERT ON `languages`
    FOR EACH ROW
SET NEW.created = NOW();

/* Insert a record */
INSERT INTO languages(language_id, language_code, language_name) VALUES(10, 'es', 'Español');

/* Update that record (after a few seconds) */
UPDATE languages SET language_name = 'Español (España)' WHERE language_id = 10;
检索
*时,如果language_id=10
,则会收到两个不同的时间戳,而不会显式地触及
时间戳
字段,插入时也不需要包含id。问题是:如何在Oracle中创建相同的行为

  • 您需要在插入前将序列与
    一起使用
    触发器,以获得自动增量id
  • 您需要使用
    sysdate
    systimestamp
    localdate
    来维护日期。。。而不是触发器中的
    NOW()
    BEFORE INSERT
    BEFORE UPDATE

  • 下面是一个自动递增序列/触发器示例-@Phil非常感谢,这对我帮助很大。虫族我需要把所有的东西都放在一个触发器里,对吗?我指的是日期和顺序。@Edgar:随你的便。这两种解决方案(1个或多个触发器)都将起作用same@zerkms谢谢,我给人的印象是“触发器最多,速度最慢”。MySql 5.2:NOW()在触发器中对我有效,因为我不使用BEGIN。。。结束。