MySQL常用技能篇

摘要:
这是对工作中遇到的问题和场景的总结。欢迎指出本文中的局限性,MySQL具有客户端风格,可以拖动和编写;或者通过命令行进行交互;作为一个开源数据库,MySQL在企业应用程序中非常常见。

写在之前的话:

  之前一直在用MSSERVER,刚用MySQL时有很多的不适应。就此小结一下工作中遇到的问题和场景(用的不是很深入,供初学者参考),文中出现的局限性欢迎指出

  MySQL有客户端式(SQLyog),可托拉拽和写代码;或者通过命令行的方式进行交互(mysql -h10.***.***.*** -P*** -u***  -p****);(170920补充:hive的语法最接近MySQL)

  MySQL作为开源的数据库,在企业应用中十分普遍。 

数据库操作

  创建数据库:create database demon;

  删除数据库:drop database demon;

表操作

创建

  1.1、创建数据表

     create table s_position
        (
            id int not null auto_increment,
            name varchar(20) not null default '经理', #设定默认值
            description varchar(100),
            primary key PK_positon (id),   #设定主键
            unique (id,name)   #设定唯一值
        );
  1.2、复制表/结构(若仅复制结构使用limit 0 选项)
    create table tab1 as  select * from table1;
  1.3、创建临时表(临时表只在当前连接可见,当这个连接关闭的时候,会自动drop)
    create temporary table tab1 (name varchar(25),...);
  1.4、创建表进行判断
    create table if not exists tabl1 (.....);
  1.5、表重命名
    alter talbe table1 rename as table2;
修改
  2.1、增加列
    alter talbe table1 add (test vhar(10),hehe char(12));
  2.2、修改列
    alter table table1 modify test char(20) not null
  2.3、修改默认值
    alter table table1 alter test set default 'system';
   2.4、去掉默认值
    alter table table1 alter test drop default;
  2.5、去掉列
    alter table table1 drop column test;
    删除多列
    alter table table1 drop column test1,
                column test2,...;
  2.6、创建索引
    create index index_name on table_name(column_name);
  2.7、删除主键  
     alter table table1 drop primary key;
  2.8、增加主键
    alter table table1 add primary key PK_depart_pos (department_id,position_id);
 
更新 
  格式
    单表:update [LOW_PROORITY] [IGNORE] TABLENAME set COLUMN_NAME="***" WHERE CLOLUMN_NAME="&&&" [ORDER BY  ...] [LIMIT rows]
    或
    多表:update [LOW_PROORITY] [IGNORE] TABLENAME [,tab2,tab3,....] set col_name1=expr1,.... [where ...]
 
  说明
    如果指定关键词LOW_PRIORITY,update的执行将被延迟,直到没有其他的客户端正在读取表;如果指定关键词IGNORE,则更新语句将不会异常中止,即使在更新过程中出现了重复键错误。导致冲突的记录将不会被更新;如果在一个表达式中从tbl_name中访问一个列,update使用咧的当前值
    
  示例:多表更新
      update tab1 ,tab2 set column1=column2,... where condition1='***'
 
常用函数
 
1、date和time
          a.当前datetime:now():2017-06-07 14:31:52
          b.返回时间:time():select time(now());  --->14:31:52
          b1.返回日期:date():select date(now()); --->2017-06-07
          c.返回年月日:year()/month()/day()
          d.返回时分秒:hour()/minute()/second()
          e.取时间含义:dayname()--星期几;
                                dayofweek():返回日期对应的星期:1--周日;2--周一;。。
                                dayofyear():返回日期为该年的第多少天;
                                last_day():返回某个日期的最后一天;-->select last_day(now());  '2017-06-30'
          f.日期计算:  interval:灵活性加减日期
                                      select now()+interval +5 day;
                                      select now()+interval -4 minute;
                              datediff(enddate,start_date),返回天数
                              timestampdiff(interval,begin_date,end_date ):求对应的时间差(天、时、分、秒)
 
2、字符串函数
               a.长度
                    char_length():字符串长度 我是 --> 2  
                    length():字符长度,”我是” --> 4  【字母/符号/数字 一个字符】
               b.拼接函数
                    concat(str1,str2,...):
                    concat(seperator,str1,str2,...):带有分隔符的拼接函数
               c.字符查找
                    locate(find_str,str,start):
               d.字符截取
                    substring(str,start[,end])
               e.替换
                    replace(str,old_str,new_str)
               f.插入
                    insert(str,start,length,repr):在指定的位置插入字符或字符串
          示例:select insert('aaabcdefg',3,5,'what')  ---aawhatfg
                    select insert('aaabcdefg',3,1000,'what')  ---aawhat
               g.补充:
      补充:①重复函数repeat(str,count)
               ②大小写转化:lower(str)/Lcase(str)、Upper(str)/Ucase(str)
               ③反转函数:reverse(str)
               ④空格函数:space(N)
               ⑤去空格函数:ltrim()、rtrim()、trim()
 
