簡體   English   中英

從MySQL到Oracle(NOW()和自動增量ID)

[英]From MySQL to Oracle (NOW() and autoincrement ID)

我真的不知道怎么問這個,但......代碼會幫助我:

/**
 * 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;

檢索* WHERE language_id = 10 ,接收到兩個不同的時間戳,而不顯式觸及TIMESTAMP字段,插入時也不需要輸入ID。 問題是:如何在Oracle中創建相同的行為?

  1. 您需要使用具有BEFORE INSERT觸發器的序列來獲得自動增量ID
  2. 您需要使用sysdatesystimestamplocaldate來維護日期...而不是NOW()也在觸發器中, BEFORE INSERTBEFORE UPDATE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM