金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > 数据库 > SERVER中隐式转换的一些细节浅析,如何修改数据

SERVER中隐式转换的一些细节浅析,如何修改数据

发布时间:2019-11-19 16:54编辑:数据库浏览(128)

    mysql 忘记了管理员密码解决方法,修改数据库密码的几种方法

    其实这是一篇没有技术含量的文章,精通SQL优化的请绕道。这个缘起于在优化一个SQL过程中,同事问了我一个问题,为什么SQL中存在隐式转换,但是执行计划没有变? 我思索了一下,觉得这个问题也有点意思,说不定有些对隐式转换了解得不深入的同学都有此疑问,那么下面结合上下文场景做一个细节方面的解答。

        在网上看了很多资料都是空说一谈,都只是说很简单,然后没有说遇到这样的情况具体该怎么做,看到这里都知道是权限问题,其实我们每一个人都知道,又是我觉得我还是要给以后遇到的朋友个解决方法:

    如何修改数据库密码

    我们一个系统中使用了ORMLite框架,粗心的开发人员弄出了不少下面这样的SQL语句,都存在隐式转换问题,如下所示,表machine_stop_alarm_msg 的结构如下,字段machine_no、status都为VARCHAR(10),但是下面SQL,传入的变量@P0,@P1都是NVARCHAR(4000)类型。

       这里用到的数据库是08版本的,出现了这种一直报权限错误:错误截图如下:

    方法 1: 用 SET PASSWORD 命令 

    首先登录 MySQL。  

    格式:mysql> set password for 用户名 @localhost = password('新密码');  

    例子:mysql> set password for root@localhost = password('123');

     

    图片 1

    方法 2:用 mysqladmin  

    格式: mysqladmin -u 用户名 -p 旧密码 password 新密码

    例子: mysqladmin -uroot -p123456 password 123

    图片 2

      所见效果描述:在windows身份验证的 情况下登陆进去数据库的表都是可以打开的,当换到sa或者别的账号登陆进去的时候这个时候我们点击我们的数据库就会报错:

    方法 3:用 UPDATE 直接编辑 user 表

    首先登录 MySQL。  

    mysql> use mysql;  

    mysql> update user set password=password('123') where user='root';  

    mysql> flush privileges;  

    DECLARE  @P0 nvarchar(4000),@P1 nvarchar(4000);
    
     
    
    SET @P0='1';
    
    SET @P1='K172';
    
     
    
    SELECT [recid],[machine_no] 
    
       ,[stop_stime] 
    
       ,[stop_etime] 
    
       ,[status] 
    
       ,[memo] 
    
       ,[createddate]  
    
    FROM machine_stop_alarm_msg t  
    
    WHERE 1=1  
    
    AND t.status=@P0  
    
    AND t.machine_no in(@P1 )  
    
    ORDER BY machine_no, 
    
       stop_stime ;  
    

     解决方法如下:

    方法 4:在忘记 root 密码的时候,可以这样

     

      1、首先我们要用windows身份登陆进去进行设置,因为你的sa等账号登陆进去设置都是无效的【这一步很重要】。

    windows下修改

    1. 关闭正在运行的 MySQL 服务。  

    2. 打开 DOS 窗口,转到 mysqlbin 目录。  

    3. 输入 mysqld --skip-grant-tables 回车。 --skip-grant-tables 的意思是启动 MySQL 服务的时候跳过权限表认证。  

    4. 再开一个 DOS 窗口(因为刚才那个 DOS 窗口已经不能动了),转到 mysqlbin 目录。  

    5. 输入 mysql 回车,如果成功,将出现 MySQL 提示符 >。  

    图片 3

    1. 连接权限数据库: use mysql;

    7. 改密码:update user set password=password("123") where user="root";(别忘了最后加分号)

    1. 刷新权限(必须步骤):flush privileges;

    2. 退出 quit

    3. 注销系统,再进入,使用用户名 root 和刚才设置的新密码 123 登录。 

     

      2、找到对应的库下面的安全性->架构->dbo->右键属性【权限】->搜索->浏览【public】->确定,在右边的具有授权,如果不知道的情况下全部打钩即可。参照截图如下:

    linux下修改

    Windows同样适用。原理和上一个方法一样

    1. 首先编辑mysql安装目录下的 my.cnf 文件:vi my.cnf 【注:windows下修改的是 my.ini

    2. 找到 [mysqld] 行,在其下方添加一行: skip-grant-tables

    图片 4

    图片 5

    1. esc 输入 :wq 保存退出

    2. 重启服务 service mysql restart 【windows下需要打开“服务”并找到mysql重启】

    3. 修改 mysql 密码 set password = password('root'); 或使用 方法 3

    4. 修改完密码后,需要将 my.cnf(my.ini) 文件修改回原样。

    5. 重启服务。完成

    machine_stop_alarm_msg 表只有一个聚集索引PK_machine_stop_alarm_msg,字段为recid。

    图片 6

    图片 7

    3、如果这个时候还是用sa或者别的账号可以登陆了,进去之后右键编辑表错误,那么这个时候你就需要进行下面的设置了。

     

    4、windows登陆进去选择表右键属性【权限】->搜索->浏览【public】->确定,在右边的具有授权,如果不知道的情况下全部打钩即可。参照截图如下

    当时我优化的时候,就觉得这个SQL语句存在两个问题:1 缺少索引; 2 存在隐式转换问题。当时创建了下面索引,并要求开发人员修改SQL,避免隐式转换。

    最终完美解决问题。效果如下图所示:

    CREATE NONCLUSTERED INDEX ix_machine_stop_alarm_msg_n1
    
    ON [dbo].[machine_stop_alarm_msg] ([machine_no],[status])
    
    INCLUDE ([recid],[stop_stime],[stop_etime],[memo],[createddate])
    
    GO
    

    图片 8

     

    完美解决,下班。

     

     

    在测试环境测试时,我们先不增加这个索引,就出现了下面一个场景,两者都是走聚集索引扫描:

     

    1: 执行计划走聚集索引扫描(Cluster Index Scan)

    SET STATISTICS IO ON;
    
    SET STATISTICS TIME ON;
    
    DECLARE  @P0 nvarchar(4000),@P1 nvarchar(4000);
    
     
    
    SET @P0='1';
    
    SET @P1='K172';
    
    SELECT [recid],[machine_no] 
    
       ,[stop_stime] 
    
       ,[stop_etime] 
    
       ,[status] 
    
       ,[memo] 
    
       ,[createddate]  
    
    FROM machine_stop_alarm_msg t  
    
    WHERE 1=1  
    
    AND t.status=@P0  
    
    AND t.machine_no in(@P1 )  
    
    ORDER BY machine_no, 
    
       stop_stime ;  
    
     
    
    SET STATISTICS IO OFF;
    
    SET STATISTICS TIME OFF;
    

    本文由金沙国际官网发布于数据库,转载请注明出处:SERVER中隐式转换的一些细节浅析,如何修改数据

    关键词: