现在的位置: 首页 > 综合 > 正文

MySQL笔记以及一些技巧

2014年01月04日 ⁄ 综合 ⁄ 共 4276字 ⁄ 字号 评论关闭

前言

一边学,一边记。为了以后不忘记。不定时更新!

1. 查看表结构

desc xx 和show create table xxx

我们在用命令行的形式对数据表进行操作的时候,肯定会用到查看表结构,特别是新建一个表之后。比如我们新建一个表emp。

mysql> create table emp(ename varchar(10),hiredate date,sal decimal(10,2),depno int(2));

那么一般我们都会使用desc emp 的这种方式查看,这种方式得到的是一个以表格的形式呈现出这个表的结构。

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field      | Type            | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename    | varchar(10)   | YES  |     | NULL    |       |
| hiredate  | date            | YES  |     | NULL    |       |
| sal         | decimal(10,2)| YES  |     | NULL    |       |
| depno    | int(2)           | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

其实,我们也可以采用show create table emp这时方式查看,得到的是SQL语句,那么我们就可以复制SQL语句去很方便的新建相同结构的表了。

mysql> show create table emp;
+-------+-----------------------------------------------------------------------
--------------------------------------------------------------------------------
------------------------------------------+
| Table | Create Table

                                          |
+-------+-----------------------------------------------------------------------
--------------------------------------------------------------------------------
------------------------------------------+
| emp   | CREATE TABLE `emp` (
  `ename` varchar(10) DEFAULT NULL,
  `hiredate` date DEFAULT NULL,
  `sal` decimal(10,2) DEFAULT NULL,
  `depno` int(2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-----------------------------------------------------------------------
--------------------------------------------------------------------------------
------------------------------------------+
1 row in set (0.00 sec)

2. ORDER BY 排序

我们在想按照某一个字段进行排序的时候,就会用到order by xx,那么如果要用到两个order by ,那么它的排序结果是怎么样的呢?

我们先看一个order by的情况:按照depto的从小到大的顺序排。

SELECT * FROM emp ORDER BY deptno;

SELECT * FROM emp ORDER BY deptno,sal DESC

两个order条件,order by 只需要写一个即可,用","分开,加上第二个条件就行。

我们从上图中可以看到,第一个按照depto的从小到大的顺序排,发现第一行和第二行数值是一样的。再按照sal desc从大到小排序。那么第一行和第二行就顺序发生改变,其他行数据不变。

总结:当order by 有多个条件(参数)时候,首先以第一个条件a为主,进行排序。排完序后如果有几行数据中a的值相同,那么再按第二个字段b进行排序。以此类推。

3.MySQL中的数据类型。

    1. int 表示整型,默认是11位,当我们定义一个字段a直接用 a int 时,默认这个字段a就是占据11位。如果用 a int(5) ,那么其就占5位。

    2.日期类型的区别:

     

     3. 日期类型对应的自动系统默认值(default 对应的数据。显示当前的时间值,很方便)

    
       
TIMESTAMP(这个明明是时间戳格式)  ----> CURRENT_TIMESTAMP(但是,插入的却是2012-06-12 23:59:59 ???)   正确

         DATA        ------> CURRENT_DATE 正确

           TIME        ------->CURRENT_TIME  正确

           DATETIME   ----->CURRENT_TIMESTAMP
(按照道理可以,但是提示出错。)   错误

    
4. 在一个表中,只能有一个字段可以将 default 设置成CURRENT_TIMESTAMP 这种时间自增长的。不然会报错。

    
5. char 和 varchar 都是表示较短的字符串类型,区别是varchar(3) 是可变的。而char(3) 是不变的。比如: me 在varchar(3) 只占2个字节位,而me 在char(3) 中却咱3个字节

    
6.ENUM枚举类型,有点像HTML的radio单选类型。要么选这个,要么选哪个,一次只能选一个的赶脚~(*^__^*) 。

      
例子:

 


4.MySQL运算符

       1.MySQL中的算术运算符

        

      2.MySQL中的比较运算符

      

      3.MySQL中的逻辑运算符

      

      4.各个运算符的优先级

      

      

5.MySQL常用函数

    1.常用的字符串处理函数

     

     2.常用的数值处理函数

       

       3.常用的日期时间函数

       

4.关于date_add()函数的一些具体说明和例子(7.30更新),分隔符可以任意指定,但是下边是标准写法。

SELECT DATE_ADD('2012-07-23',INTERVAL 1 DAY) #天 #2012-07-24
SELECT DATE_ADD('2012-07-23',INTERVAL 1 YEAR)#年 #2013-07-23
SELECT DATE_ADD('2012-07-23',INTERVAL 1 MONTH) #月 #2012-08-23
SELECT DATE_ADD('2012-07-23',INTERVAL 1 HOUR) #日期直接加上月 #2012-07-23 01:00:00

SELECT DATE_ADD('2012-07-23 12:23:34',INTERVAL 1 HOUR) #小时 #2012-07-23 13:23:34
SELECT DATE_ADD('2012-07-23 12:23:34',INTERVAL 1 MINUTE) #分钟 #2012-07-23 12:24:34
SELECT DATE_ADD('2012-07-23 12:23:34',INTERVAL 1 SECOND) #秒 #2012-07-23 12:23:35


SELECT DATE_ADD('2012-07-30',INTERVAL 2 DAY) #2天 #2012-08-01
SELECT DATE_ADD('2012-07-30',INTERVAL 3 YEAR)#3年 # 2015-07-30
SELECT DATE_ADD('2012-07-30',INTERVAL 4 MONTH) #4月 #2012-11-30
SELECT DATE_ADD('2012-07-30 12:23:34',INTERVAL 12 HOUR) #12小时 # 2012-07-31 00:23:34
SELECT DATE_ADD('2012-07-30 12:23:34',INTERVAL 59 MINUTE) #59分钟 #2012-07-30 13:22:34
SELECT DATE_ADD('2012-07-30 12:23:34',INTERVAL 100 SECOND) #100秒 #2012-07-30 12:25:14

SELECT DATE_ADD('2012-07-30 12:23:34',INTERVAL '1_2' YEAR_MONTH) #年_月 #2013-09-30 12:23:34 任意分隔符(1-2、1:2、1\2..)都可以

SELECT DATE_ADD('2012-07-30 12:23:34',INTERVAL '3_3' DAY_HOUR) #天_小时 #2012-08-02 15:23:34
SELECT DATE_ADD('2012-07-30 12:23:34',INTERVAL '3_3:3' DAY_MINUTE) #天_分钟 #2012-08-02 15:26:34
SELECT DATE_ADD('2012-07-30 12:23:34',INTERVAL '3_4:8:34' DAY_SECOND) #天_秒 #2012-08-02 16:32:08

SELECT DATE_ADD('2012-07-30 12:23:34',INTERVAL '4:8' HOUR_MINUTE) #小时_分钟#2012-07-30 16:31:34
SELECT DATE_ADD('2012-07-30 12:23:34',INTERVAL '4:8' HOUR_SECOND) #小时_秒#2012-07-30 12:27:42 这个比较奇怪,居然和下面结果一样
SELECT DATE_ADD('2012-07-30 12:23:34',INTERVAL '4:8' MINUTE_SECOND) #分钟_秒#2012-07-30 12:27:42

5 . 其他常用的函数。

      

抱歉!评论已关闭.