MySQL存储进程部分解释,第五有的的笔记

发布时间:2019-01-25  栏目:威尼斯人平台  评论:0 Comments

配置参数

  • 型号:ECM-GZ1M
  • 品牌:索尼(SONY)

翻看完整参数>>

本子主要由人物对话和舞台提醒组成,脚本是电脑的剧本 。
相似脚本后缀是 .sh,把脚本放在 ~/local
目录里比较好,在里面建立一个写了成功某种行为的一声令下(脚本)的文本,然后再轻易地点执行
sh ~/local/文件名.txt即可运行这些剧本了。

 

一、数据类型

1、Bash Script(Bash脚本):
简单化命令:
MySQL存储进程部分解释,第五有的的笔记。结合第二节学的bashrc技巧,start ~/.bashrc,在最终一行添加 export
PATH=”local的绝对路径:$PATH”(#留意啊,我真正就平昔把这一行复制到文件之中去了,然后后边的指令自然是折磨了漫长都畸形,怎么如此蠢哦,这里local的相对路径当然要换过来的,难道你想要总括机自动识别语义吗,注意从电脑的角度想想)
在运行这些bashrc(能够source
bashrc文件或者退出重新进入),那时,文件名.txt的情致就是sh
~/local/文件名.txt,可以越发把后缀去掉,反正不紧要
PATH 的效益:你每回在 Bash 里面输入一个指令时(比如 ls、cp、demo),Bash
都会去 PATH 列表里面寻找对应的公文,假若找到了就实施。(js脚本中也ok)

MySQL存储进度部分解释:

布尔型

布尔类型 – 由七个约定义常量组成:true、``false,默认值为false

package main

import "fmt"

func main()  {
    var (
        a bool //默认值为false
        b bool = true
    )
    fmt.Println(a,b)
}

升级一下脚本功效:
参数:如若把突出放脚本的文本内的局地表现结果(例子中是文本)用参数表述($1)
”文件名 参数的值“来更灵敏的选拔脚本(我很习惯性的遗忘参数值)

 关于MySQL的蕴藏进程

数字类型

整型:

  • uint8(无符号 8 位整型 (0 到 255))
  • uint16(无符号 16 位整型 (0 到 65535))
  • uint32(无符号 32 位整型 (0 到 4294967295))
  • uint64(无符号 64 位整型 (0 到 18446744073709551615))
  • int8(带符号 8 位整型 (-128 到 127))
  • int16(带符号 16 位整型 (-32768 到 32767))
  • int32(带符号 32 位整型 (-2147483648 到 2147483647))
  • int64(带符号 64 位整型 (-9223372036854775808 到
    9223372036854775807))

浮点型:

  • float32(IEEE-754 32位浮点型数)
  • float64(IEEE-754 64位浮点型数)
  • complex64(复数:32 位实数和虚数)
  • complex128(复数:64 位实数和虚数)

其他数字类型:

  • byte(字符 类型,存储为ascii码,与uint8相同)
  • rune(与int32相同)
  • uint(32 或 64 位)
  • int(与 uint 大小同等)
  • uintptr(无符号整型,用于存放一个指针) 

2、JavaScript(Java脚本)简化命令和提高效果同bash脚本
在 Bash 命令行里输入 Bash 命令,在 Node.js 命令行里输入 JS
命令(<kbd>Ctrl</kbd> + <kbd>D</kbd>
退出),Bash 脚本能做的事体,JS 脚本也能做。(sh demo.sh 对应 node
demo.js)
一发简化命令:
俺们每回执行都是node ~/local/jsdemo.js ,假设在 jsdemo.js
第一行加上#!/usr/bin/env node,也就是shebang,就足以心满意足的少打node了

 

字符串类型

代表方法:

  • 双引号(” “)
  • 反引号(` `)

区分: 使用反引号 定义的字符串保留原始字符(
如换行\n,\t等)会对特殊字符进行转义,打印时候原样输出,而双引号则不转义。

字符串底层是一个byte的数组。

字符串本身是不可变的,因而要改变字符串中的字符,须要将字符串转变为数组,修改数组后再将数组转换为字符串:

package main

import "fmt"

func main()  {
    str := "hello world"
    s := []byte(str)
    s[0] = 'W'
    str = string(s)
    fmt.Println(str)

}//结果 Wello world

双引号、反引号分裂:

package main

import "fmt"

func main()  {
    var (
        a string =`wd\n`
        b string = "age \n"
    )
    fmt.Println(a,b)
}
//结果
wd\n age

作业:
var fs = require(‘fs’)
var dirName = process.argv[2]
if (fs.existsSync(dirName)) {
console.log(‘exists’)
process.exit(1)
} else {
fs.mkdirSync(dirName)
process.chdir(dirName)
fs.mkdirSync(‘css’)
fs.mkdirSync(‘js’)
fs.writeFileSync(“./index.html”,
“<!DOCTYPE>\n<title>Hello</title>\n<h1>Hi</h1>”)
fs.writeFileSync(“css/style.css”, “h1{color: red;}”)
fs.writeFileSync(“./js/main.js”, “var string = ‘Hello World’)”)
fs.writeFileSync(“./js/main.js”, “alert(string)”)
process.exit(0)
}
那种情状下 换行成功啦
if [ -d $1 ]; then
echo ‘error: dir exists’
exit
else
mkdir $1
cd $1
mkdir css js
touch index.html css/style.css js/main.js
echo “<!DOCTYPE>”>index.html
echo “<title>Hello</title>”>>index.html
echo “<h1>Hi</h1>”>>index.html
echo “h1{color: red;}”>css/style.css
echo “var string = “Hello World””>js/main.js
echo “alert(string)”>>js/main.js
echo ‘success’
exit
fi
换行\n不行,所以自己用了扩展,感觉应该有其他措施。。
答案给了一种一行写入的主意参考下
if [ -d $1 ]; then
echo ‘error: dir exists’
exit
else
mkdir $1
cd $1
mkdir css js
echo -e
“<!DOCTYPE>\n<title>Hello</title>\n<h1>Hi</h1>”
> index.html
echo -e “h1{color: red;}” > css/style.css
echo -e “var string = “Hello World”\nalert(string)” > js/main.js
echo ‘success’
exit
fi
exit 0表示执行成功,退出并且再次回到了0
威尼斯人平台 ,命令1 && 命令2 的情趣是1打响后执行2
命令1 || 命令2代表1难倒后举行2
一声令下1; 命令2 的情致是1举办后就执行2

仓储进程是数据库存储的一个重中之重的机能,然则MySQL在5.0在先并不协理存储进度,那使得MySQL在应用上大打折扣。好在MySQL
5.0到底开头已经支持存储进度,那样即可以大大升高数据库的处理速度,同时也可以增进数据库编程的八面后珑。

派生类型

  • 指针类型
  • 数组类型
  • 社团类型
  • 一道项目
  • 函数类型
  • 切开类型
  • 函数类型
  • 接口类型

 

类型转换

不等的数据类型之间是不相同意进行赋值或运算操作,必须通过类型转化才能展开演算或者赋值

转换方法:数据类型()

package main

import "fmt"

func main()  {
    var a int32 = 1
    var b int64 = 64
    c:= int64(a)+ b  //不转换编译报错
    fmt.Println(c)
}

 

格式

二、运算符

 

算数运算符

  • +相加 :x + y = z
  • -相减 :  x – y = z
  • *相乘:x * y = z
  • % 求余: x % y =z
  • ++ 自增 :x++
  • — 自减:x–

MySQL存储进度创制的格式:CREATE PROCEDURE进程名([经过参数[,…]])  
procedure

事关运算符

  • == 判断多少个值是不是等于,如若相等再次来到True 否则再次回到 False。
  • != 判断五个值是还是不是不等于,即使不对等重回True 否则重返 False。
  • > 判断左侧值是或不是高于右侧值,假设是回到 True
    否则重返 False。
  • < 判断左侧值是或不是低于左边值,假使是回到 True
    否则重临 False。
  • >= 判断左侧值是不是领先等于左侧值,如若是回到
    True 否则再次来到 False。
  • <= 判断右边值是或不是低于等于右侧值,假设是回到
    True 否则再次回到 False。

