0

我正在设计一个安卓应用程序。我想建立下表。

表名: EXE1

nAME  m1 m2 m3 m4
P1    23 34 35 36
P2    09 89 34 35
P3    89 12 13 14 

如上表所示,我只想输入基于日期 nd 的整数,其中m1, m2,m3 m4是不同的列,p1, p2,p3是不同的行,它们是不变的。

我已经尝试过使用AUTOINCREMENT,但之后我无法停止它,并且p3无论 我想在哪里输入不同的数据,我都可以输入。m1m2m3

请帮助我如何创建它。

4

2 回答 2

1

也许有什么我不明白的?有什么问题:

CREATE TABLE EXE1 (
  nAME VARCHAR(15),
  m1   INT,
  m2   INT,
  m3   INT,
  m4   INT
);

INSERT INTO EXE1
  (nAME, m1, m2, m3, m4)
VALUES
  ('P1', 23, 34, 35, 36),
  ('P2', 09, 89, 34, 35),
  ('P3', 89, 12, 13, 14)
;
于 2013-06-12T22:14:36.007 回答
0

在 MySQL 中,您不能使用命令直接控制表的行数。而且建一个字符串字段为PK的表真的不是一个好习惯。
您想要的近似值是创建一个具有整数 auto_increment id 的表并添加一个唯一索引字段,

CREATE  TABLE IF NOT EXISTS `exe1` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `exe_name` VARCHAR(15) NULL ,
  `m1` INT UNSIGNED NOT NULL DEFAULT 0 ,
  `m2` INT UNSIGNED NOT NULL DEFAULT 0 ,
  `m3` INT UNSIGNED NOT NULL DEFAULT 0 ,
  `m4` INT UNSIGNED NOT NULL DEFAULT 0 ,
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `exe_name_UNIQUE` (`exe_name` ASC) )
ENGINE = InnoDB;

DELIMITER $$
CREATE TRIGGER `exe_insert` BEFORE INSERT ON exe1
FOR EACH ROW BEGIN
  SET NEW.exe_name = IFNULL(NEW.exe_name, CONCAT("P",NEW.id));
END$$
DELIMITER ;

如果没有给出 一个简单的触发器,exe_insert则会生成新的行。exe_name


从 MySQL 文档,

UNIQUE 索引创建一个约束,使得索引中的所有值都必须是不同的。如果您尝试使用与现有行匹配的键值添加新行,则会发生错误。对于所有引擎,UNIQUE 索引允许包含 NULL 的列有多个 NULL 值。 [...]

而且它也值得阅读triggers

于 2013-06-20T07:31:02.650 回答