Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >MySQL中是否有保护字段不受更改的方法?

MySQL中是否有保护字段不受更改的方法?
EN

Stack Overflow用户
提问于 2012-11-08 05:49:56
回答 3查看 3.1K关注 0票数 3

我们每天都会收到数据。(我们无法控制原始数据,因此要求它们更正数据库不是一种选择。)

客户记录中包含美国的地址。街道地址,城市,州和邮编。

在我们的一端,我们使用数据库中的数据为营销部门。他们有时会发现地址不正确或不完整,并希望对其进行更改。但当然,下一次的数据输入将消除他们的修正。

是否有一种方法inf MySQL可以保护某些字段不被更改,就像电子表格中受保护的单元格一样。这是MySQL记录布局的一些字段名:

address1 address2 address3 城市 状态 邮编

如果我沿此创建附加字段,将其标记为"Y“或"N”为受保护的字段,该怎么办:

address1 address1_flag address2 address2_flag address3 address3_flag 城市 city_flag 状态 state_flag 邮编 zipcode_flag

因此,当营销部门纠正,例如,邮政编码,它会将zipcode_flag设置为"Y“,意思是,是的,保护字段邮政编码不受进一步更改。如果原始数据提要在以后的某个点得到纠正,那么如果营销部门数据库中的get代码与原始字段匹配,那么zipcode_flag保护将更改为"N“。

这听起来像正确的方法来管理营销部门的数据库从日常饲料吗?或者,在MySQL中是否有另一种方法或特性可用于此?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-08 05:54:40

我不认为有“保护”的标志或功能,但有几条路你可以走,以实现你的目标。

第一个也是最具体的方法是在MySQL中创建一个“受限用户”。要限制用户,您可以/只将SELECT特权授予您不希望修改的列。要做到这一点,您可以使用:

代码语言:javascript
代码运行次数:0
复制
GRANT SELECT(zipcode) ON addresses TO restrictedUser;

您可以看到这个这里的一个很好的例子,或者在手册中获得详细的信息。

第二种方法是创建一个选择/插入/更新的过程。这一项可能有些过分,但可能是为了满足您的需要而完成的,而且不需要修改用户权限。

选择和更新过程的一个简单示例将(未测试):

代码语言:javascript
代码运行次数:0
复制
CREATE PROCEDURE select_addresses ()
BEGIN 
   SELECT address1, zipcode FROM addresses;
END 

CREATE PROCEDURE update_addresses ( IN recordID INT(11), IN newAddress1 VARCHAR(255) )
BEGIN
    SET @query := CONCAT("UPDATE addresses SET address1 = '", newAddress1, "' WHERE id = ", recordId);
    PREPARE stmt FROM @query;
    EXECUTE stmt;
END

这将允许用户选择您指定允许通过调用select_addresses()读取的任何列,然后通过update_addresses()对任何允许的列执行更新。您必须添加几个逻辑层,以便只更新已设置的变量,等等--因此,使用过程实际上可能过高=P

票数 3
EN

Stack Overflow用户

发布于 2012-11-08 05:54:03

您可以在列级别:http://dev.mysql.com/doc/refman/5.1/en/grant.html管理特权。

票数 3
EN

Stack Overflow用户

发布于 2022-07-25 08:07:20

另一种方法是设置一个触发器,关闭记录中的标志。例如,如果表中有一个字段

代码语言:javascript
代码运行次数:0
复制
modified TINYINT(1) NOT NULL DEFAULT 0

然后创建一个触发器来保存数据。

代码语言:javascript
代码运行次数:0
复制
CREATE DEFINER = CURRENT_USER TRIGGER `database_name`.`table_name_BEFORE_UPDATE` BEFORE UPDATE ON `table_name` FOR EACH ROW
BEGIN
IF (NEW.modified=1) THEN
/* Then set any fields you want to preserve to their old value */
SET NEW.address1=OLD.address1;
SET NEW.address2=OLD.address2;
SET NEW.city=OLD.city;
SET NEW.stateprov=OLD.stateprov;
SET NEW.postal_code=OLD.postal_code;
SET NEW.country=OLD.country;
END IF;
END

这将允许您限制修改,除非修改设置为1。如果您希望进一步修改它,并且一旦修改防止它被修改,也可以包括修改标志,因此一旦设置,它就不能更改,除非从db中扣动触发器。

