MySQL数据库唯一列名称

时间:2014-08-15 15:17:50

标签: php mysql

我自己写了一个PHP脚本来帮助管理一个由10名成员组成的小队。此脚本当前连接到数据库并每周更新更新任何等级和功率更改。但是,我想扩展它并在一个新表中,将所有获得的功率保存在一个单独的列中,而不是全部添加。

我能想到的唯一方法是使用以下代码创建列并更改每个列的名称。

ALTER TABLE `power gained` ADD timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER name;

所以我的问题是,我是否可以创建列以确保其名称是唯一的,或者是否可以将列名设置为时间戳,因为这样可以节省一列。

我还想明确表示我正在使用mysql_函数,因为这是在我的本地系统上,不容易受到攻击,我也不会犯错误。

2 个答案:

答案 0 :(得分:3)

使用规范化。

将用户和权力分成两个差异表。

CREATE TABLE `users_power` (
  `user_id` smallint(5) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `total_power` int(11) NOT NULL DEFAULT '1',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

CREATE TABLE `power` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` smallint(1) NOT NULL,
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `power_increase` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

DROP TRIGGER IF EXISTS `Update users_power`;

CREATE TRIGGER `Update users_power` AFTER INSERT ON `power` FOR EACH ROW BEGIN
    UPDATE `users_power` AS `UP`
    SET `UP`.`total_power` = `UP`.`total_power` + NEW.`power_increase`
    WHERE `UP`.`user_id` = NEW.`user_id`;
END

然后抬头,做一些像;

SELECT `power` AS total_power
FROM users_power
WHERE users_power.`user_id` = 1

你的结构看起来像;

select * from power where user_id = 1;
+----+---------+---------------------+----------------+
| id | user_id | time                | power_increase |
+----+---------+---------------------+----------------+
|  1 |       1 | 2014-08-7 17:04:06  |              5 |
|  2 |       1 | 2014-08-15 17:04:31 |             15 |
+----+---------+---------------------+----------------+
2 rows in set

select * from users_power where user_id = 1;
+---------+------+-------------+
| user_id | name | total_power |
+---------+------+-------------+
|       1 | joe  |          21 |
+---------+------+-------------+
1 row in set

编辑

  • 添加触发器,以便在将记录插入power
  • 时自动更新总功率

答案 1 :(得分:-3)

Haven尚未对此进行过测试,但我认为我找到了一种方法可以用我理解的方式(这是最重要的部分)来实现。

$now = date('Y-m-d');
mysql_query("ALTER TABLE `power gained` ADD `$now` VARCHAR(22) AFTER name");
// ...
mysql_query("UPDATE `power gained` (`$now`) VALUES($gained) WHERE id = $i");

我不想从数据库中提取数据,因为我可以通过访问localhost / phpmyadmin来访问它,而且我不需要提取它。