zoukankan      html  css  js  c++  java
  • MySQL学习

    TIMESTAMP列类型提供一种类型,TIMESTAMP值可以从1970的某时的开始一直到2037年,精度为一秒,其值作为数字显示。你可以使用它自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果你有多个TIMESTAMP列,只有第一个自动更新。
    自动更新第一个TIMESTAMP列在下列任何条件下发生:
    l      列没有明确地在一个INSERT或LOAD DATA INFILE语句中指定。
    l      列没有明确地在一个UPDATE语句中指定且一些另外的列改变值。(注意一个UPDATE设置一个列为
    它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。)
    l      你明确地设定TIMESTAMP列为NULL.
    除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()。
    例如,创建如下的表:
    mysql> CREATE TABLE student
           -> (
           -> id int,
           -> name char(16),
           -> english tinyint,
           -> chinese tinyint,
           -> history tinyint,
           -> time timestamp
           -> );
    向表中插入记录,可以查看效果:
    mysql> INSERT student(id,name,englisht,Chinese,history) VALUES(11,”Tom”,66,93,67);
    查看记录的存储情况:
    mysql> SELECT * FROM student;
    +------+---------+---------+---------+---------+----------------+
    | id   | name    | english | chinese | history | time           |
    +------+---------+---------+---------+---------+----------------+
    |   11 | Tom     |      66 |      93 |      67 | 20010220123335 |
    +------+---------+---------+---------+---------+----------------+
    你可以看到time列纪录下了数据录入时的时间值。如果你更新改记录,在查看操作的结果:

    mysql> UPDATE student SET english=76 WHERE id=11;
    mysql> SELECT * FROM student;
    +------+------+---------+---------+---------+----------------+
    | id   | name | english | chinese | history | time           |
    +------+------+---------+---------+---------+----------------+
    |   11 | Tom  |      76 |      93 |      67 | 20010220125736 |
    +------+------+---------+---------+---------+----------------+
    可以清楚的看到,time列的时间被自动更改为修改记录的时间。

    有时候你希望不更改任何值,也能打到修改TIMESTAMP列的值,这时只要设置该列的值为NULL,MySQL就可以自动更新TIMESTAMP列的值:
    mysql> UPDATE student SET time=NULL WHERE id=11;
    mysql> select * from student where id=11;
    +------+------+---------+---------+---------+----------------+
    | id   | name | english | chinese | history | time           |
    +------+------+---------+---------+---------+----------------+
    |   11 | Tom  |      76 |      93 |      67 | 20010220130517 |
    +------+------+---------+---------+---------+----------------+

    通过明确地设置希望的值,你可以设置任何TIMESTAMP列为不同于当前日期和时间的值,即使对第一个TIMESTAMP列也是这样。例如,如果,当你创建一个行时,你想要一个TIMESTAMP被设置到当前的日期和时间,但在以后无论何时行被更新时都不改变,你可以使用这样使用:
    l         让MySQL在行被创建时设置列,这将初始化它为当前的日期和时间。
    l         当你执行随后的对该行中其他列的更改时,明确设定TIMESTAMP列为它的当前值。
    例如,当你在修改列时,可以把原有的值付给TIMESTAMP列:
    mysql> UPDATE student SET english=66,time=time WHERE id=11;
    mysql> select * from student where id=11;

    +------+------+---------+---------+---------+----------------+
    | id   | name | english | chinese | history | time           |
    +------+------+---------+---------+---------+----------------+
    |   11 | Tom  |      66 |      93 |      67 | 20010220130517 |
    +------+------+---------+---------+---------+----------------+
    另一方面,你可能发现,当你想要实现上面这个效果时,很容易用一个你用NOW()初始化的DATETIME列然
    后不再改变它,这样也许直接些。 但是,TIMESTAMP列的以后好处是存储要求比较小,节省空间。

    TIMESTAMP的存储需求是4字节,而DATETIME列的存储需求是8字节。

    在 MySQL中,SQL的模式缺省是忽略大小写的。
    在MySQL中,数据库和表对应于在那些目录下的目录和文件,因而,内在的操作系统的敏感性决定数据库
    和表命名的大小写敏感性。这意味着数据库和表名在Unix上是区分大小写的,而在Win32上忽略大小写。

    注意:在Win32上,尽管数据库和表名是忽略大小写的,你不应该在同一个查询中使用不同的大小写来引

    用一个给定的数据库和表。下列查询将不工作,因为它作为my_table和作为MY_TABLE引用一个表:

    mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
    2、列名
    列名在所有情况下都是忽略大小写的。
    3、表的别名
    表的别名是区分大小写的。下列查询将不工作,: 因为它用a和A引用别名:
    mysql> SELECT col_name FROM tbl_name AS a
               WHERE a.col_name = 1 OR A.col_name = 2;
    4、列的别名
    列的别名是忽略大小写的。

    5、字符串比较和模式匹配
    缺省地,MySQL搜索是大小写不敏感的(尽管有一些字符集从来不是忽略大小写的,例如捷克语)。这意味

    着,如果你用col_name LIKE 'a%'搜寻,你将得到所有以A或a开始的列值。如果你想要使这个搜索大小写

    敏感,使用象INDEX(col_name, "A")=0检查一个前缀。或如果列值必须确切是"A",使用STRCMP

    (col_name, "A") = 0。

    简单的比较操作(>=、>、= 、< 、<=、排序和聚合)是基于每个字符的“排序值”。有同样排序值的字符(

    象E,e)被视为相同的字符!
    LIKE比较在每个字符的大写值上进行(“E”=”e”)。
    如果你想要一个列总是被当作大小写敏感的方式,声明它为BINARY。
    例如:
    mysql> SELECT "E"="e","E"=BINARY "e";
    +---------+----------------+
    | "E"="e" | "E"=BINARY "e" |
    +---------+----------------+
    |       1 |              0 |
    +---------+----------------+

    由MySQL提供的模式匹配的其他类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用

    REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。
    扩展正则表达式的一些字符是:
    “.”匹配任何单个的字符。
    一个字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命

    名字符的一个范围,使用一个“-”。“[a-z]”匹配任何小写字母,而“[0-9]”匹配任何数字。
    “ * ”匹配零个或多个在它前面的东西。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配的任

    何数量的数字,而“.*”匹配任何数量的任何东西。
    正则表达式是区分大小写的,但是如果你希望,你能使用一个字符类匹配两种写法。例如,“[aA]”匹配

    小写或大写的“a”而“[a-zA-Z]”匹配两种写法的任何字母。
    如果它出现在被测试值的任何地方,模式就匹配(只要他们匹配整个值,SQL模式匹配)。
    为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$

    ”。
    为了说明扩展正则表达式如何工作,上面所示的LIKE查询在下面使用REGEXP重写:
    为了找出以“b”开头的名字,使用“^”匹配名字的开始并且“[bB]”匹配小写或大写的“b”:

    mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]";
    +--------+--------+---------+------+------------+------------+
    | name   | owner  | species | sex  | birth      | death      |
    +--------+--------+---------+------+------------+------------+
    | Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       |
    | Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 |
    +--------+--------+---------+------+------------+------------+
    为了找出以“fy”结尾的名字,使用“$”匹配名字的结尾:

    mysql> SELECT * FROM pet WHERE name REGEXP "fy$";
    +--------+--------+---------+------+------------+-------+
    | name   | owner  | species | sex  | birth      | death |
    +--------+--------+---------+------+------------+-------+
    | Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  |
    | Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  |
    +--------+--------+---------+------+------------+-------+

    为了找出包含一个“w”的名字,使用“[wW]”匹配小写或大写的“w”:

    mysql> SELECT * FROM pet WHERE name REGEXP "[wW]";
    +----------+-------+---------+------+------------+------------+
    | name     | owner | species | sex  | birth      | death      |
    +----------+-------+---------+------+------------+------------+
    | Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       |
    | Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
    | Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       |
    +----------+-------+---------+------+------------+------------+

    既然如果一个正规表达式出现在值的任何地方,其模式匹配了,就不必再先前的查询中在模式的两方面放

    置一个通配符以使得它匹配整个值,就像如果你使用了一个SQL模式那样。
    为了找出包含正好5个字符的名字,使用“^”和“$”匹配名字的开始和结尾,和5个“.”实例在两者之

    间:
    mysql> SELECT * FROM pet WHERE name REGEXP "^.....$";
    +-------+--------+---------+------+------------+-------+
    | name  | owner  | species | sex  | birth      | death |
    +-------+--------+---------+------+------------+-------+
    | Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
    | Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
    +-------+--------+---------+------+------------+-------+

    你也可以使用“{ n }”“重复n次”操作符重写先前的查询:
    mysql> SELECT * FROM pet WHERE name REGEXP "^.{ 5 }$";
    +-------+--------+---------+------+------------+-------+
    | name  | owner  | species | sex  | birth      | death |
    +-------+--------+---------+------+------------+-------+
    | Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
    | Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
    +-------+--------+---------+------+------------+-------+

    在学习MySQL命令时记录下来的,以备以后查参考!

  • 相关阅读:
    PHP+MYSQL不错的环境架设软件
    ASV2011(Action Script Viewer)免费升级
    Win2003证书服务配置/客户端(服务端)证书申请/IIS站点SSL设置
    Entity FrameWork 4 PoCo使用
    使用Forms Authentication实现用户注册、登录
    验证数字的正则表达式集
    web.config/app.config敏感数据加/解密的二种方法
    如何创建一个标准的Windows服务
    抛弃WebService 在.NET4中用jQuery调用WCF
    EF 中调用带输出参数的存储过程
  • 原文地址:https://www.cnblogs.com/shelvenn/p/965833.html
Copyright © 2011-2022 走看看