[特性…] 过程体

逻辑运算符

  • && 逻辑 AND 运算符。
    假设两边的操作数都是 True,则条件 True,否则为 False。
  • || 逻辑 OR 运算符。
    若是两边的操作数有一个 True,则条件 True,否则为 False。
  • ! 逻辑 NOT 运算符。 若是基准为
    True,则逻辑 NOT 条件 False,否则为 True。

 

 

位运算符

位运算符对整数在内存中的二进制位举行操作。

  • & 按位与运算符”&”是肉眼运算符。
    其作用是加入运算的两数各对应的二进位相与。
  • | 按位或运算符”|”是眼睛运算符。
    其效果是参预运算的两数各对应的二进位相或。
  • ^ 按位异或运算符”^”是双眼运算符。
    其职能是出席运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。
  • << 左移运算符”<<“是眼睛运算符。左移n位就是乘以2的n次方。
    其职能把”<<“左侧的运算数的各二进位一体左移若干位,由”<<“左边的数指定移动的位数,高位舍弃,低位补0。
  • >> 右移运算符”>>”是肉眼运算符。右移n位就是除以2的n次方。
    其听从是把”>>”左侧的运算数的各二进位一体右移若干位,”>>”左边的数指定移动的位数。

    //如若A = 60, B = 13;
    二进制格式表示

    A = 0011 1100

    B = 0000 1101


    A&B = 0000 1100

    A|B = 0011 1101

    A^B = 0011 0001

此处先举个例子:

赋值运算

  • = 简单的赋值运算符,将一个表明式的值赋给一个左值
  • += 相加后再赋值 (C += A 等于 C = C + A)
  • -= 相减后再赋值 (C -= A 等于 C = C – A)
  • *= 相乘后再赋值 (C *= A 等于 C = C * A)
  • /= 相除后再赋值 (C /= A 等于 C = C / A)
  • %= 求余后再赋值 (C %= A 等于 C = C % A)
  • <<= 左移后赋值 (C <<= 2 等于 C = C
    << 2)
  • >>= 右移后赋值 (C >>= 2 对等 C =
    C >> 2)
  • &= 按位与后赋值 (C &= 2 格外 C = C & 2)
  • ^= 按位异或后赋值  (C ^= 2 相当于 C = C
    ^ 2)
  • |= 按位或后赋值 (C |= 2 对等 C = C | 2)

  

变量运算符

  • & 取变量的地点(&a将付出变量a的莫过于地址)
  • * 取变量的指针(*a 是指向变量a的指针)

 

 三、流程控制

  1. mysql> DELIMITER // 

if-else

if condition1 {          
} else if condition2 {    //else 一定要和大括号在一行
} else if condition3 {

} else { 
}

 

for

一般for 循环

for i := 0; i < 100; i++ {  //语句使用分号隔开
}

死循环(类似python中的while)

for true {
}
//或者
for {
}

 使用range遍历数组、slice、map、chan等

威尼斯人平台 1威尼斯人平台 2

package main

import "fmt"

func main()  {
    str := "hell world"
    for k :=range str {  //字符串遍历
        fmt.Printf("index=%d val=%c len=%d\n",k,str[k],len(str)) //k代表索引、v代表值
    }

}//结果 index=0 val=h len=10 ....

目录循环

威尼斯人平台 3威尼斯人平台 4

package main