3.数值函数
               a.转换
                    cast
               b.截取
                    round(data,n):四舍五入,保留小数位数n位
                    truncate(data,n):截取数据到n位,不四舍五入
                    floor():数据的最大整数部分
                    ceil():大于数据的最小整数
               c.取最小值
                    least(arg1,...):取最小值
               d.数据处理
                    rand():随机小数
                    format(,n):数据格式化,转化为含千分位数据,四舍五入保留n位小数
 
4.控制流函数
               a.case 
                    case when ....then ...else ... end
               b.if
                    if(condition,true_value,false_value)
               c.ifnull
                    ifnull(arg1,arg2):arg1位空时则取值arg2,
               d.nullif
                    nullif(arg1,arg2):arg1=arg2时为空,否则为arg1
 
数据导入导出(20171011更)
  MySQL中如何数据及结构的导入导出来实现数据及结构的备份呢?在工作中使用到mysqldump命令。有兴趣可以看这里:http://blog.chinaunix.net/uid-26805356-id-4138986.html
  导入举例:
    load data local infile '/shj/etl/new_data.csv' into table bi.test(a,b,c,d);
  导出举例(这里我们通过-d参数,只导出数据结构;--skip-lock-tables,避免出现权限不足的1044错误):
     mysqldump -h** -P3306 -u** -p** -d --skip-lock-tables  ecf_webapp acct_business_account acct_loan acct_payment_log >~/sunhuajian/etl/ecf_webapp_structure.sql
 
  
 
 
 
 
转载请注明出处!欢迎邮件沟通:shj8319@sina.com
 

免责声明:文章转载自《MySQL常用技能篇》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇log4net将日志进行分类,保存到不同的目录当中Lua字符串库下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

cjson库的使用以及源码阅读

cjson是一个用c语言开发的json解析库,免费开源只有一个c文件和一个h文件。json和xml功能相似,可以用来传输数据,存储数据以及表达程序当前的状态。 1、下载cjson的源码         https://github.com/DaveGamble/cJSON 2、阅读readme文件可以大概的了解一下cjson的介绍以及使用方法,我尝试着把...

mysql压缩包安装方式

从官网https://dev.mysql.com/downloads/mysql/上下载mysql-5.6.31-winx64.zip,将其解压,接下来的安装是通过命令来安装MySQL数据库的。(P.S. 5.7的版本会出问题,最好还是5.6的版本) (1)mysql-5.6.31-winx64.zip解压到E:JavaWebDeveloper文件下,打开...

MYSQL问题解决方案:Access denied for user 'root'@'localhost' (using password:YES)

 这两天在MyEclipse中开发Web项目时,连接MySQL数据库,出现问题:Access denied for user 'root'@'localhost' (using password:YES)。         经查找资料发现是root帐户默认不开放远程访问权限,所以需要修改一下相关权限。       解决方案: 打开MySQL目录下的my....

黄聪:mysql查询今天,昨天,近7天,近30天,本月,上一月数据的方法

mysql查询今天,昨天,近7天,近30天,本月,上一月数据的方法分析总结: 话说有一文章表article,存储文章的添加文章的时间是add_time字段,该字段为int(5)类型的,现需要查询今天添加的文章总数并且按照时间从大到小排序,则查询语句如下: select * from `article` where date_format(from_UNI...

mysql全文检索

mysql到版本3.23.23时,开始支持全文检索,通过语句SELECT ... FROM ... MATCH(...) AGAINST(...) 来在整个表中检索是否有匹配的,全文索引是一个定义为fulltext的类型索引,应用在myisam表中。值得一提的是对于一个大的数据库来说,把数据装载到一个没有fulltext索引的表中,然后再添加索引,这样速度...

python编码encode decode(解惑)

关于python 字符串编码一直没有搞清楚,今天总结了一下。 Python 字符串类型 Python有两种字符串类型:str 与 unicode。 字符串实例 # -*- coding: utf-8 -*- # 这个是 str 的字符串 s = '关关雎鸠' # 这个是 unicode 的字符串 u = u'关关雎鸠' print isinstanc...