【问题标题】:Inserting into a view with an auto increment primary key?使用自动增量主键插入视图?
【发布时间】:2013-11-12 20:50:33
【问题描述】:

我有一个表horse 和一个视图view_horse,它从horse 表中选择除主键之外的每一列(主键是自增整数),然后将其呈现给用户,我想将数据插入到该视图基础表中,自然期望主键会自动生成。但是当我尝试向其中插入任何数据时,我不断收到一个 SQL 异常,指出“视野view_horse 底层没有默认值”。

编辑 -

CREATE TABLE IF NOT EXISTS `TRC`.`horse` (
`horse_id` INT NOT NULL AUTO_INCREMENT,
`registered_name` VARCHAR(20) NOT NULL,
`stable_name` VARCHAR(20) NOT NULL,
`horse_birth_year` DATE NOT NULL,
`horse_height` DECIMAL(3,1) NOT NULL,
`horse_location` VARCHAR(50) NOT NULL DEFAULT 'TRC',
`arrival_date` DATE NOT NULL,
`passport_no` MEDIUMTEXT NULL,
`is_deceased` TINYINT(1) NOT NULL,
`arrival_weight` DECIMAL NOT NULL,
`horse_sex` VARCHAR(8) NOT NULL,
`microchip_no` VARCHAR(15) NULL,
`date_of_death` DATE NULL,
PRIMARY KEY (`horse_id`),
INDEX `fk_Horses_SexLookup1_idx` (`horse_sex` ASC),
CONSTRAINT `fk_Horses_SexLookup1`
FOREIGN KEY (`horse_sex`)
REFERENCES `TRC`.`lookup_sex` (`sex`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB

USE `TRC`;
CREATE  OR REPLACE VIEW `TRC`.`view_horse` AS SELECT 
registered_name AS 'Registered Name',
stable_name AS 'Stable Name', 
horse_birth_year AS 'Age', 
horse_height AS 'Height',
arrival_weight AS 'Weight on Arrival',
horse_sex AS 'Sex',
horse_location AS 'Location', 
arrival_date AS 'Date of Arrival',
passport_no AS 'Passport no.',
microchip_no AS 'Microchip no.',
is_deceased AS 'Alive?'
FROM `horse`;

如果我在未指定列的情况下插入到视图中,它实际上可以完成。但不是当我给出视图中指定的列时。

【问题讨论】:

  • 你能发个 sqlfiddle 吗?

标签: mysql sql auto-increment sql-insert sql-view


【解决方案1】:

您不是要插入到实际的 VIEW 中吗?插入 TABLE,然后从 VIEW 中选择。

编辑。忘了它;谢谢草莓的指正。

【讨论】:

  • 您可以插入到视图中。很好 - (嗯,有很多警告!);-)
  • @Strawberry 我知道你可以,但你为什么要这样做?
  • 例如,如果您尝试从 Oracle DB 链接访问表(因此您的客户端是 Oracle DB),则需要一个视图。由于 Oracle 对所有标识符都有 30 个字符的限制,因此它无法处理超过 30 个字符的列名。这可以通过缩短列名的视图来解决。
【解决方案2】:

这是一个演示插入视图的小提琴:http://sqlfiddle.com/#!2/280aa6/1/0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多