import "fmt"

func main()  {
    str := "hell world"
    for index,val :=range str {  //字符串遍历
        fmt.Printf("index=%d val=%c len=%d\n",index,val,len(str)) //k代表索引、v代表值
    }

}//结果 index=0 val=h len=10 ....

同时循环index,val

 

  1. mysql> CREATE PROCEDURE proc1(OUT s int) 

switch

switch条件控制,
当条件非常当前case时候,执行当前case,不会进行往下进行,若都不曾匹配到,则履行default,当然也得以行使fallthrought重大字强制执行下边语句。

switch var {
case 条件一:
case 条件二:
case 条件三:
default:
}

威尼斯人平台 5威尼斯人平台 6

package main

import "fmt"

func main()  {
    var a = 0
    switch a {
    case 0:
        fmt.Println("this is 0")
    case 1:
        fmt.Println("this is 1")
    case 2:
        fmt.Println("this is 2")
    default:
        fmt.Print("this is default")
    }
}//结果  this is 0

switch 简单示例

威尼斯人平台 7威尼斯人平台 8

package main

import "fmt"

func main()  {
    var a = 0
    switch  { //这里没有变量
    case a > 0 && a <3:  //a in 0-3
        fmt.Println("a in 0-3")
    case a < -1 || a > 3:
        fmt.Println("a <0 or a > 3")
    case a == 0:
        fmt.Println("a equal 0")
    default:
        fmt.Print("this is default")
    } //结果 a equal 0
}

多尺度判断case

威尼斯人平台 9威尼斯人平台 10

package main

import "fmt"

func main()  {
    var a = 0
    switch  {
    case a > 0 && a <3:  //a in 0-3
        fmt.Println("a in 0-3")
    case a < -1 || a > 3:
        fmt.Println("a <0 or a > 3")
    case a == 0:
        fmt.Println("a equal 0")
        fallthrough //使用fallthrought关键字当满足该条件时候,继续执行下面语句
    default:
        fmt.Printf("this is default\n")
    } 
//结果 a equal 0    
//this is default

}

加入fallthrought

 

 goto&label

label作为一个标志,语法是字符串 +冒号定义,在循环中行使lable可调至
label的定义的岗位

package main

import (
    "fmt"
    "time"
)

func main()  {

    LABLE:  //定义名称为LABLE
    //fmt.Println("回到label")
    for i := 0; i < 10; i++ {
        fmt.Println("-->",i)
        for true {
            i++
            if i == 6 {

                time.Sleep(time.Second * 5)
                break LABLE  //跳出循环到LABLE定义的地方
            }
            fmt.Println(i)
        }
    }

}

goto功用在于跳转到label标签定义的地点继续执行。上述代码修改为goto,将是死循环

package main

import (
    "fmt"
    "time"
)

func main()  {

    LABLE:  //定义名称为LABLE
    //fmt.Println("回到label")
    for i := 0; i < 10; i++ {
        fmt.Println("-->",i)
        for true {
            i++
            if i == 6 {

                time.Sleep(time.Second * 5)
                goto LABLE  //跳出循环到LABLE定义的地方
            }
            fmt.Println(i)
        }
    }

}//结果:每5秒打印1,2,3,4,5

 

3.     -> BEGIN

四、函数

函数是go语言编程的基本。特点:

  • 不扶助 重载,一个包不能有几个名称相同的函数
  • 函数也是一种档次,一个函数可以赋值给变量(该特性和python一样)
  • 函数也可以不用起名称,那种函数称为匿名函数
  • go语言函数可以有七个重回值
  • 使用_标识符可忽略再次回到值

函数定义语法:

func 函数名( 参数 )  [(返回值列表)] {
   函数体
}// [] 代表非必需

威尼斯人平台 11威尼斯人平台 12

package main

import (
    "fmt"
)


