mySQL学习笔记

mysql绿色版配置教程:http://www.cnblogs.com/freeton/p/4264829.html

安装时候提示“Install/Remove of the Service Denied!”,说明需要以管理员身份运行cmd

发现mysql服务启动报以下错误:

系统出错。

发生系统错误 1067。

进程意外终止;

参考:http://blog.csdn.net/huabingood/article/details/50966210 解决。

1、类型的属性:如:unsigned和zerofill

  unsigned:将数字的类型无符号话,如:int 的类型范围是-2147483648~2147483647,int unsigned的范围就是0~4294967295。看起来这个属性是不错的,但是假如两个字段a(1)和b(2),现在要计算a-b时,结果会出现是-1、也可以是一个很大的正值,也可以直接报错,在Mac上就会直接报“BigInt unsigned value is out of range in……”,在Linux系统中,结果是“4294967295”。unsigned这样莫名奇妙的错误在c语言中也是一样。所以尽量不用这个属性。

2、zerofill:补零,如为某值a的1加上zerofill属性后(alter table T change column a a int(4) unsigned zerofill),显示的结果是0001;但是通过hex(a)函数得到的值还是1,说明zerofill只是修改了值的显示格式,并没有改变值。

3、SQL_MODE 设置:

    这个是很容易被人忽略的变量,默认为空。SQL_MODE的设置实际上是比较冒险的一种设置,因为在这种设置下可以允许一些非法的操作,比如将null插入 not null的数据中,也可以插入一些非法的日期格式。因此在生产环境中强烈建议开发人员将这个值设置为严格模式,此外,正确地设置这个值还可以做一些约束检查的工作。

  设置SQL_MODE,可以在mysql的配置文件如my.cfg he my.ini中进行,也可以通过客户端工具,下面用命令的方式:

     select @@global.sql_mode \g;   –获取全局的SQL_MODE,没有设置的情况 下就是空

     Select @@session.sql_mode \g;  –获取当前会话的SQL_MODE值。

     将全局的SQL_MODE设置为严格模式的sql语句:

           Set global sql_mode = ‘strict_trans_tables’;或者:set global sql_mode=’strict_all_table’。

4、Microsecond

     在mysql5.5前,不支持日期精确到微秒级别,如“2015-1-1 10:12:13.12345”,在select出来后就是“2015-1-1 10:12:13”,不过mysql提供一个函数microsecond(“2015-1-1 10:12:13.12345”),将得到12345。

5、now()、current_timestamp()函数和sysDate()的区别。select now(),current_timestamp(),sysdate(),sleep(2),now(),current_timestamp(),sysdate() \g;  –分析执行后的结果,可以发现now()和current_timestamp()实际上都是一样的,都是获取执行该SQL的时间,sysdate()才是真正获取的是系统的当前时间,并且他们三个都是精确到秒。sleep(2)表示SQL等待两秒后再执行。

5、日期的常用函数。

  DATE_ADD():日期的增加,如 select DATE_ADD(now() , INTERVAL 1 DAY) AS tomorrow \g;//其中的1可以是负值

  DATE_SUB():日期的减少,如 select DATE_SUB(now(), INTERVAL 1 DAY) AS yesterday \g;//其中的1可以是负值

DATE_FORMAT函数的作用只是按照用户的要求格式打印出日期。如 SELECT DATE_FORMAT(now(), ‘%Y%m%d’)  \g;结果是20150312

6、数据库中的查询语句的on比较的返回值在除了true,false之外,还应考虑null,在这里我们只取true即可,但是在order by和group by时,都是把null值分到一起或一组。

7、逻辑查询的处理顺序:from~on~left join(right join)~where ~ group by~with(当前5.5版本的mysql不支持with cube)~having ~select~distinct~order by ~limit

8、对于使用了group by语句后的distinct将变成是多余的,因为group by语句执行顺序比distinct前,已经进行了分组了,将没有重复部分,此时用distinct就没有必要了。

9、使用any,in,all进行子查询

   如:select s1 from t1 where s1 = any (select s1 from t2);等效于select s1 from t1 in (select s1 from t2);子查询返回的列中的任一数值,如果比较结果为true,则返回true。

    如:select * from t1 where 1 > all (select s1 from t2);对于子查询返回的列中的所有值,如果比较结果为true,则返回true。

10、删除数据库的命令是:drop database databasename;

但是要是数据库中没有存在该名称的数据库,就会出现“database don’t exists”的错误,要想不出现错误,就可以执行“drop database if exists databasename;”同理,在创建数据库的时候,可以执行“create database if not exists datatbasename”

11、MYSQL常用的命令(http://www.cnblogs.com/cocos/archive/2011/05/06/2039469.html):

     use databasename;  //选择数据库

     select version();  //显示出当前mysql的版本信息。

     select now(); /*显示当前执行SQL语句的时间*/

     select dayodmonth(current_date); /*显示当前时间的日*/

     select month(current_date); /*显示当前的月份*/

     select year(current_date); /*显示当前的年份*/

     select ‘hello’;  /*显示“hello”的字符串信息*/

     select (4+3)*5/7-2; /*可以当作计算器使用,例子显示的结果就是3.0000*/

     select concat(‘hello’,’world’,’!’); /*concat函数可以连接多个字符串,其中的参数都是动态添加的,至少要有一个,多个参数需要加“,”隔开,参数的类型不限制,可以是数字,时间,字符串等等都可以。*/

     select ascii(‘a’); /*返回字符串的ascii码的值,如是空字符串,返回0;如果是null,返回null,返回null;如果是多个字符串,返回第一个字符的ascii码值*/

     select char(97,98); /*将多个ascii值得数字拼接成字符串,如例子的结果显示是“ab”*/

     select length/octer_length/char_length/character_length(‘abc’); /*返回的结果都是字符串的长度,如例子返回的结果都是3*/

     select locate(‘a’,’bac’); /*返回字符串在某字符串中第一次出现的位置,等效于select position(‘a’ in ‘bac’);当没有找到匹配的信息时,结果返回的0;需要注意的是中文也支持,但是中文要记得占用的是两个字节。如select locate(‘你’ , ‘我收了ab你’);显示的结果就是9*/

     select locate(‘a’,’bac’,2);/*后面的参数表示从什么位置开始算起,如例子的结果是2,但是当位置的值改成3时,返回的结果将是0;*/

     select instr(‘bac’,’a’);/*作用等效于locate,只是参数的顺序进行了颠倒*/

     select lpad(‘hi’,4,’!’);/*根据第二个参数的信息把第三个字符串去将第一个参数的字符串的前面补成对应的位数的字符串(左边补齐),如例子显示的结果是“!!hi”,要是第二个参数的值比第一个字符串的长度小,将对第一个字符串从左往右进行截取,如第二个参数为1,则结果显示是“h”;当第一个参数的字符串是null时,结果显示的是null*/

     select rpad(‘hi’,4,’!’);/*效果跟lpad()类似,只是这个是右边补齐,如例子显示的结果是“hi!!”*/

     select left(‘jdjdj’,2);/*根据第二个参数的值获取第一个参数的值中从左边开始的第n个字符串。如例子显示的结果是“jd”;当第一个参数值的长度小于第二个参数的值,结果将是第一个参数;当第一个参数为null时,结果将是null;当第二个参数不是自然数的时候,结果都是空的字符串*/

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理