`
yehuijia
  • 浏览: 9686 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

mysql小结

阅读更多
MySQL的一点小小总结
   数据类型
一、整型
1、BIGINT
语法:BIGINT [(display_size)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]
存储:8字节。
描述:最大的整数类型,支持的整数范围是:-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807(UNSIGNED时为:0 ~ 18 446 744 073 709 551 615)。
2、INT
语法:INT [(display_size)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]
存储:4字节。
描述:范围为:-2 147 483 648 ~ 2 147 483 647(UNSIGNED时为:0 ~ 4 294 967 295)的基本整数。有同义语法:INTEGER。
3、MEDIUMINT
语法:MEDIUMINT [(display_size)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]
存储:3字节
描述:范围为:-8 388 608 ~ 8 388 607(UNSIGNED时为:0 ~ 16 777 215)的基本整数。

4、SMALLINT
语法:SMALLINT [(display_size)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]
存储:2字节
描述:范围为:-32768 ~ 32767(UNSIGNED时为:0 ~ 65535)的基本整数。

5、TINYINT
语法:TINYINT [(display_size)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL]
存储:1字节
描述:范围为:-128 ~ 127(UNSIGNED时为:0 ~ 255)的基本整数。

二、字符型

1、CHAR
语法:CHAR(size) [BINARY]
存储:size字节
大小:范围为:0 ~ 255
描述:固定长度的文本字段,字符比列大小小的字符串将用空格填充在右边,右边的填充在从数据库中检索该值时被删除。有同义语法:NCHAR、NATIONAL CHAR、CHARACTER。

2、VARCHAR
语法:VARCHAR(size) [BINARY]
存储:值的长度 +1 字节。
大小:由size值指定,5.0以上版本支持范围为:0 ~ 65535
描述:存储可变长度的文本,VARCHAR值中的尾随空格在存储到数据库中时将被删除,这与ANSI规范相冲突。

3、TEXT
语法:TEXT
存储:值的长度+2字节
大小:0 ~ 65535
描述:储存大文本值,不接收默认值。

三、日期/时间型

在定义表时,各字段上通过DEFAULT子句指定的默认值必须是个常数,不可以是个函数,所以DATATIME colname DEFAULT NOW();这样的定义是错误的,但有个例外,就是TIMESTAMP类型。
如果表中只有一个TIMESTAMP列:在定义的时候可以设置为TIMESTAMP colname DEFAULT CURRENT_TIMESTAMP,这样,在添加新记录的时候把这个字段设置为当前时间,但以后修改记录时该TIMESTAMP字段不再更新;在定义的时候设置为TIMESTAMP colname NOT NULL,这样每次记录更新该列都会重置为当前时间。如果表中有多个TIMESTAMP列:仅第一个TIMESTAMP会自动更新。


1、YEAR
语法:YEAR
格式:YYYY (2001)
存储:1字节
描述:存储1900年 ~ 2155年之间的公历年份。

2、DATE
语法:DATE
格式:YYYY-MM-DD (2001-01-01)
存储:3字节
描述:存储范围为1000年1月1日('1000-01-01') ~ 9999年12月31日('9999-12-31')的公历日期。

3、TIME
语法:TIME
格式:hh:mm:ss (06:00:00)
存储:3字节
描述:存储范围在子夜('00:00:00')到子夜前一秒('23:59:59')。

4、DATETIME
语法:DATETIME
格式:YYYY-MM-DD hh:mm:ss (2001-01-01 01:00:00)
存储:8字节
描述:存储范围为1000年1月1日上午12:00:00('1000-01-01 00:00:00') ~ 9999年12月31日下午11:59:59('9999-12-31 23:59:59')的公历日期。

5、TIMESTAMP
语法:TIMESTAMP [(display_size)]
格式:YYYYMMDDhhmmss (20010101060000)
存储:4字节
描述:范围在1970年1月1日子夜到2037年12月31日子夜前一分钟之间某时刻的简单表示形式,精确到秒。它的主要用途是保持对表更新的记录。当向TIMESTAMP列中插入NULL值时,它将用当前的日期和时间替代插入。当在具有TIMESTAMP列的行中修改任何值时,第一个TIMESTAMP列将自动用当前的日期和时间更新。

1. 创建实例数据库
   create database db5;
   use db5;

2.创建一个简单的工作表,并插入数据
   create table t(s1 int);
   insert into t values(5);

3.创建程序实例 create procedure Example
   create procedure p1() select * from t;
      SQL语句存储过程的第一部分是 create procedure
      第二部分是过程名:上面新存储过程的名字是p1。
      第三部分书参数列表(),第四部分是程序的主体,“select * from t”

*****什么样的MySQL语句在存储过程体中是合法的?
       在存储过程体中可以包含所有的合法SQL数据库定义语言,insert,update,delete,drop,create,replace等等语句
包括(set,commit,rollback)但是,在代码中如果包含MYSQL的扩充功能,那么代码将不能移植。
   
4. 调用存储过程,所需要输入的就是call和你过程名以及一个括号。
    call p1();

5.过程中的特征子句
    create procedure p2()language SQL
                         NOT DETERMINISTIC
    SQL SECURITY DEFINER
    COMMENT ''
     select current_date,rand() from t;

6.Parameters参数
    create procedure p5()------; //参数列表是空的
    create procedure p5([IN] name data-type)---- //输入参数in可选,默认为参数为in
    create procedure p5(out name data-type)----- //输出参数out
    create procedure p5(inout 那么data-type)----- //即可以做输入参数也可以做输出参数

   ----输入参数in 例子。
       create procedure p5(p int) set @x=p;
       call p5(12345);
       select @x;

   ----输出参数out 例子
       create procedure p6(out p int)set p=-5;
       call p6(@y);
       select @y;

7. 复合语句:如果你的过程中有多条语句,那么你需要begin/end块。在这里你可以进行变量的定义和流程的控制
       首先执行命令 delimiter //
       create procedure p7()
           BEGIN
              set  @a=6;
       set  @b=5;
       insert into t values (@a);
       select s1 * @a from t where s1>= @b;
    END;//

   -----在复合语句中申明变量
       create procedure p8()
            begin
       DECLARE a INT;
       DECLARE b INT;
       SET a=5;
       SET b=5;
       insert into t values (a);
       select s1*a from t where s1>=b;
            end;//

       含有default默认语句舌设定语句的例子
       create procedure p9()
       begin
          declare a ,b int default 5;
   insert into t values(a);
   select s1*a from t where s1>=b;
       end;//

8. scope作用域的问题:内部的变量在其作用域范围内享有更高的优先权,当执行到end
        变量时,内部变量消失,此时已经在其作用域外,变量不再可见了,应为在存储
过程外再也不能找到这个申明的变量,但是你可以通过out参数或者将其值指派
给会话变量来保存其值。
   create procedure p11()
   begin
      declare x1 char(5) default 'outer';
      begin
        declare x1 char(5) default 'inner';
select x1;
      end;
      select x1;
   end;//
  
/*********************************  存储过程中的条件式语句  ***************************************/

1. if-then -else语句
    create procedure p12(in parameter int)
    begin
      declare var int;
      set var=parameter+1;
      if var=0 then
        insert into t values(17);
      end if;
      if parameter=0 then
        update t set s1=s1+1;
      else
        update t set s1=s1+2;
      end if;
    end;//

2. case指令:如果需要进行更多条件真假的判断我们可以使用case语句
   create procedure p13(in parameter int)
    begin
       declare var int;
       set var=parameter+1;
       case var
         when 0 then insert into t values(17);
  when 1 then insert into t values(18);
  else insert into t values(19);
       end case;
    end;//

/*****************************  循环语句  ************************************/
1. while ···· end while; 循环语句
  create procedure p14()
   begin
     declare var int;
     set var=0;
     while var<6 do
        insert into t values(var);
set var=var+1;
     end while;
   end;//

2. repeat···· end repeat ;它在执行操作后检查结果,而while则是执行前进行检查
  create procedure p15()
   begin
     declare v int;
     set v=0;
     repeat
       insert into t values(v);
       set v=v+1;
       until v>=5
     end repeat;
   end;//

3. loop ·····end loop; loop 循环不需要初始条件,这点和while 循环相似,同时和repeat
       循环一样不需要结束条件, leave语句的意义是离开循环,
  create procedure p16()
   begin
      declare v int;
      set v=0;
      LOOP_LABLE:loop
         insert into t values(v);
  set v=v+1;
  if v >=5 then
     leave LOOP_LABLE;
  end if;
      end loop;
   end;//

4. LABLES 标号:标号可以用在begin repeat while 或者loop 语句前,语句标号只能在
      合法的语句前面使用。可以跳出循环,使运行指令达到复合语句的最后一步。

/*定义函数*/
DROP FUNCTION IF EXISTS myDataBase.fcMyFunction;
CREATE FUNCTION myDataBase.fcMyFunction() RETURNS BIGINT
BEGIN
    DECLARE _s BIGINT DEFAULT 0;
    SELECT _s + 1 INTO _s;
    RETURN _s;
END;

MySQL中的字符串处理函数
一、LOCATE

/*
LOCATE(substr, str);
返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0。
如下示例,返回结果:5
*/
SELECT LOCATE('5', '1234567890');
二、LENGTH

/*返回字符串的长度*/
SELECT LENGTH(str);
三、CONCAT

/*
字符串连接函数
如下示例结果:'abc123def'
*/
SELECT CONCAT('abc', 123, 'def');
四、REPLACE

/*
字符串替换函数
如下示例结果:'123def'
*/
SELECT REPLACE('abcdef', 'abc', '123');
五、SUBSTRING

/*
字符串截取函数 SUBSTRING(str, begin, end);
截取字符串str,从第begin位到end位

如下示例结果:'567890'
*/
SELECT SUBSTRING('1234567890', 5, 10);

最后作为一个结束,介绍个MySql分页存储过程
DROP PROCEDURE IF EXISTS `PtBase`.`prPager`;
CREATE PROCEDURE `PtBase`.`prPager`(
    OUT oRowsTotal INT,        --输出记录总数
    IN iTableName VARCHAR(800),    --表名
    IN iFields VARCHAR(800),    --查询字段
    IN iPageSize INT,        --每页记录数
    IN iPageNow INT,        --当前页
    IN iOrderString VARCHAR(100),    --排序条件
    IN iWhereString VARCHAR(800)    --WHERE条件
)
    NOT DETERMINISTIC
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
    DECLARE _beginRow INT DEFAULT 0;
    DECLARE _mainString VARCHAR(8000);
    DECLARE _limitString VARCHAR(100);
    DECLARE _countString VARCHAR(8000);
   
    SET _beginRow = (iPageNow - 1) * iPageSize;
    SET _limitString = CONCAT(' LIMIT ', beginRow, ', ', iPageSize);
    SET _countString = CONCAT('SET oRowsTotal = SELECT COUNT(*) FROM ', iTableName, ' WHERE ', iWhereString);
    SET _mainString = CONCAT('SELECT ', iFields, ' FROM ', iTableName, ' WHERE ', iWhereString, iOrderString, _limitString);

    SET @countStr = _countString;
    PREPARE countStmt FROM @countStr;
    EXECUTE countStmt;
    DEALLOCATE PREPARE countStmt;

    SET @mainStr = _mainString;
    PREPARE mainStmt FROM @mainStr;
    EXECUTE mainStmt;
    DEALLOCATE PREPARE mainStmt;
END;
分享到:
评论

相关推荐

    1034543354315878mysql小结.sql

    1034543354315878mysql小结.sql

    mysql用法小结

    ### MySQL使用小结 在日常工作中,MySQL作为一款广泛使用的开源关系型数据库管理系统,其重要性不言而喻。为了更好地理解和掌握MySQL的基本操作及管理技巧,本文将根据提供的文件内容进行详细的解释与扩展。 #### ...

    mysql基础知识小结

    mysql参考手册重点章节:5 6 7 8 10 11 13 14 15 ## mysql启动方法: ## mysql关闭方法: ## mysql登陆方法:(单、多实例,本地、远程登录) ## 修改mysql提示符 ## 修改密码 ## root密码丢失找回 ## SQL结构化...

    mysql数据库结课论文——小知识点.docx

    MySQL数据库在现代企业信息化管理中扮演着至关重要的角色,特别是在中小型企业的人力资源管理系统设计中。本文主要讨论了如何利用B/S(Browser/Server,浏览器/服务器)模式和MySQL数据库来构建一个高效、灵活且适应...

    MySQL 通配符学习小结

    MySQL 通配符学习小结 MySQL 通配符是 SQL 模式匹配的一种类型,允许用户使用特殊字符来匹配数据库中的数据。 MySQL 通配符有两种类型:一种是使用“_”匹配任何单个字符,一种是使用“%”匹配任意数目字符(包括零...

    MySQL InnoDB小结1

    MySQL中的InnoDB存储引擎是用于处理事务处理和并发操作的核心组件。InnoDB是MySQL数据库中最常用的存储引擎之一,尤其在需要事务支持的应用中。本文将深入探讨InnoDB的特性和事务处理的ACID属性。 首先,事务是...

    MySQL 数据库 like 语句通配符模糊查询小结

    MySQL 报错:Parameter index out of range (1 > number of parameters, which is 0)——MySQL 数据库 like 语句通配符模糊查询小结 前言 今天在使用MySQL语句执行增删改查操作时,控制台报出了以下错误:Parameter...

    LNH_MySQL 28-MySQL增量恢复小结及核心恢复思想.mp4

    LNH_MySQL 28-MySQL增量恢复小结及核心恢复思想.mp4

    MySQL中Nested-Loop Join算法小结

    MySQL中的Nested-Loop Join(NLJ)是一种基本的JOIN操作实现方式,主要用于处理两个或多个表之间的连接。NLJ的基本思想是逐行遍历一张表(称为外部表),然后对每一行与另一张表(称为内部表)进行匹配。这个过程...

    MySql 8.0.11 安装过程及 Navicat 链接时遇到的问题小结.docx

    ### MySQL 8.0.11 安装与配置详解 #### 一、概述 本文档旨在总结MySQL 8.0.11版本在Windows 10 64位操作系统上的安装过程及其与Navicat连接时可能遇到的问题。自MySQL 5.7版本起,数据库的安全性得到了显著增强,...

    MySQL常用基本SQL语句小结

    MySQL常用基本SQL语句 (基础知识)

    MySQL:常用基本SQL语句小结

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,用于存储和管理数据。在进行数据库操作时,掌握基本的SQL(Structured Query Language)语句至关重要。本篇文章将总结一些常用的MySQL SQL语句,帮助你更好地理解...

    LNH_MySQL 09-MySQL数据库多种优化生产方案小结05.mp4

    LNH_MySQL 09-MySQL数据库多种优化生产方案小结05.mp4

    2021年MySQL高级教程视频.rar

    16.MySQL高级锁MyISAM表锁小结.avi 17.MySQL高级锁MyISAM表锁查看锁争用情况.avi 18.MySQL高级锁InnoDB行锁介绍及背景知识.avi 18.MySQL高级锁InnoDB行锁类型.avi 19.MySQL高级锁InnoDB行锁基本演示.avi 20.MySQL...

    apache+php+mysql问题小结.pdf

    【Apache+PHP+MySQL问题小结】 Apache是一个广泛使用的开源Web服务器,PHP是一种流行的服务器端脚本语言,而MySQL则是常用的开源关系型数据库管理系统。这三个组件的组合是搭建动态网站和应用的基础。以下是对这些...

    MySQL性能调优与架构设计(中文版)

     1.4 小结   第2章 MySQL架构组成   2.0 引言   2.1 MySQL物理文件组成   2.2 MySQL Server系统架构   2.3 MySQL 自带工具使用介绍   2.4 小结   第3章 MySQL存储引擎简介   3.0 引言 ...

    MySql存储过程小结.pdf

    ### MySQL存储过程详解 #### 一、创建存储过程 存储过程是MySQL中一种预先编写并编译好的SQL脚本,可以提高数据处理的效率和复用性。在MySQL 5.0版本及其以上版本中,我们可以创建存储过程来实现复杂的业务逻辑。 ...

Global site tag (gtag.js) - Google Analytics