【sql语句】好用的sql语句之项目数据库学习总结

        转载请注明出处:http://blog.csdn.net/pearyangyang/article/details/41115491

        这几天学习公司系统的数据流向。主要涉及到几个表的数据。但是表中的数据有上百万条,所以如果出现sql语句没有带条件的,会导致查询卡死,甚至出现内存溢出的情况。公司用到的数据库是sqlserver,所以下列的sql语句主要是针对sqlserver数据库的,其他数据库大同小异。

        1、当我要熟悉数据库表结构的时候,我需要执行一个语句,这条语句能够查看数据库的很多信息,如列名,字段名,字段大小,字段类型等等…….

        select * from information_schema.columns where table_name=’表名’

        2.、当然如果你想创建数据库表的创建情况的话可以执行下面的调用存储过程的语句:

        exec sp_help ‘表名’    

        3、当我想了解数据库主,外键的时候,我通过下面的语句:

        查询主键:EXEC sp_pkeys @table_name=’表名’  

        查询外键:

select 主键列名=(selectname from syscolumns where colid=b.rkey AND id = b.rkeyid) ,外键表名称=object_name(b.fkeyid),外键列名=(select name from syscolumns wherecolid=b.fkey AND id = b.fkeyid)
    from sysobjectsa join sysforeignkeys b on a.id = b.constid join sysobjects c on a.parent_obj =c.id where a.xtype = 'f' AND c.xtype='U' and object_name(b.rkeyid)='表名'

        4、查找数据库前面的数据(可以分析数据库表的设计和字段的具体情况)使用TOP关键字。 由于数据量太大,所以想分析数据的话我们可以提取数据前50或100条数据来查找,具体使用方法select top100 * from 表名,当查找一个字段在相对应的表中有多少种的时候,可以使用group by来查找。select 属性 from 表名 group by 属性

        ps:*号可以替换为数据库的列名来查找,后面也可以加上查询条件等等。

        5、当我们有时候需要判断一个字段是否为空的时候我们需要用到is null 判断或isnull()函数,在查找或删除的时候常常使用到。这两者我目前还没有找到在性能方面有什么大的差别,但是两者之间的用途还是不一样的,我觉得is null 更加简洁,比如select * from  表名  where name is null,而isnull()函数则更加灵活。下面将举几个例子:当我们有一个用户表,如果用户最开始没有填写自己的昵称,我们查找的时候可以给它默认一个昵称nickename,可以通过下面的sql语句来实现。

        假使用户的昵称为空,我们就可以通过select name,isnull(nickname,’csdn01用户’) from csdninfo ,默认就是csdn01用户。

        6、在delete之前最好select一次。  ,  最近公司出了一件大事,库存表warebalance被一不小心删除完了,30多W条数据一下子就没有了?  我不知道数据库有没有rollback,即使rollback以后数据之间实时在操作有没有导致数据库中数据产生错误? 原因就是在删除语句的时候本来想删除warebalancebak备份表,但是由于误操作,导致删除了warebalance,所以我们在删除之间最好查询一次,如果查询一次的话就可能不会导致上述错误。

               len关键字(根据长度查找)

               select * from t_stu where len(sno) = 14  (查找学生学号为14位的学生信息)

        7、当查看公司字段的时候,很多字段都使用了子查询,连接查询,所以还不会这些的可以查查相关的资料(弄懂inner/left/right join之间的区别)

        8、例如一个表中字段有相同的,你想从这些相同的数据中查询其中一个作分析,例如有一个tb_a表 

        《【sql语句】好用的sql语句之项目数据库学习总结》

        我想查找表字段中name唯一的数据,所以可以用distinct关键字来查:select distinct name from tb_a; 

        《【sql语句】好用的sql语句之项目数据库学习总结》      

        而如果我们再根据一些字段来查:select distinct name,num from tb_a; 我们可以看到结果:

       《【sql语句】好用的sql语句之项目数据库学习总结》

       总结:我们以后查唯一条件的时候,要根据相关条件和需求来查,得到你想要的结果~~

        9、公司数据库设计的思考,由于涉及到保密关系,所以很多细节性的东西不能描述,但是我们在设计表的时候,外键之间的关联和表与表之间的关系一定要弄清楚,必要的时候可以画草图辅助构思。

         其他的,等遇到了问题再逐渐总结上来吧。

2018-06-11 更新

在xxx.xx.xx.xxx 服务器,当我们想导出用sql语句查询的数据的时候我们可以通过下面的方法,例如我们想导出Billy这个用户的策略数据,我们导出在文件夹/var/lib/mysql/tmp下面

select * from strategy_tbl where user_id in (select id from user_tbl where name = 'Billy') into outfile '/var/lib/mysql/tmp/1.sql';

关键语词句 into outfile

当然这里可能会报错,因为文件夹可能没权限或者没建立的,这里我们就先给mysql用户和组赋予权限

chown mysql:mysql /var/lib/mysql/tmp

修改/etc/my.cnf 配置文件,在[mysql]段增加:tmpdir = /var/lib/mysql/tmp

《【sql语句】好用的sql语句之项目数据库学习总结》

最后将文件夹拷贝到你要导入的yyy.yy.yy.yyy服务器上面,use相应的数据库,在sql> 下面执行

load data local infile "1.sql" into table strategy_tbl character set utf8;

参考:https://blog.csdn.net/huaishuming/article/details/74762652

          http://blog.sina.com.cn/s/blog_9ffcd5dc01017wyz.html

    原文作者:寻找现实扭曲力场
    原文地址: https://blog.csdn.net/yangliding2011/article/details/41115491
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