zoukankan      html  css  js  c++  java
  • MYSQL基础总结(1)

    一、关于mysql 

      Mysql是我在大二开始接触的。专门学数据库这门课时候,用的是sql server2000,到了下个学期学习JDBC,就顺便使用了Mysql数据库。感觉这个数据库挺简单的,也许是以前有数据库的基础吧,一些基础之类的也挺简单的。自己觉得不是很难。后来,到了工作中,还老是轻视这个数据库。我的小师傅却很看好它,所以,我抽下空也学学呗,至少不会被他问得什么都说不出来呀。

    二.mysql的一些零散知识

    1.想要使某个字段自增的关键字:auto_increment

      在有些情况下,创建的一个数据表的主键也许没有太大的意义,只是一个流水号而已,比如说一个账单的编号。这样的主键,最好是使用自增的,这样插入新的数据,我们只要关心把一些必要的数据项填充下就ok了,而没有必要自己去将这个流水编号写入。

     

    注意画红线的部分。这关系到使用auto_increment属性需要注意的几个问题:

    (1)这个属性必须与not null、primary key或者是Unique属性同时使用

    (2)每个数据包最多只能有一个auto_inrement数据列

    (3)MYSQL的这种ID值自动声称机制只在用户使用insert命令插入新记录,并且没有为ID字段明确地给出一个值或者是NULL时才起作用。

    (4)如果想知道MYSQL在刚插入数据记录里生成的AUTO_INCREMENT值是多少,在完成INSERT命令之后(但还在本次连接或者本个事务里),立刻执行SELECT   LAST_INSERT_ID(0.

    (5)如果AUTO_INCREMENT 计数打到了它的最大值,将不再继续递增,数据记录的插入操作也将无法进行。

    2 DATE,TIME,DATETIME,TIMESTAMP

    学习数据的孩纸,总有时候分不清这几个关于时间的类型含义到底有什么不同吧,中枪的自觉往下看呀。

         MYSQL支持的日期和时间数据类型

    MYSQL数据类型

    含义

    DATE

    2012-12-23

    TIME

    13:56

    DATETIME

    2012-12-23 13:56

    YEAR

    年份

     

    在各种日期/时间数据类型中,TIMESTAMP是一个非常特殊的角色。这个类型的字段会在数据记录的其他字段被修改时自动刷新。从效果上看,这个字段里的日期/时间值其实就是数据记录的最后一次修改时间。由于这一特点,TIMESTAMP类型的字段几乎总是被用于内部管理用途而不是用来存储“真正的”数据---虽然这是可能的。

    和AUTO_INCREMENT一样,如果想让MYSQL自动刷新TIMESTAMP字段,就不能在修改数据记录时候给这个字段设置一个具体的值或者是NULL(跟AUTO_INCREMENT还是有些区别的,至少自增可以是NULL),这样MYSQL才会把当前时间插入到这个字段中。

    3.SQL基础

    (1)确定一个数据表中一共有多少条记录

     

    如果数据表中的某个数据列有完全相同的内容,而读者却只想知道这个数据列的内容不重复的数据记录有多少个,就要使用关键字DISTINCT.

     

    (2)限制查询结果中的数据记录个数(LIMIT)

    在SQL server 中,要查询前几条记录,要使用关键字top,但是在MYSQL数据库中,取而代之的是LIMIT关键字。用 取而代之这个词显然是不合适的,因为LIMIT关键字的功能远远要超过TOP。

     

    取出age从高到底的前三个记录

    取出按照age从高到低排序,从第三个元素开始的共四条记录。

     

     

    (3)数据库面试必问:左连接,右连接,全连接(如果是没有问到,说明这个公司可能根本就不用数据库或者是不在乎,可以不用考虑这样的公司了,开个玩笑啦,每个公司 各有侧重吧)

    我记得找工作时候被考到好几次,但是不知道为什么,那个时候总是觉得这些都不重要,所以知道自己不会还不知道回去恶补一下,现在想想真是汗颜啊。直到工作了,给了时间来学习下数据库,才真正搞明白了这三种连接的关系。

    全连接就是我们很熟悉的笛卡尔积。这个就相当于是组合吧,没有任何条件,所以,数据库就会将两张表进行组合。相信大家应该对这个名字还有些印象,我也不多说了,实际中具体用处我也不是很清楚。

    最应该说明一下的左连接和右连接。其实,这两种连接差不多的意思,只要是说清楚一种,另外一种可以自己去理解。当然,我还是会尽全力将两种连接都说清楚吧。

    比如有下列两个表:

     

     

     

    笛卡尔积的结果是两个表中数据行数的乘积。

    看左连接的结果:

     

    关于左连接的语法也给出来了:left join (table) on (condition)

    可见,所谓左连接,就是使用left join前的表的每行跟后面的表进行比对,不管有没有找到,都要现实出来,只是对应的后面表中的字段会出现空。但是同时,在后面表中,没有跟前面表中匹配的将不会被显示。

    而右连接与左连接很相似,看结果:

     

    相对于文字描述,我觉得实例更能让我明白其中的来龙去脉。相信大多数程序员都是差不多这样的想法吧。

    (4)触发器

    关于存储过程和触发器,个人认为是数据库中很重要的一部分,也是我当初学习数据库这门课程时候最感兴趣的部分。只是很可惜,在后来的实践中,很少用到触发器和存储过程。之前在各种技术论坛上,确实看到过有人问关于触发器的一些问题,但是,总的来说还是很少,更有甚者,有些孩纸连触发器能干什么都不清楚,真是汗颜啊。

    说的通俗点呢,就是一个事件的发生导致了另外一个事件的发生。触发器不需要调用,就相当于是一个监听的进程,一旦满足了它需要的条件便会触发事件的发生。其语法结构为:

    Create trigger trigger_name trigger_time trigger_event

    On tb_name for each row trigger_stmt

    说明:trigger_name标识触发器,用户自行指定

    Trigger_time :标识触发时机,BEFORE/AFTER

    Trigger_event :标识触发事件,INSERT/UPDATE/DELETE

    Tb_name:标识在哪张表上建立触发器

    Trigger_stmt是触发器程序体,触发器程序可以用begin和end作为开始和结束,中间包含多条语句

    还需要注意的一点是,因为mysql中语句的结束都是分号,而触发器中会出现多条语句,出现分号也是很正常的,但是会被认为是已经结束了,从而导致没办法建成功。为了方便,我们可以自定义结束符; delimiter $

    虽然以前写过正确的触发器,但是,我承认,因为年代久远,好多东西确实是都想不起来了,一些注意实现也都不记得了。怪不得说好记性比不过烂笔头呢。

     

    看这张表的结构,我想每次只插入cid和score,让addwhen字段在插入一条记录时自动填充。找关键在“插入”,应该是在插入后,表chengji,现在编写一个触发器,

    create trigger addit  before  insert on chengji for each row

    begin

    update chengji  set new. addwhen =now();

    End

    编译倒是通过了,但是插入数据的时候总是报错,

     

    这是因为表更新时候,会让程序进入死循环,正确的写法是:

    create trigger addit  before  insert on chengji for each row

    begin

     set new. addwhen =now();

    end

    当调用insert into chengji(cid,score) values(3,65) 时,addwhen便被自动填充为系统时间

    删除触发器使用:drop trigger  trigger_name

       

    (5)存储过程

    存储过程

    create procedure tes(in ccid int ,in sscore float)

    begin

    insert into chengji(cid,score)  values(ccid,sscore);

    End

    调用存储过程 call tes(8,55)

    相当于执行insert语句。

    注意在定义存储过程时,应该注意参数名与数据库中字段的名字区分开,要不然会触发无法预期的后果。

     

  • 相关阅读:
    岗位要求与人才匹配
    http://blog.csdn.net/wujunokay/article/details/44783383
    好单位与坏单位
    工作那些事(三十四)杂记
    工作那些事(三十三)面试官的感想和建议
    工作那些事(三十二)由孙悟空的两个故事谈个人与团队
    工作那些事(三十一)如何带好一个项目团队
    工作那些事(三十)如何提升个人能力
    工作那些事(二十九)团队建设和人才招聘
    工作那些事(二十八)项目管理模式:项目型、职能型、矩阵型
  • 原文地址:https://www.cnblogs.com/lxy15329/p/2808278.html
Copyright © 2011-2022 走看看