【发布时间】:2011-01-17 16:03:07
【问题描述】:
我想确保我的名为“myTable”的 MySQL 表只有一行。
所以我需要能够对这一行进行更新,但显然插入和删除应该是不可能的。
我问这个问题是因为这个Stack Overflow answer
谢谢!
【问题讨论】:
标签: mysql database database-design privileges
我想确保我的名为“myTable”的 MySQL 表只有一行。
所以我需要能够对这一行进行更新,但显然插入和删除应该是不可能的。
我问这个问题是因为这个Stack Overflow answer
谢谢!
【问题讨论】:
标签: mysql database database-design privileges
CREATE TABLE `myTable` (
`id` enum('1') NOT NULL,
`MyValue1` int(6) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='The ENUM(''1'') construct as primary key is used to prevent that more than one row can be entered to the table';
【讨论】:
最简单的方法是创建一个只有一个合法值的列,然后将其声明为not null unique。
这会强制表格有不超过一行,但仍然允许零行。如果您需要防止删除唯一的行,请使用不同答案中给出的触发器方法。
create table example(
enforce_one_row enum('only') not null unique default 'only',
... your columns ....
);
【讨论】:
根据您尝试存储的数据的具体情况,为您提供两个建议,一个或两个可能有效:
看看 ENUM 或 SET 约束是否适合你;请注意,它们根据 SQL 模式(例如,严格)提供不同级别的强制执行。查看更多信息:
http://dev.mysql.com/doc/refman/5.0/en/constraint-invalid-data.html
与/或
实现 INSERT、UPDATE 和 DELETE 触发器以控制对数据的访问(您可能希望在创建这些触发器之前先填充数据;同样,这取决于您的场景)
【讨论】:
试试这个:
CREATE TABLE foo (x INT NOT NULL PRIMARY KEY CHECK (x = 1), col1 INT NOT NULL, col2 INT NOT NULL);
【讨论】:
您可以使用表权限(假设您设置了相关权限以阻止插入/删除,并且您不应再更新权限,但是任何拥有该权限的用户都可以再次覆盖该权限)
先插入唯一一条记录
然后通过在 table_priv 列中禁用INSERT, UPDATE, DROP 来添加权限
【讨论】:
如果您的数据库设置为“严格”模式,您可以创建如下表:
创建表foo(id enum('SYSROW') not null,(其他列定义)主键(id));
【讨论】:
【讨论】:
您可以使用 IF 语句签入 mySQL。
IF (SELECT count(*) FROM myTable) = 1
//your SQL code here.
【讨论】: