扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
如果是sqlserver数据库,其实对于某列上不存在不让修改的说法,sqlserver数据库数据控制原理是角色控制,也就是说我们对于某一个角色去下定义,让隶属于这个角色的用户不能够更新数据。或者在某个角色的基础上不分配或是回收对某一列的权限!如果是这种情况,用一个能修改的角度登陆才行。
为古蔺等地区用户提供了全套网页设计制作服务,及古蔺网站建设行业解决方案。主营业务为成都做网站、网站设计、外贸营销网站建设、古蔺网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
还有另一种就是所谓的触发器,一旦发现你修改,立即返回原数据,这样你也是永远修改不了的!这时你要找到那个触发器,将触发器删除后再进行修改,然后加回触发器即可!
但这两种情况都是对某一列下的定义(我们称为锁定粒度为列)不可能是某一个单元格!
如果你是站在erp管理的基础上不让你修改那是十分正常的!
在企业管理器中使用图形方式(如二楼给的图)还是语句,则没有任何的区别!
如果用户想改变表的默认字符集和所有的字符列的字符集到一个新的字符集,使用下面的语句:
ALTER
TABLE
tbl_name
CONVERT
TO
CHARACTER
SET
charset_name;警告:上述操作是在字符集中转换列值。如果用户在字符集(如
gb2312)中有一个列,但存储的值使用的是其它的一些不兼容的字符集(如
utf8),那么该操作将不会得到用户期望的结果。在这种情况下,用户必须对每一列做如下操作:
ALTER
TABLE
t1
CHANGE
c1
c1
BLOB;
ALTER
TABLE
t1
CHANGE
c1
c1
TEXT
CHARACTER
SET
utf8;
这样做的原因是:从
BLOB
列转换或转换到
BLOB
列没有转换发生。
如果用户指定以二进制进行
CONVERT
TO
CHARACTER
SET,则
CHAR、VARCHAR
和
TEXT
列将转换为它们对应的二进制字符串类型(BINARY,VARBINARY,BLOB)。这意味着这些列将不再有字符集,随后的
CONVERT
TO
操作也将不会作用到它们上。
如果仅仅改变一个表的缺省字符集,可使用下面的语句:
ALTER
TABLE
tbl_name
DEFAULT
CHARACTER
SET
charset_name;
DEFAULT是可选的。当向一个表里添加一个新的列时,如果没有指定字符集,则就采用缺省的字符集(例如当ALTER
TABLE
...
ADD
column)。
ALTER
TABLE
...
DEFAULT
CHARACTER
SET
和
ALTER
TABLE
...
CHARACTER
SET
是等价的,修改的仅仅是缺省的表字符集。
以windows为例
方法一(假设mysql在d:\mysql目录下)
1、用系统管理员登陆windows系统。
2、停止MySQL的服务。
3、运行cmd进入dos命令窗口,然后进入MySQL的安装目录,比如安装目录是d:\mysql,进入d:\mysql\bin (如果是c:\Program Files\mysql目录,目录包含空格,使用cd "c:\Program Files\mysql"进入mysql目录)
4、跳过权限检查启动MySQL(关键的一步)
d:\mysql\binmysqld-nt --skip-grant-tables(会占用一个dos控制台窗口,不能关闭)
5、重新打开一个dos控制台窗口,进入d:\mysql\bin目录,设置root的新密码
d:\mysql\binmysqladmin -u root flush-privileges password 【新密码】
(注意:这条命令如果重复执行,可能需要关闭4的窗口并重新运行)
d:\mysql\binmysqladmin -u root -p shutdown(或直接关闭第一个dos控制台窗口)
将【新密码】替换为你要用的root的密码,第二个命令可能会提示你输入新密码,重复第一个命令输入的密码。
6、关闭MySQL的控制台窗口,用正常模式启动Mysql
7、你可以用新的密码链接到Mysql了。
方法二
1、停止mysql服务
2、找到mysql数据的data目录,将另外一个mysql的data目录下的mysql目录覆盖过来(如果知道root密码)
(操作之前先备份mysql\data\mysql目录的所有文件)
这种方法缺点:覆盖掉其他的用户,mysql的版本需相同
3、重新启动mysql服务
将表格修改为下面第二个表格形式。
用一条ALTER语句实现。
CHANGE:如果我们不只是修改单一列,而是用一条语句改变两个列,我们需要修改列的名称,同时更改他们的数据类型,这时就需要我们用到关键字CHANGE,可以在一条语句中放入多个CHANGE,在中间加上分隔的逗号即可。
比如原来的表两列,类型为VARCHAR(50),和VARCHAR(10),现在不止要更改列名,还要更改这两列的类型。
程序如下:
MODIFY:使用它可以只修改列的类型而不会干涉它的名称,假设要把proj_desc列的字符长度修改为VARCHAR(120)以容纳更多的说明文字,只要这么做就可以。
总结如下;
(1)既更改列名也更改类型,用CHANGE
(2)只修改类型,用MODIFY,但这种方法比较慢,我们用另一种方法直接修改.frm文件,而不改动表本身。
本期我们用 MySQL 提供的 DBUG 工具来研究 MySQL 的 SQL 处理流程。
起手先造个实例
这里得稍微改一下实例的启动文件 start,将 CUSTOM_MYSQLD 改为 mysqld-debug:
重启一下实例,加上 debug 参数:
我们来做一两个实验,说明 DBUG 包的作用:
先设置一个简单的调试规则,我们设置了两个调试选项:
d:开启各个调试点的输出
O,/tmp/mysqld.trace:将调试结果输出到指定文件
请点击输入图片描述
然后我们创建了一张表,来看一下调试的输出结果:
请点击输入图片描述
可以看到 create table 的过程中,MySQL 的一些细节操作,比如分配内存 alloc_root 等
这样看还不够直观,我们增加一些信息:
请点击输入图片描述
来看看效果:
请点击输入图片描述
可以看到输出变成了调用树的形式,现在就可以分辨出 alloc_root 分配的内存,是为了解析 SQL 时用的(mysql_parse)
我们再增加一些有用的信息:
请点击输入图片描述
可以看到结果中增加了文件名和行号:
请点击输入图片描述
现在我们可以在输出中找一下统计表相关的信息:
请点击输入图片描述
可以看到 MySQL 在这里非常机智,直接执行了一个内置的存储过程来更新统计表。
沿着 que_eval_sql,可以找到其他类似的统计表,比如下面这些:
请点击输入图片描述
请点击输入图片描述
本次实验中,我们借助了 MySQL 的 DBUG 包,来让 MySQL 将处理过程暴露出来。MySQL 中类似的技术还有不少,比如 performance_schema,OPTIMIZER_TRACE 等等。
这些技术将 MySQL 的不同方向的信息暴露出来,方便大家理解其中机制。
修改MySQL源文件夹中的my.ini。双击打开world库,里面有很多表格,分别对应不同的内容,掉落就保存在creature_loot_template这个表里。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流