代码语言:javascript
代码运行次数:0
复制
CREATE DEFINER = CURRENT_USER TRIGGER `database_name`.`table_name_BEFORE_UPDATE` BEFORE UPDATE ON `table_name` FOR EACH ROW
BEGIN
IF (NEW.modified=1) THEN
/* Then set any fields you want to preserve to their old value */
SET NEW.modified=OLD.modified;
SET NEW.address1=OLD.address1;
SET NEW.address2=OLD.address2;
SET NEW.city=OLD.city;
SET NEW.stateprov=OLD.stateprov;
SET NEW.postal_code=OLD.postal_code;
SET NEW.country=OLD.country;
END IF;
END
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13290268

复制
相关文章
用mysql查询某字段是否有索引
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/113450.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/07
4.3K0
用mysql查询某字段是否有索引
MYSQL 生产环境字段更改的failed的问题
早上看到微信一个银行的同学问了小问题,希望他不要背锅,具体问题是MYSQL 一个50G的表要更改字段,将一个字段从varchar(3) 改成varchar(6). MYSQL 5.7 官版。因为根据官方和在测试系统测试的结果来看,不应该是缓慢的,应该是很快完成的。
AustinDatabases
2020/06/05
1.8K0
【MySQL】分区字段列是否有必要再单独建索引
对于分区字段必须是主键的一部分,那么建了复合主键之后,是否需要对分许字段再单独添加一个索引呢?有没有效果?下面来验证一下
用户5522200
2019/06/02
2.6K0
MySQL online DDL 更改Varchar的字段长度
修改Varchar 的大小的时候。不用锁表,就可以进行操作DDL。这个还得具体查看版本,还有具体情况。下来我们来看一下INnoDB中的Online DDL各个操作请求。
袁新栋-jeff.yuan
2020/08/26
6.4K0
MySQL online  DDL 更改Varchar的字段长度
MySQL中的json字段
MySQL5.7.8中引入了json字段,这种类型的字段使用的频率比较低,但是在实际操作中,有些业务仍然在用,我们以此为例,介绍下json字段的操作方法:
AsiaYe
2019/12/23
9.1K0
android sqlite 判断表和表中字段是否存在方法
/** *检查某表是否存在 * @param tableName 表名 * @return true:存在 false:不存在 */ public boolean tabIsExist(String tabName){ boolean result = false; if(tabName == null){ return false; } Cursor cursor = n
再见孙悟空_
2023/02/10
1.8K0
MongoDB更改字段类型
1 Double 浮点型  2 String UTF-8字符串都可表示为字符串类型的数据  3 Object 对象,嵌套另外的文档  4 Array 值的集合或者列表可以表示成数组  5 Binary data 二进制  7 Object id 对象id是文档的12字节的唯一 ID 系统默认会自动生成  8 Boolean 布尔类型有两个值TRUE和FALSE  9 Date 日期类型存储的是从标准纪元开始的毫秒数。不存储时区  10 Null 用于表示空值或者不存在的字段  11 Regular expression 采用js 的正则表达式语法  13 JavaScript code 可以存放Javasript 代码  14 Symbol 符号  15 JavaScript code with scope  16 32-bit integer 32位整数类型  17 Timestamp 特殊语义的时间戳数据类型  18 64-bit integer 64位整数类型
周小董
2019/03/25
7K0
MongoDB更改字段类型
mysql改变主键字段类型吗_mysql修改字段类型有哪些?
mysql修改字段类型有:1、添加字段【alter table table1(表名)add No_id(字段名)】;2、修改字段类型【t1(表名) alter column a(字段名)】;3、删除某表的字段【drop ‘cpid’】。
全栈程序员站长
2022/08/14
8.1K0
mysql改变主键字段类型吗_mysql修改字段类型有哪些?
powershell: 判断PSObject中是否有指定property的靠谱方法
如何判断一个PSObject中是否定义指定名称的属性,下面的代码中举出了三个方法 $test=New-Object PSObject -Property @{ compiler=$null
10km
2018/01/03
1.1K0
BlackBox:在不受信任的系统上保护容器安全
这篇论文使用了硬件虚拟化对容器进行隔离,从而实现了轻量化的容器隔离与安全加强。文章的核心想法并不新奇,有很多类似的工作采用了虚拟化以及VMFUNC做内存隔离。其核心的贡献点,在于能够支持未经修改Docker应用,以及对syscall的支持较为完整。由此可见,Solid的工作也是会受到PC们的青睐。
用户5166556
2023/03/18
9940
BlackBox:在不受信任的系统上保护容器安全
mysql新增表或字段时判断是否存在
在升级程序时往往是一大堆的sql语句,而单一的sql语句是没法在新增时判断表或字段是否存在的,必须写成存储过程
仙士可
2019/12/18
9K0
MySQL|update字段为相同的值是否会记录binlog
前几天一个开发同事咨询我,update 更新字段为相同的值是否会记录binlog,我回复说不会。
用户1278550
2020/10/10
6.5K0
MySQL|update字段为相同的值是否会记录binlog
查询 MySQL 字段注释的 5 种方法!
很多场景下,我们需要查看 MySQL 中表注释,或者是某张表下所有字段的注释,所以本文就来盘点和对比一下查询注释的几种方式。
磊哥
2022/05/09
5.4K0
查询 MySQL 字段注释的 5 种方法!
MySQL中explain的结果​字段介绍
昨天说完了执行计划的前四个字段,今天说说后面几个字段吧。我们看看explain的基本语法和输出内容:
AsiaYe
2019/11/06
8.5K0
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
本文实例讲述了PHP操作MySQL中BLOB字段的方法。分享给大家供大家参考,具体如下: 1、M/【参考文章的时候,并不建议直接复制,应该尽量地读懂】/ySQL中BLOB字段类型 BLOB类型的字段用于存储二进制数据。 MySQL中,BLOB是个类型系列,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储文件的最大大小上不同。 MySQL的四种BLOB类型 TinyBlob:  最大 255字节 Blob:      最大 65K MediumBlob:最大 16M LongBlob:  最大 4G 注意:如果你存储的文件过大,数据库的性能会下降很多。 2、PHP操作BLOB案例 (1)操作新闻内容
用户2323866
2021/07/07
3.3K0
判断链表中是否有环
操作一:定义了两个变量来记录,A一个一次走一步,B一个一次走两步,如果有环B必然会追上A。如果无环B必然会先遍历完。
忧愁的chafry
2022/10/30
1.5K0
判断链表中是否有环
mysql新建数据时判断表,字段,索引是否存在
-- 新建表时判断表是否存在 CREATE TABLE If Not Exists `表名` ( `id`  int(10) NOT NULL AUTO_INCREMENT , `plan_id`  int(10) NULL  , `bet_num`  varchar(255) NULL  , `vr_win_data`  varchar(255) NULL COMMENT  , PRIMARY KEY (`id`) ); -- 新建字段时判断字段是否存在 CREATE PROCEDURE sp_up
仙士可
2019/12/18
5.5K0
MySQL中explain中的结果字段介绍(三)
之前的文章中对于explain的数据结果中的字段已经进行了一部分介绍了,今天来说一说剩下的几个字段,为了防止忘记,先看看这个表结构:
AsiaYe
2019/11/06
2.1K0
mysql中更改密码的首选语句_MySQL如何更改用户密码?(代码实例)「建议收藏」
在MySQL中,可以使用3种不同的语句更改用户帐户密码:UPDATE statementSET PASSWORD statementALTER USER statement.
全栈程序员站长
2022/09/21
5.7K0
mysql中更改密码的首选语句_MySQL如何更改用户密码?(代码实例)「建议收藏」
检验数据库中是否有特定记录的最简单方法
        String sqlconn = "Data Source=wei//SQLEXPRESS;Initial Catalog=HISDB;Integrated Security=True";         SqlConnection weida = new SqlConnection(sqlconn);         weida.Open();         //*********************         string sql = "SELECT tkdh FROM tkxx WHERE checked = 'True' AND tkdh='" + ckdh + "'";         SqlCommand check1 = new SqlCommand(sql, weida);
风柏杨4711
2021/03/15
1.1K0

相似问题

保护内存不受更改

10

是否使用反射保护价值不受更改?

43

保护字段不受GraphQL查询

17

是否有必要保护JAX请求不受CSRF的影响?

27

保护业务对象不受更改

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文