繁体   English   中英

MySQL数据库唯一列名

[英]MySQL Database Unique Column Names

我为自己编写了一个PHP脚本,以帮助管理一个由10个成员组成的小组。 该脚本当前连接到数据库,并每周更新一次,以更新任何等级和功率更改。 但是,我想对此进行扩展,并在一个新表中,将获得的所有功能保留在单独的列中,而不是全部累加。

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

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

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

我还想弄清楚我正在使用mysql_函数,因为它在我的本地系统上,不容易受到攻击,而且我也不愚蠢到会犯错误。

使用规范化。

将用户和权限分为两个差异表。

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

尚未对此进行测试,但我想我已经找到一种可以以我理解的方式进行此操作的方法(这是最重要的部分)。

$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来访问它,而我永远都不需要提取它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM