Java URL URI

Java URL URI http://blog.csdn.net/majiabao123/article/details/4202158 从JDK1.4开始,java.net包对统一资源定位符(uniform resource locator URL)和统一资源标识符(uniform resource identifier URI)作了非常有用的区分。 URI是个纯粹的句法结构,用于指定标识Web资源的字符串的各个不同部分。URL是URI的一个特例,它包含了定位Web资源的足够信息。其他URI,比如: mailto: cay@horstman.com 则不属于定位符,因为根据该标识符无法定位任何资源。像这样的URI我们称之为URN(统一资源名称)。 在Java类库中,URI类不包含任何访问资源的方法,它唯一的作用就是解析。相反的是,URL类可以打开一个到达资源的流。因此URL类只能作用于那些Java类库知道该如何处理的模式,例如: http: ,https: ,ftp:,本地文件系统(file:),和Jar文件(jar:)。 URI类的作用之一是解析标识符并将它们分解成各个不同的组成部分。你可以用以下方法读取它们: getSchema getHost getPort getPath getQuery URI类的另一个作用是处理绝对标识符和相对标识符。如果存在一个如下的绝对URI: http://docs.mycompany.com/api/java/net/serversocket.html 和一个如下的相对URI: ../../java/net/socket.html#Socket() 那么你可以将它们合并成一个绝对URI: http://docs.mycompany.com/api/java/net/socket.html#Socket() 这个过程被称为相对URL的转换。 与此相反的过程成为相对化。例如: 假设你有一个基本URI: http://docs.mycompany/api 和另一个URI: http://docs.mycompany/api/java/lang/String.html 那么相对化后的URI就是: java/lang/String.html

2014-02-26 · 1 min · 39 words · -

电脑通过USB共享android手机网络访问Internet

电脑通过USB共享android手机网络访问Internet 打开手机USB绑定 【设置】->【无线和网络设置】->【绑定与便携式热点】->【USB绑定】 详细内容参见: https://support.google.com/android/answer/182134#usb 2.下载驱动安装信息 从android官网下载驱动程序信息文件 tetherxp.inf ( http://www.android.com/drivers/tetherxp.inf ) 3.使用手机附带的 USB 线连接手机与计算机。 4.Windows XP 的"新硬件向导"打开后,选择否,暂时不,然后点击下一步。 5.选择从列表或指定位置安装,然后点击下一步。 6.点击浏览,找到您在步骤 1 中下载的配置文件的安装目录,然后点击下一步。Windows XP 会使用该配置文件进行配置,以支持与 Android 手机进行 USB 网络共享。 7.在 Windows XP 安装完用于 Android USB 以太网/RNDIS 的软件后,点击完成。 http://blog.sina.com.cn/s/blog_570343830101ezix.html https://support.google.com/android/answer/182134#usb

2014-02-25 · 1 min · 37 words · -

怎样用Javascript定义一个类

怎样用Javascript定义一个类 http://www.cnblogs.com/xcj26/archive/2013/04/08/3006023.html 其实Javascript中没有类这个定义,但是有类这个概念。很多人都写过这样的代码,对,没错,就是如下代码,清晰的不能再清晰了,就是一个关键字 function,然后定义一个方法名,方法名后紧跟一对括号。如果你在项目中写过这样的代码,那么祝贺你,你可以不费任何吹毛之力,就能一口气读完这篇博文了. function Print() { …… } 当我们在写c#代码,焦头烂额,无从下手的时候,至少我们还是可以厚着脸皮在老板的面前,敲出华丽的 class ***{},是的,没错,就这几个字符。殊不知这这几个字符体现出来的境界。说浅些,我会敲键盘写代码,说深些,我有可能理解了面向对象的编程,至少我会定义一个类。是这样的,c#中定义一个类是用class。 有一天,老板变态了,让我用Javascript来定义一个类,我无从下手呀,我平时都是用("."),("#")的人物呀,思考良久,我还模糊的记的document.getElementById("")这个东西,但是好像与Javascript的类扯不上关系呀。怎么办?问了google问百度啊,最后在一个角落,找到了定义Javascript类的E文。仔细一阅,难道这是一个坑吗?明明用function定义了一个方法,活生生的把它说成一个类,反复几次Google百度后,有点怀疑了,难道Javascript中定义一个类,真的是用function?其实没错,在Javascript中,定义一个类是用fucntion() *\*{}。不管是在学校的菜鸟,还是国外的顶级程序员,在这件事上是平等的,想定义一个Javascript的类,就必须得先敲下function **(){}。 在定义Javascript类上,表现形势上大家虽然是平等的,都是用function ***(){}。但实质上,确是蕴含着大量的学问。也许有些朋友到目前为止,是不是感觉我说的太简单了,那我们就在这个function上玩点花样。 function Dog(category, name, age) { this.Category = category; this.Name = name; this.Age = age; } 一个Javascript类就这样定义完成了,现在就可以自豪的说,我会面向对象的手法编定Javascript代码了。 类定义好了,那我们怎么样来用这个类呢?其实用法和C#的用法很像。 var dog01 = new Dog(“狗类”, “土狗”, 2); var dog02 = new Dog(“狗类”, “黄狗”, 5); 有些朋友要拍砖了,这么简单的东西,都拿出来说,那我们不妨再来进阶一下。我上边的代码,实例化了两个对象,一个是dog01,dog01下边那个是dog02。因为dog01的Cateogry太口语化了,我要修改为dog01.Categry = ‘犬类’,这样听起来是不是舒服多了,这是一个很简单的事,我们仅仅需要为dog01的Cateogry重赋值就可以了。我们修改了dog01的Cateory, dog02的Category会跟着变吗?答案是肯定的,不会变,如果有变,肯定有鬼。那我们有没有方法让dog01,dog02这些对象的Cateogry属性共用起来呢?也就是说当我修改了Category属性,不管是dog01,还是dog02都跟一样的变,我们不妨来这样写写。 <img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /> function Dog(name,age) { this.Name = “”; this.Age = “”; } Dog.prototype.Category = “狗类”; var dog01 = new Dog(“土狗”,2); var dog02 = new Dog(“黄狗”,5); alert(dog01.Category); alert(dog02.Category); Dog.prototype.Category = “犬类”; alert(dog01.Category); alert(dog02.Category); ...

2014-02-25 · 1 min · 95 words · -

spring junit

spring junit 一.首先讲下注解,autowire 与 resource的区别 @Autowired是按类型装配依赖对象,默认情况下,要求依赖对象必须存在,若允许null值,可以设置它的required属性为false。如果想使用按名称装配,可以结合@Qualifier注解一起使用。如: @Autowired @Qualifier(“xmlBean1”) private XMLBean xmlBean; @Resource和@Autowired一样,也可以标注在字段或属性的setter方法上,但它默认是按名称装配。名称可以通过@Resource的name属性指定,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。当没有使用name属性时,如果按照字段名找不到bean,就会转而使用按类型装配的方式进行查找;但当使用了name属性,只能按照指定的name查找bean,当找不到相应的bean时,就会抛异常。 @Resource(name=“xmlBeanx”) private XMLBean xmlBean;//用于字段上 二.讲解spring测试套件的好处: 在开发基于Spring的应用时,如果你还直接使用Junit进行单元测试,那你就错过了Spring为我们所提供的饕餮大餐了。使用Junit直接进行单元测试有以下四大不足: 导致多次Spring容器初始化问题 根据JUnit测试方法的调用流程,每执行一个测试方法都会创建一个测试用例的实例并调用setUp()方法。由于一般情况下,我们在setUp()方法中初始化Spring容器,这意味着如果测试用例有多少个测试方法,Spring容器就会被重复初始化多次。虽然初始化Spring容器的速度并不会太慢,但由于可能会在Spring容器初始化时执行加载Hibernate映射文件等耗时的操作,如果每执行一个测试方法都必须重复初始化Spring容器,则对测试性能的影响是不容忽视的; -->使用Spring测试套件,Spring容器只会初始化一次! 需要使用硬编码方式手工获取Bean 在测试用例类中我们需要通过ctx.getBean()方法从Spirng容器中获取需要测试的目标Bean,并且还要进行强制类型转换的造型操作。这种乏味的操作迷漫在测试用例的代码中,让人觉得烦琐不堪; -->使用Spring测试套件,测试用例类中的属性会被自动填充Spring容器的对应Bean ,无须在手工设置Bean! 数据库现场容易遭受破坏 测试方法对数据库的更改操作会持久化到数据库中。虽然是针对开发数据库进行操作,但如果数据操作的影响是持久的,可能会影响到后面的测试行为。举个例子,用户在测试方法中插入一条ID为1的User记录,第一次运行不会有问题,第二次运行时,就会因为主键冲突而导致测试用例失败。所以应该既能够完成功能逻辑检查,又能够在测试完成后恢复现场,不会留下"后遗症"; -->使用Spring测试套件,Spring会在你验证后,自动回滚对数据库的操作,保证数据库的现场不被破坏,因此重复测试不会发生问题! 不方便对数据操作正确性进行检查 假如我们向登录日志表插入了一条成功登录日志,可是我们却没有对t_login_log表中是否确实添加了一条记录进行检查。一般情况下,我们可能是打开数据库,肉眼观察是否插入了相应的记录,但这严重违背了自动测试的原则。试想在测试包括成千上万个数据操作行为的程序时,如何用肉眼进行检查? -->只要你继承Spring的测试套件的用例类,你就可以通过jdbcTemplate在同一事务中访问数据库,查询数据的变化,验证操作的正确性! Spring提供了一套扩展于Junit测试用例的测试套件,使用这套测试套件完全解决了以上四个问题,让我们测试Spring的应用更加方便。现在我的项目中已经完成摒弃Junit,而采用Spring的测试套件,确实带来了很大的便利。严重推荐Springer使用这个测试套件。这个测试套件主要由org.springframework.test包下的若干类组成,使用简单快捷,方便上手。 ** 最后讲spring 的 测试套件:** 1.显示基类,其实就是用来加载配置文件的 @RunWith(SpringJUnit4ClassRunner.class) //使用junit4进行测试@ContextConfiguration({"/app*.xml","/spring/app*.xml","/spring/service/app*.xml"}) //加载配置文件 public class BaseJunit4Test { } 接着是我们自己的测试类 public class UserAssignServiceTest extends BaseJunit4Test{ @Resource //自动注入,默认按名称 private UserAssignService userAssignService; @Test //标明是测试方法 @Transactional //标明此方法需使用事务 @Rollback(false) //标明使用完此方法后事务不回滚,true时为回滚 public void testInsertUserAssign() { for(int i=0;i<10;i++){ UserAssign u=new UserAssign(); u.setAmount("7"); u.setCity(2); u.setProvince(1); u.setCompany("宜信"); u.setCreate_date(DateUtil.getCurrentTimeSecond()); u.setCreator(0); u.setEmail("1133@163.com"); u.setOper_date(DateUtil.getCurrentTimeSecond()); u.setPosition("工人"); u.setOperator(0); u.setQudao("2"); u.setUsername("张"+i); userAssignService.insertUserAssign(u); Assert.assertNotNull(u.getId()); } } }

2014-02-24 · 1 min · 88 words · -

aws-cli

aws-cli install # archlinux pacman -Sy aws-cli # macos https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html aws console> iam> user> w10n_ec2>create access key> cli> commands aws configure # default region name: ap-southeast-1 # default output format: json cat ~/.aws/credentials cat ~/.aws/config aws ec2 describe-instances --instance-ids i-xxxxxxxxxxxxxxxxx --query 'Reservations[*].Instances[*].{ID:InstanceId,State:State.Name}' --output table

2014-02-24 · 1 min · 44 words · -

spring MVC 返回JSON数据(Spring3.0 MVC+Jackson+AJAX)

spring MVC 返回JSON数据 (Spring3.0 MVC+Jackson+AJAX) 本文本的框架为:SpringMVC 3.2.3 \ jackson 1.9.2 传统的返回JSON格式的AJAX,用的方法一般是: 在后台先把数据(Object)封装成JSON数据,再用HttpServletResponse返回。 本示例中,SpringMVC可直接支持JSON格式数据的返回。具体如下。 1、JAR包: SPRINGMVC包需的包,另外还需JACKSON的两个包。 jackson-core-asl-1.9.2.jar jackson-mapper-asl-1.9.2.jar 2、spring-servlet.xml中加入: Java代码 <img alt="收藏代码" src="http://angelbill3.iteye.com/images/icon_star.png" /> <!- 返回JSON模版 -> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" > <property name="messageConverters"> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /> </list> </property> </bean> 我们在SPRING的配置中加入了一个新的适配器: AnnotationMethodHandlerAdapter,通过这个适配器,我们配置了一个属性,messageConverters,其中mappingJacksonHttpMessageConverter这个Bean,它就是用来处理json数据转换的。 注: 我的项目中没有乱码现象,这样配即可,若有乱码现象,可以在MappingJacksonHttpMessageConverter的BEAN中配置supportedMediaTypes属性,是用于解决返回的乱码问题。 3、Controller中的使用 Java代码 <img alt="收藏代码" src="http://angelbill3.iteye.com/images/icon_star.png" /> @Controller public class SelectController { @Resource private TypeService typeService; @RequestMapping("/type") @ResponseBody public Object type(){ List<Type> typelist = this.typeService.getTypeByParentid(Const.TYPE_DAILY); return typelist; } } 在SpringMVC中可以在Controller的某个方法上加**@ResponseBody**注解,表示该方法的返回结果直接写入HTTP response body中。 ...

2014-02-21 · 1 min · 129 words · -

Javascript 加载顺序

Javascript 加载顺序 Javascript加载顺序 http://www.benben.cc/blog/?p=9 最近经常看到别人提及Javascript脚本的加载顺序,看完之后虽略有所悟,但古人云"纸上得来终觉浅,绝知此事要躬行。“这句话云的好,所以我决定亲自测试一下,看看浏览器究竟是怎么加载脚本的。 先看html部分的代码: <script>alert("我是html根节点之外的内部脚本");</script> 再看header.js中的代码: 1 alert("我是header中src外部引用的脚本"); 接着是outer.js中的代码: document.write('<script type="text/javascript">'); document.write(‘alert(“我是header中通过外部通过document.write生成的脚本”)’); //document.write(’’); document.write(’’); 最后是body.js中的代码 1 alert("我是body中src外部引用的脚本"); 代码的输出顺序如下: alert("我是html根节点之外的内部脚本"); alert(“我是头部header里的内部脚本”); alert(“我是header中src外部引用的脚本”); alert(“我是header中通过外部通过document.write生成的脚本”); alert(“我是页面body里的内部脚本”); alert(“我是body中src外部引用的脚本”); alert(“我是html根节点之外的内部脚本”); 最后只有点击按钮才会触发alert(‘我是body中的按钮,这是我自己绑定的事件’); 刚开始看完代码后你觉得加载顺序如何呢?其实很简单,浏览器加载的时候完全是按照自上而下顺序加载的,遇到外部引用就暂时跳出到外部js中执行,执行完毕后返回跳出的位置继续向下执行,而且经测试可以看到,按钮是在body.js执行完毕后才显示在页面中的,这也证实了浏览器是顺序加载的。 这里需要说明两点: 浏览器根节点之外是不允许有任何元素的,在这里我们只是为了判断加载顺序才写了不符合规矩的代码,这一点可以在chrome的调试中看到报错。 outer.js中通过document.write再次引用外部js的那一行我已经做了注释,虽然此方法有许多人证实可行,但是在我的环境下会报脚本错误,而且这样做会引起浏览器加载顺序的不兼容 (详情可见: Javascript加载顺序的BUG) ,因此在实际应用中若非迫不得已还是少用为妙。

2014-02-21 · 1 min · 35 words · -

H2 Database

H2 Database H2的简单使用 H2不依赖与任何Jar包,使用H2时,只需要将H2的Jar包添加到classpath中即可。 Xml代码 <img alt="收藏代码" src="http://puroc.iteye.com/images/icon_star.png" /> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.3.171</version> </dependency> **配置数据源: ** 通过spring jdbc来访问H2,下面是spring的配置,在这里我使用的是H2的in-memery模式。 Xml代码 <img alt="收藏代码" src="http://puroc.iteye.com/images/icon_star.png" /> <bean id="dataSource4H2" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.h2.Driver" /> <property name="url" value="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;IGNORECASE=TRUE;MODE=MySQL" /> <property name="username" value="test" /> <property name="password" value="test" /> </bean> <bean id="jdbcTemplate4H2" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource"> <ref bean="dataSource4H2" /> </property> </bean> H2的URL可以支持很多参数的设置,具体可以参看H2的官方网站http://www.h2database.com/html/features.html 我这里的参数配置说明如下: a) jdbc:h2:mem:test: 代表用内存来存储数据。mem:后面的为数据库名称。 b) DB_CLOSE_DELAY=-1: 代表当JVM停止时才关闭H2数据库。 c) IGNORECASE=TRUE: 不区分大小写。 d) MODE=MySQL: H2本身支持的是标准的SQL,但实际上不同的数据库之间存在一些差别,H2为了适配不同的数据库,可以在URL中添加MODE这个参数,我们使用的是MySQL数据库,所以MODE=MySQL ...

2014-02-21 · 1 min · 93 words · -

D3

D3 D3 是最流行的可视化库之一,它被很多其他的表格插件所使用。它允许绑定任意数据到DOM,然后将数据驱动转换应用到Document中。你可以使用它用一个数组创建基本的HMTL表格,或是利用它的流体过度和交互,用相似的数据创建惊人的SVG条形图。D3-js D3.JS 基于javascript的图表展示库 先什么都不说。一起来看看d3.js神奇效果。 打开https://github.com/mbostock/d3/wiki/Gallery 这里有很多d3.js的Demo。 这个东西图表确实很不错吧? 简单介绍之前 先说明一点东西。 d3.js 只适合现代浏览器, (意思是说它对IE8已经IE8以下版本支持不好) 。但对IE9,chrome,FireFox,Opera 和基于webkit的苹果浏览器Safari都能支持。 图标是基于矢量图形的,采用svg进行画图。所以在了解d3.js之前你需要知道svg有关知识。看看这个就够了http://www.w3school.com.cn/svg/index.asp 如果你用d3.js,我就当你是一个有点点经验的程序猿了,不是菜鸟,所以。。。。懂一点Jquery那是必须的。。。 本系列博客将根据官方文档的介绍顺序来写。 重要的一点,本人也是一边学一边写,出现点错误是不可避免。若有发现,请指出。在博客后面留言就可以了。谢谢! 争取每周末更新两篇。(希望了解更多可点击此处) 好吧。有了以上说明,先下载一个d3.js (连js库都没有能说个j8) 下载地址http://d3js.org/d3.v3.zip 下载好了?? 国际惯例 Hello World <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Hello World</title> <script type="text/javascript" src="d3.v3.js"></script> </head> <body> </body> <script type="text/javascript"> function helloworld(){ d3.select("h1").html("Hello D3.js !"); /* 看到这个是不是觉得和Jquery很相似? d3的选择器使用Jquery差不多,当然没有Jquery那么强大了, 这就是为什么我在开篇会提到jquery,如果对Jquery有一定的了解那么 关于d3的选择器你也就会用了。 */ }; helloworld(); /*啰嗦一下,有点Jquery经验的请无视。 helloworld这个方法之所以在body标签后调用而不是在head标签中 是因为浏览器解析html文档 是按顺序解析,如果写在head标签中,那么当浏览器解析到d3.select("h1")时, d3会发现在解析过的html中找不到h1 DOM节点 也就无法正确选择到了。 至于怎么写在head标签中又可以在整个Html都加载后再执行请自行Google. */ </script> </html>

2014-02-20 · 1 min · 78 words · -

静态页面html调用静态页面html的内容几种方法

静态页面html调用静态页面html的内容几种方法 静态页面html调用静态页面html的内容几种方法 简介: 在论坛中常常有网友问到,可以在一个html的文件当中读取另一个html文件的内容吗?答案是确定的,而且方法不只一种,在以前我只会使用iframe来引用,后来发现了另外的几种方法,那今天就总结这几种方法让大家参考一下,本人觉得第三种方式较好! 1.IFrame引入,看看下面的代码 你会看到一个外部引入的文件,但会发现有一个类似外框的东西将其包围,可使用 但你会发现还会有点问题,就是背景色不同,你只要在引入的文件import.htm中使用相同的背景色也可以,但如果你使用的是IE5.5的话,可以看看这篇关于透明色的文章 如果想引入的文件过长时不出现滚动条的话在import.htm中的body中加入scroll=no 2.方式 3.Behavior的download方式

2014-02-12 · 1 min · 10 words · -

java – volatile

java – volatile volatile 关键字, Volatile [‘vɑlətl] volatile关键字告诉编译器,去内存里面取最新值。但是,即使取的是内存里的所谓“最新”值,事实上并不能保证最新。 voldatile关键字首先具有“易变性”,声明为volatile变量编译器会强制要求读内存,相关语句不会直接使用上一条语句对应的的寄存器内容,而是重新从内存中读取。 其次具有”不可优化”性,volatile告诉编译器,不要对这个变量进行各种激进的优化,甚至将变量直接消除,保证代码中的指令一定会被执行。 最后具有“顺序性”,能够保证Volatile变量间的顺序性,编译器不会进行乱序优化。不过要注意与非volatile变量之间的操作,还是可能被编译器重排序的。 需要注意的是其含义跟原子操作无关,比如: volatile int a; a++; 其中a++操作实际对应三条汇编指令实现”读-改-写“操作 (RMW) ,并非原子的。 思考: bool 类型是不是适合使用, 不会出问题。 不同编程语言中 voldatile 含义与实现并不完全相同, Java 语言中 voldatile 变量可以被看作是一种轻量级的同步, 因其还附带了 acuire 和 release 语义。 实际上也是从 JDK5 以后才通过这个措施进行完善,其 volatile 变量具有 synchronized 的可见性特性, 但是不具备原子特性。 Java语言中有 volatile 修饰的变量, 赋值后多执行了一个 load addl $0x0, (%esp) 操作, 这个操作相当于一个 lock 指令, 就是增加一个完全的内存屏障指令, 这点与C++实现并不一样。 volatile 的读性能消耗与普通变量几乎相同, 但是写操作稍慢 ,因为它需要在本地代码中插入许多内存屏障指令来保证处理器不发生乱序执行。 Java 实践中仅满足下面这些条件才应该使用 volatile 关键字: 变量写入操作不依赖变量当前值,或确保只有一个线程更新变量的值 (Java可以,C++仍然不能) 该变量不会与其他变量一起纳入 变量并未被锁保护 C++中voldatile等于插入编译器级别屏障,因此并不能阻止CPU硬件级别导致的重排。C++11 中volatile语义没有任何变化,不过提供了std::atomic工具可以真正实现原子操作,而且默认加入了内存屏障 (可以通过在store与load操作时设置内存模型参数进行调整,默认为std::memory_order_seq_cst) 。 ...

2014-02-12 · 3 min · 533 words · -

Grails

Grails Grails 是一种新型 Web 开发框架,它将常见的 Spring 和 Hibernate 等 Java 技术与当前流行的约定优于配置等实践相结合。Grails 是用 Groovy 编写的,它可以提供与遗留 Java 代码的无缝集成,同时还可以加入脚本编制语言的灵活性和动态性。学习完 Grails 之后,您将彻底改变看待 Web 开发的方式。

2014-01-22 · 1 min · 20 words · -

MySQL 索引

MySQL 索引 - 显示索引信息 SHOW INDEX FROM table_name; SHOW keys FROM table_name; - create index CREATE INDEX indexName ON mytable(username(length)); - 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。 ALTER TABLE tbl_name ADD PRIMARY KEY (column_list); - 这条语句创建索引的值必须是唯一的 (除了NULL外,NULL可能会出现多次) 。 ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): - 添加普通索引,索引值可出现多次。 ALTER TABLE tbl_name ADD INDEX index_name (column_list): - 该语句指定了索引为 FULLTEXT ,用于全文索引。 ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list): ALTER TABLE testalter_tbl DROP PRIMARY KEY; ALTER TABLE testalter_tbl DROP INDEX c; SHOW INDEX FROM table_name; ...

2014-01-20 · 3 min · 466 words · -

innodb_autoinc_lock_mode

innodb_autoinc_lock_mode innodb_autoinc_lock_mode这个参数控制着在向有auto_increment 列的表插入数据时,相关锁的行为; 通过对它的设置可以达到性能与安全(主从的数据一致性)的平衡 【0】我们先对insert做一下分类 首先insert大致上可以分成三类: 1、simple insert 如insert into t(name) values(’test’) 2、bulk insert 如load data | insert into … select …. from …. 3、mixed insert 如insert into t(id,name) values(1,‘a’),(null,‘b’),(5,‘c’); 【1】innodb_autoinc_lock_mode 的说明 innodb_auto_lockmode有三个取值: 1、0 这个表示tradition 传统 2、1 这个表示consecutive 连续 3、2 这个表示interleaved 交错 【1.1】tradition(innodb_autoinc_lock_mode=0) 模式: 1、它提供了一个向后兼容的能力 2、在这一模式下,所有的insert语句(“insert like”) 都要在语句开始的时候得到一个 表级的auto_inc锁,在语句结束的时候才释放这把锁,注意呀,这里说的是语句级而不是事务级的, 一个事务可能包涵有一个或多个语句。 3、它能保证值分配的可预见性,与连续性,可重复性,这个也就保证了insert语句在复制到slave 的时候还能生成和master那边一样的值(它保证了基于语句复制的安全)。 4、由于在这种模式下auto_inc锁一直要保持到语句的结束,所以这个就影响到了并发的插入。 【1.2】consecutive(innodb_autoinc_lock_mode=1) 模式: 1、这一模式下去simple insert 做了优化,由于simple insert一次性插入值的个数可以立马得到 确定,所以mysql可以一次生成几个连续的值,用于这个insert语句;总的来说这个对复制也是安全的 (它保证了基于语句复制的安全) 2、这一模式也是mysql的默认模式,这个模式的好处是auto_inc锁不要一直保持到语句的结束,只要 语句得到了相应的值后就可以提前释放锁 【1.3】interleaved(innodb_autoinc_lock_mode=2) 模式 1、由于这个模式下已经没有了auto_inc锁,所以这个模式下的性能是最好的;但是它也有一个问题,就是 对于同一个语句来说它所得到的auto_incremant值可能不是连续的。 【2】如果你的二进制文件格式是mixed | row 那么这三个值中的任何一个对于你来说都是复制安全的。 ...

2014-01-20 · 1 min · 75 words · -

sql group by having

‘sql group by having’ http://www.cnblogs.com/wang-123/archive/2012/01/05/2312676.html sql中的group by 用法 Group By 语句从英文的字面意义上理解就是"根据(by)一定的规则进行分组(Group)"。 -它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。 -注意:group by 是先排序后分组; -举例子说明: 如果要用到group by 一般用到的就是"每这个字" 例如说明现在有一个这样的表: 每个部门有多少人 就要用到分组的技术 select DepartmentID as ‘部门名称’, COUNT(*) as ‘个数’ from BasicDepartment group by DepartmentID -这个就是使用了group by +字段进行了分组,其中我们就可以理解为我们按照了部门的名称ID -DepartmentID将数据集进行了分组;然后再进行各个组的统计数据分别有多少; -如果不用count(*) 而用类似下面的语法 select DepartmentID,DepartmentName from BasicDepartment group by DepartmentID -将会出现错误 -消息 8120,级别 16,状态 1,第 1 行 -选择列表中的列 ‘BasicDepartment.DepartmentName’ 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。 -这就是我们需要注意的一点,如果在返回集字段中,这些字段要么就要包含在Group By语句的后面, -作为分组的依据;要么就要被包含在聚合函数中。 -出现的错误详解:咱们看看group by 的执行的过程,先执行select 的操作返回一个程序集, -然后去执行分组的操作,这时候他将根据group by 后面的字段 -进行分组,并且将相同的字段并称一列数据,如果group by 后面没有这个字段的话就要分成好多的数据。 ...

2014-01-19 · 2 min · 228 words · -

MySQL 横表和纵表转换

MySQL 横表和纵表转换 (1) 表tb1有如下数据: 姓名 语文 数学 物理 张三 68 89 99 李四 90 66 78 现在要求写出查询语句得到如下查询结果 name subject score 张三 语文 68 张三 数学 89 张三 物理 99 李四 语文 90 李四 数学 66 李四 物理 78 sql语句如下: select 姓名 as name,‘语文’ as subject,语文 as score from tb1 union select 姓名 as name,‘数学’ as subject,数学 as score from tb1 union select 姓名 as name,‘物理’ as subject,物理 as score from tb1 ...

2014-01-17 · 2 min · 252 words · -

MySQL if

MySQL if IF表达式 IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。 select *,if(sva=1,"男","女") as ssva from taname where sva != "" 作为表达式的if也可以用CASE when来实现: select CASE sva WHEN 1 THEN '男' ELSE '女' END as ssva from taname where sva != '' 在第一个方案的返回结果中, value=compare-value 而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE 部分,则返回值为 NULL。 SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END as testCol -- 将输出one http://outofmemory.cn/code-snippet/1149/MySQL-if-case-statement-usage-summary

2014-01-16 · 1 min · 72 words · -

MySQL 字符串连接 CONCAT()

‘MySQL 字符串连接 CONCAT()’ MySQL> SELECT CONCAT('My', 'S', 'QL'); -> 'MySQL' MySQL CONCAT () 函数用于将多个字符串连接成一个字符串 MySQL CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。或许有一个或多个参数。 如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col) MySQL> SELECT CONCAT(‘My’, ‘S’, ‘QL’); -> ‘MySQL’ MySQL> SELECT CONCAT(‘My’, NULL, ‘QL’); -> NULL MySQL> SELECT CONCAT(14.3); -> ‘14.3′ MySQL CONCAT_WS(separator,str1,str2,…) CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。 第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。 MySQL> SELECT CONCAT_WS(’,’,‘First name’,‘Second name’,‘Last Name’); -> ‘First name,Second name,Last Name’ ...

2014-01-16 · 1 min · 86 words · -

MySQL 里的IFNULL、NULLIF和ISNULL用法

MySQL 里的IFNULL、NULLIF和ISNULL用法 今天用到了MySQL里的isnull才发现他和MSSQL里的还是有点区别,现在简单总结一下: **MySQL中isnull,ifnull,nullif的用法如下: ** **isnull(expr) 的用法: ** 如expr 为null,那么isnull() 的返回值为 1,否则返回值为 0。 MySQL> select isnull(1+1); -> 0 MySQL> select isnull(1/0); -> 1 使用= 的null 值对比通常是错误的。 isnull() 函数同 is null比较操作符具有一些相同的特性。请参见有关is null 的说明。 **IFNULL(expr1,expr2)的用法: ** 假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。 MySQL> SELECT IFNULL(1,0); -> 1 MySQL> SELECT IFNULL(NULL,10); -> 10 MySQL> SELECT IFNULL(1/0,10); -> 10 MySQL> SELECT IFNULL(1/0,‘yes’); -> ‘yes’ IFNULL(expr1,expr2)的默认结果值为两个表达式中更加"通用"的一个,顺序为STRING、 REAL或 INTEGER。假设一个基于表达式的表的情况, 或MySQL必须在内存储器中储存一个临时表中IFNULL()的返回值: CREATE TABLE tmp SELECT IFNULL(1,’test’) AS test; ...

2014-01-16 · 1 min · 108 words · -

MySQL coalesce

MySQL coalesce coalesce函数表示可以返回参数中的第一个非空表达式,当你有N个参数时选取第一个非空值 (从左到右) 。 实例一: select coalesce (null,“carrot”,“apple”) 返回结果: carrot 实例二: select coalesce(1,“carrot”,“apple”) 返回结果: 1 友情提示: coalesce里的参数如果是字符串的话,务必用单引号或者双引号廓起来; 这些语句可以直接在MySQL里运行。 http://hi.baidu.com/luoganet/item/7ec497dec10c88e2795daa1f

2014-01-16 · 1 min · 20 words · -