人生贵在坚持!

发布新日志

  • ubuntu中mongodb认证失败的问题处理

    2019-07-29 17:28:18


    使用robo 3t远程连接mongo,总是报错


    尝试了很多方法,都始终解决不了。

    后来发现原来用apt-get安装的mongodb并不是最新版
    root@ubuntu:~# mongo
    MongoDB shell version: 2.6.10
    connecting to: test

    而3.0以下的版本并不支持SCRAM-SHA-1,只支持MONGODB-CR

    > db.auth({user:'username',pwd:'password',mechanism:'SCRAM-SHA'})
    Error: 2 SCRAM-SHA mechanism support not compiled into client library.
    0
    所以在使用robot 3t采用MONGODB-CR认证就可以了。

    不过还是建议把mongodb升级为3.0以上。

  • ubuntu中给username授权mysql

    2019-07-26 17:26:33


    *********************授权********************
    root@ubuntu:~# mysql -u root -p
    Enter password: 

    mysql> GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;    

    mysql> flush privileges;

    mysql> exit;

    root@ubuntu:~# service mysql restart

    ***************回收权限***************************
    mysql>  revoke all on *.* from username;

    mysql> flush privileges;

    mysql> exit;

    root@ubuntu:~# service mysql restart
  • mango中执行数据更新

    2019-02-18 12:53:26


    查询level不等于0的数据:
    db.getCollection('tablename').find({level:{$ne:0}})


    扩展:
    "$lt", "$lte", "$gt", "$gte", "$ne"就是全部的比较操作符,对应于"<", "<=", ">", ">=","!="。


    修改level不等于0的数据,改为0:

    db.tablename.update({level:{$ne:0}},{$set:{level:0}},false,true)


    扩展:
    第三个参数设置为true,代表insertOrUpdate,即存在即更新,否则insert该数据

    第四个参数,该参数为true,则批量更新,为false,则更新一条 

  • sql生成随机数的方法

    2018-03-20 15:01:03

    #生成6位长度,其中首位是字母'T'的随机数

    select LEFT( CONCAT( 'T', LEFT( REVERSE( RAND( ) ) , 10 ) ) , 6 )

    解析:
    RAND():
    返回从01之间的随机浮点值,例如'0.8523584183793128'

    REVERSE():返回字符串值的逆向值,例如REVERSE('0.8523584183793128')的结果为'8213973814853258.0'

    LEFT(<
    字符表达式a>,<位数b>):从字符表达式最左边第一个字符开始返回指定数目的字符. b 的值大于 a 的长度,则返回字符表达式的全部字符a.如果 b 为负值或 0,则返回空字符串.

    CONCAT(字符串1,字符串2): 用于将两个字符串连接起来,形成一个单一的字符串。

  • 处理数据阻塞和死锁

    2017-05-27 10:03:39

    某天对正在使用的某个数据库操作离线,导致数据库阻塞,离线失败,查找了半天,终于处理。

    --查询阻塞语句:
    SELECT a.blocking_session_id, a.wait_duration_ms, a.session_id,b.text
    FROM sys.dm_os_waiting_tasks a,
    (SELECT t.text ,c.session_id
    FROM sys.dm_exec_connections c 
    CROSS APPLY sys.dm_exec_sql_text (c.most_recent_sql_handle) t) b 
    WHERE  a.session_id = b.session_id and a.blocking_session_id IS NOT NULL
    --处理方式:
    --使用kill session ID的语句来终止某个阻塞的session。
    kill [blocking_session_id];

    --另外死锁的查询和处理如下:
    exec master.dbo.sp_who_lock --查看当前死锁进程
    exec master.dbo.p_killspid ytsafety--杀掉引起死锁的进程

    --查询死锁

    select   
        request_session_id spid,  
        OBJECT_NAME(resource_associated_entity_id) tableName   
    from   
        sys.dm_tran_locks  
    where   
        resource_type='OBJECT 

    --杀死死锁进程

    kill spid 




  • 转:SQL Server 2008如何进行数据库分离和附加

    2016-08-10 13:07:15

    一、概述

    SQLServer提供了“分离/附加”数据库、“备份/还原”数据库、复制数据库等多种数据库的备份和恢复方法。这里介绍一种学习中常用的“分离/附加”方 法,类似于大家熟悉的“文件拷贝”方法,即把数据库文件(.MDF)和对应的日志文件(.LDF)拷贝到其它磁盘上作备份,然后把这两个文件再拷贝到任何 需要这个数据库的系统之中。比如,在实验教学过程中,同学们常常想把自己在学校实验室计算机中创建的数据库搬迁到自己的计算机中而不想重新创建该数据库, 就可以使用这种简单的方法。但由于数据库管理系统的特殊性,需要利用SQL Server提供的工具才能完成以上工作,而直接的文件拷贝是行不通的。

    这个方法涉及到SQL Server分离数据库和附加数据库这两个互逆操作工具。

    1、 分离数据库就是将某个数据库(如student_Mis)从SQL Server数据库列表中删除,使其不再被SQL Server管理和使用,但该数据库的文件(.MDF)和对应的日志文件(.LDF)完好无损。分离成功后,我们就可以把该数据库文件(.MDF)和对应 的日志文件(.LDF)拷贝到其它磁盘中作为备份保存。

    2、附加数据库就是将一个备份磁盘中的数据库文件(.MDF)和对应的日志文件(.LDF)拷贝到需要的计算机,并将其添加到某个SQL Server数据库服务器中,由该服务器来管理和使用这个数据库。

    二、分离数据库

    1. 在启动SSMS并连接到数据库服务器后,在ObjectExplorer管理器中展开服务器节点。在数据库对象下找到需要分离的数据库名称,这里以student_Mis数据库为例。右键单击student_Mis数据库,在弹出的快捷菜单中选择属性。

    2. 在“数据库属性”窗口左边“选择页”下面区域中选定“选项”对象,然后右边区域的“其它选项”列表中找到“状态”项,单击“限制访问”文本框,在其下拉列表中选择“SINGLE_USER”。

    3. 在上图中单击“确定”按钮后将出现一个消息框,通知我们此操作将关闭所有与这个数据库的连接,是否继续这个操作(如下图)。注意:在大型数据库系统中,随意断开数据库的其它连接是一个危险的动作,因为我们无法知道连接到数据库上的应用程序正在做什么,也许被断开的是一个正在对数据复杂更新操作、且已经运行较长时间的事务。

    4. 单击“是”按钮后,数据库名称后面增加显示“单个用户”(如下图)。右键单击该数据库名称,在快捷菜单中选择“任务”的二级菜单项“分离”。出现下图所示的“分离数据库”窗口。

    5. 在下图的分离数据库窗口中列出了我们要分离的数据库名称。请选中“更新统计信息”复选框。若“消息”列中没有显示存在活动连接,则“状态”列显示为“就绪”;否则显示“未就绪”,此时必须勾选“删除连接”列的复选框。

    6. 分离数据库参数设置完成后,单击底部的”确定”按钮,就完成了所选数据库的分离操作。这时在ObjectExplorer的数据库对象列表中就见不到刚才被分离的数据库名称student_Mis了(如下图)。

    三、附加数据库

    1.将需要附加的数据库文件和日志文件拷贝到某个已经创建好的文件夹中。出于教学目的,我们将该文件拷贝到安装SQL Server时所生成的目录DATA文件夹中。

    2. 在下图窗口中,右击数据库对象,并在快捷菜单中选择“附加”命令,打开“附加数据库”窗口。

    3. 在“附加数据库”窗口中,单击页面中间的“添加”按钮,打开定位数据库文件的窗口,在此窗口中定位刚才拷贝到SQL Server的DATA文件夹中的数据库文件目录(数据文件不一定要放在“DATA”目录中),选择要附加的数据库文件(后缀.MDF,如下图)。

    4. 单击“确定”按钮就完成了附加数据库文件的设置工作。这时,在附加数据库窗口中列出了需要附加数据库的信息(如下图)。如果需要修改附加后的数据库名称,则修改“附加为”文本框中的数据库名称。我们这里均采用默认值,因此,单击确定按钮,完成数据库的附加任务。

    完成以上操作,我们在SSMS的ObjectExplorer中就可以看到刚刚附加的数据库student_Mis (如下图)。

    以上操作可以看出,如果要将某个数据库迁移到同一台计算机的不同SQL Server实例中或其它计算机的SQL Server系统中,分离和附加数据库的方法是很有用的。

  • sql查询字符串中有多少个逗号

    2016-05-06 17:03:56

    今天这个函数帮了我大忙,必须记录一下。

    --查询某个字符串中有多少个逗号

    select len(col)-len(replace(col,',','')) 逗号数

    from OperatingArea 

  • 【转】SELECT INTO 和 INSERT INTO SELECT 两种表复制语句

    2016-04-29 09:44:45


          Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少。但我们在开发、测试过程中,经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了。

          1.INSERT INTO SELECT语句

          语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1

          要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。示例如下:


       --1.创建测试表
        create TABLE Table1
        (
            a 
    varchar(10),
            b 
    varchar(10),
            c 
    varchar(10),
            
    CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
            (
                a 
    ASC
            )
        ) 
    ON [PRIMARY]

        
    create TABLE Table2
        (
            a 
    varchar(10),
            c 
    varchar(10),
            d 
    int,
            
    CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED
            (
                a 
    ASC
            )
        ) 
    ON [PRIMARY]
        
    GO
        
    --2.创建测试数据
        Insert into Table1 values('','asds','90')
        
    Insert into Table1 values('','asds','100')
        
    Insert into Table1 values('','asds','80')
        
    Insert into Table1 values('','asds',null)
        
    GO
        
    select * from Table2

        
    --3.INSERT INTO SELECT语句复制表数据
        Insert into Table2(a, c, d) select a,c,5 from Table1
        
    GO

        
    --4.显示更新后的结果
        select * from Table2
        
    GO
        
    --5.删除测试表
        drop TABLE Table1
        
    drop TABLE Table2


          2.SELECT INTO FROM语句

          语句形式为:SELECT vale1, value2 into Table2 from Table1

          要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。示例如下:


       --1.创建测试表
        create TABLE Table1
        (
            a 
    varchar(10),
            b 
    varchar(10),
            c 
    varchar(10),
            
    CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
            (
                a 
    ASC
            )
        ) 
    ON [PRIMARY]
        
    GO

        
    --2.创建测试数据
        Insert into Table1 values('','asds','90')
        
    Insert into Table1 values('','asds','100')
        
    Insert into Table1 values('','asds','80')
        
    Insert into Table1 values('','asds',null)
        
    GO

        
    --3.SELECT INTO FROM语句创建表Table2并复制数据
        select a,c INTO Table2 from Table1
        
    GO

        
    --4.显示更新后的结果
        select * from Table2
        
    GO
        
    --5.删除测试表
        drop TABLE Table1
        
    drop TABLE Table2
  • SQL查找重复记录

    2016-01-08 14:02:25

    查找CodeNo重复的记录:

    SELECT COUNT(CodeNo),CodeNo 

    FROM A 

    GROUP BY CodeNo 

    HAVING COUNT(CodeNo)>1

    ——————————————————————————————————

    GROUP BY 语句

    GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。

    合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句。

    ——————————————————————————————————

    HAVING 子句

    SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。

    ——————————————————————————————————

    SQL语法

    SELECT column_name, aggregate_function(column_name)

    FROM table_name

    WHERE column_name operator value

    GROUP BY column_name

    HAVING aggregate_function(column_name) operator value

     

  • SQL中的Like模糊查询语句

    2015-10-12 14:23:21

    一般模糊查询语句如下:

    SELECT 字段 FROM WHERE 某字段 Like 条件

     

    其中关于条件,SQL提供了四种匹配模式:
    % 
    :表示任意0个或多个字符。可匹配任意类型和长度的字符。

    _  表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度。

    [ ] :表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

    [^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。

     

    SQL模糊查询,使用like比较关键字,加上SQL里的通配符,请参考以下: 
    1
    LIKE'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。 
    2
    LIKE'%inger' 将搜索以字母 inger 结尾的所有字符串(如 RingerStringer)。 
    3
    LIKE'%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 BennetGreenMcBadden)。 
    4
    LIKE'_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 CherylSheryl)。 
    5
    LIKE'[CK]ars[eo]n' 将搜索下列字符串:CarsenKarsenCarson Karson(如 Carson)。 
    6
    LIKE'[M-Z]inger' 将搜索以字符串 inger 结尾、以从 M Z 的任何单个字母开头的所有名称(如 Ringer)。 
    7
    LIKE'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather)。 

     

  • SQL中的DateDiff函数

    2015-10-12 14:14:37



    函数 参数/功能
    GetDate( ) 返回系统目前的日期与时间
    DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1

    查找本月记录:SELECT * FROM 表 WHERE datediff(month,[dateadd],getdate())=0

    查找本周记录:SELECT * FROM 表 WHERE datediff(week,[dateadd],getdate())=0

    查找本日记录:SELECT * FROM 表 WHERE datediff(day,[dateadd],getdate())=0

    查找本日记录:SELECT * FROM 表 WHERE datediff(day,[dateadd],getdate())=1

Open Toolbar