func add(a int,b int) int {

    return a + b
}
func main()  {

        c := add
        d := c(1,2)  // 加括号代表调用函数
        fmt.Println(d)
    }//结果:3

函数作为变量demo

威尼斯人平台 13威尼斯人平台 14

package main

import (
    "fmt"
)


func add(a int,b int) (int,int) {

    return a + b,a
}
func main()  {

        c := add
        d , _ := c(1,2)  //使用_忽略第二个返回值
        fmt.Println(d)
    }//结果:3

不经意重回值demo

 

 

函数参数传递格局

值传递:一般基本的数据类型都是值传递,如数字、字符串。

引用传递:复杂的数据类型,如map、chan、interface,是引用传递。

只顾:无论是值传递照旧引用传递,传递给函数的都是变量的副本,然而值传递是值的正片,引用传递拷贝的是地方,一般的话地址拷贝更为神速。
而值拷贝取决于拷贝对象大小,对象越大,则性能相对低。

 

 

4.     -> SELECT COUNT(*) INTO s FROM user; 

函数重临值命名

go
函数的再次回到值或者结果参数可以指定一个名字(名字不是挟持的),并且像原始的变量这样选用,如同输入参数那样。一经对其命名,在函数初叶时,它们会用其类其余零值开首化;借使函数在不加参数的图景下实施了 return 语句,结果参数的脚下值会作为再次来到值再次来到。

package main

import "fmt"
//斐波那契数列实现
func Factorial(x int) (result int) {  //给函数返回值命名为result
    if x <= 1  {
        result = 1
    } else {
        result =Factorial(x - 2)  + Factorial(x - 1)
        }

    return
}
func main()  {
    b := Factorial(4)
    fmt.Println(b)
    }//结果:5

 

 

匿名函数

匿名函数(比较javascript)即没有函数名的函数,只可以放在函数中,可以完成函数嵌套定义的听从。

package main

import "fmt"

func main()  {
    c := func(a int,b int ) int {
        return a + b
    }(3,4)
    fmt.Println(c)
    }//结果:7

5.     -> END

函数的可变参数

go语言中,也可以像python一样传递可变参数(意思是
传递时候才规定有多少个参数,定义时候不明了参数个数),可以认为
参数是数组格局:

func funcname(arg...type) { }

package main

import "fmt"

func add(a int, arg...int) int {
    var sum = 0
    for i := 0; i < len(arg); i++ {
        sum += arg[i] //取参数的值
    }
    return sum
}
func main()  {
    c := add(1)  //传递一个参数
    d := add(2,3,4)  //传递两个参数
    fmt.Println(c,d)
    }//结果:0,7

 

defer

当函数中存在defer关键字时候,一旦函数重返则进行defer语句,由此,
defer可以做一些资源清理的工作。

特性:

  • 七个defer语句,根据后进先出的主意举行。
  • defer语句中的变量,在defer声明时候就决定了。

    package main

    import “fmt”

    func main() {

    i := 0
    defer fmt.Println(i)   // 放入栈
    i++
    defer fmt.Println(i)  //在放入栈,先 执行
    fmt.Println("wd")
    return
    
    }//结果:wd ,1,0
    

6.     -> // 

命令行参数

概念:

  • 命令行参数(或参数):是指运行程序时提供的参数。
  • 已定义命令行参数:是指程序中经过 flag.Xxx 等这种方式定义了的参数。输入参数时索要 -flag 形式。

  • flag(non-flag)命令行参数(或保留的命令行参数):不合乎 -flag 格局的参数。- 、--和 --flag 都属于
    non-flag 参数。

出自命令行的参数在程序中通过os.Args(对比 python 的sys.agrv) 获取,导入包
os
即可。其中 os.Args[0] 为推行的程序名,os.Args[1] ~ os.Args[n-1] 是具体的参数。

// 示例
test.exe  1 2 
//test.exe  为os.Args[0]  ,1是 os.Args[1],2是os.Args[2]

 

go语言的开头化顺序

 伊始化顺序规则: 引入的包 –>包中的常量
、变量、init–>当前包的常量、变量、init –>main函数

图示:

威尼斯人平台 15

 

注意事项:

  • 脚下go源文件中, 每一个被Import的包, 按其在源文件中冒出顺序初始化。
  • 如果当前包有多少个init在不一致的源文件中,
    则按源文件名以字典序从小到大排序,小的先被实践到,
    同一包且同一源文件中的init,则按其出现在文件中的先后顺序依次早先化;
    当前包的package level变量常量也遵从那些规则;
    其实准确的话,应是按提交给编译器的源文件名依次为准,只是在付给编译器以前,
    go命令行工具对源文件名按字典序排序了。
  •  init只能由go runtine自已调用,
    大家在代码中不得以显得调用,也不得以被引用,如赋给a function
    variable。
  • 包A 引入包B , 包B又引入包C, 则包的初步化顺序为: C -> B -> A
  • 引入包,必须幸免死循环,如 A 引 B , B引C, C引A.
  •  一个包被其他七个包引入,如A -> B ->C 和 H -> I -> C ,
    C被此外包引了2次, 不过小心包C只被伊始化一遍。
  • 另一个大口径,
    被爱抚的总是先被起初化,main包总是被最后一个开始化,因为它总是信赖其他包。

 

  1. mysql> DELIMITER ;

 

 参数

 

MySQL存储进程的参数用在存储进程的定义,共有二种参数类型,IN,OUT,INOUT,格局如:

 

CREATE PROCEDURE([[IN |OUT |INOUT ] 参数名 数据类形…])

 

IN 输入参数:
表示该参数的值必须在调用存储进度时指定,在仓储进度中修改该参数的值无法被重回,为默许值

 

OUT 输出参数: 该值可在仓储进度之中被改变,并可再次回到

 

INOUT 输入输出参数: 调用时指定,并且可被改成和重回

 

. IN参数例子

 

创建: 

 

  1. mysql > DELIMITER // 

 

  1. mysql > CREATE PROCEDURE demo_in_parameter(IN p_in int) 

 

3.      -> BEGIN  

 

4.      -> SELECT p_in; /*询问输入参数*/ 

 

5.      -> SET p_in=2; /*修改*/ 

 

6.      -> SELECT p_in; /*查阅修改后的值*/ 

 

7.      -> END;  

 

8.      -> // 

 

mysql > DELIMITER ;

 

OUT参数例子

 

创建:

 

  1. mysql > DELIMITER // 

 

  1. mysql > CREATE PROCEDURE demo_out_parameter(OUT p_out int) 

 

3.      -> BEGIN

 

4.      -> SELECT p_out;/*翻看输出参数*/ 

 

5.      -> SET p_out=2;/*修改参数值*/ 

 

6.      -> SELECT p_out;/*看望有否变化*/ 

 

7.      -> END; 

 

8.      -> // 

 

  1. mysql > DELIMITER ;

 

. INOUT参数例子

 

创建:

 

  1. mysql > DELIMITER //  

 

  1. mysql > CREATE PROCEDURE demo_inout_parameter(INOUT p_inout
    int)  

 

3.      -> BEGIN

 

4.      -> SELECT p_inout; 

 

5.      -> SET p_inout=2; 

 

6.      -> SELECT p_inout;  

 

7.      -> END; 

 

8.      -> //  

 

  1. mysql > DELIMITER ;

 

注释

 

 

 

MySQL存储进程可使用二种风格的诠释

 

双模杠:–

 

该风格相似用来单行注释

 

 风格:/* 注释内容*/ 一般用于多行注释

摘自 chizhidan_luck

关于MySQL的囤积过程存储进程是数据库存储的一个要害的成效,然而MySQL在5.0原先并不协理存储进程,那使得MySQ…

留下评论

网站地图xml地图