• MySQL之数据库编程(了解语言结构)


    目录

    1、常量

    1.1、字符串常量

    1.2、数值常量

    1.3、日期时间常量

    1.4、布尔值

    2、变量

    2.1、用户变量

    2.2、系统变量

     3、运算符与表达式

    3.1、算术运算符

    3.2、比较运算符

    3.3、逻辑运算符

    3.4、运算符优先级

    3.5、表达式

    4、系统内置函数

    4.1、数学函数

     4.1.1、GREATEST()和LEAST()函数

     4.1.2、FLOOR()和CEILING()函数

    4.1.3、ROUND()和TRUNCATE()函数

    4.1.4、ABS()函数

    4.1.5、SIGN()函数

     4.1.6、SQRT()函数

    4.2、字符串函数

     4.2.1、ASCII()函数

     4.2.2、CHAR()函数

    4.2.3、LEFT()和RIGHT()函数

     4.2.4、TRIM()、LTRIM()和RTRIM()函数

     4.2.5、REPLACE()函数

    4.2.6、SUBSTRING()函数

    4.3、日期和时间函数

    4.3.1、NOW()函数

     4.3.2、CURTIME()和CURDATE()函数

    4.3.3、YEAR(dstr)函数

    4.3.4、MOTNTH()和MONTHNAME()函数

    4.3.5、DAYNAME()函数

    4.4、加密函数

    4.4.1、AES_ENCRYPT()和AES_DECRYPT()函数

    4.4.2、ENCODE()和DECODE()函数

    4.4.3、PASSWORD()函数

    4.5、控制流函数

    4.6、类型转换函数

     

    1、常量

    1.1、字符串常量

            字符串是指用单引号或双引号括起来的字符序列。如'你好',每个汉字字符用2个字节存储,而每个ASCII字符用1个字节存储。

            在字符串中不仅可以使用普通的字符,也可以使用特殊字符如换行符、单引号(“ ' ”)、反斜线(“ \ ”)等,但如果要使用特殊字符,需要使用转义符。每个特殊字符以一个反斜杠开始,指出后面的字符使用转义字符来解释,而不是普通字符。

    1.2、数值常量

            数值常量可以分为整数常量和浮点数常量。

            整数常量即不带小数点的十进制数。

            浮点数常量是使用小数点的数值常量。

    1.3、日期时间常量

            日期时间常量是由单引号将表示日期时间的字符串括起来构成。日期型常量包括年、月、日,数据类型为date,表示为1970-01-01这样的值。时间型常量包括小时数、分钟数、秒数及微秒数,数据类型为time,表示为12:30:52.01这样的值。MySQL还支持日期/时间的组合,数据类型为datetime或timestamp,如“1970-01-01 12:30”。datetime和timestamp的区别:datetime的年份在1000-9999之间,而timestamp的年份在1970-2037之间,还有就是timestamp在插入带微秒的日期时间时将忽略微秒。timestamp还支持时区,即在不同时区转换为相应时间。

    1.4、布尔值

            布尔值只包含两个可能的值:true和false。false的数字值是0,true的数字值是1。

    2、变量

    2.1、用户变量

            用户可以在表达式中使用自己定义的变量,这样的变量叫做用户变量。用户可以先在用户变量中保存值,然后在以后引用它,这样可以将值从一个语句传递到另一个语句。在使用用户变量前必须定义和初始化。如果使用没有初始化的变量,其值为NULL。

            用户变量与连接有关。也就是说,一个客户端定义的变量不能被其他客户端看到或使用。当客户端退出时,该客户端连接的所有变量将自动释放。

            定义和初始化一个变量可以使用set语句。

            语法格式:SET @用户变量=表达式

    例:创建用户变量name并赋值为“张华” 

    SET @name='张华';

    可以同时定义多个变量,中间用逗号隔开。

    例:创建用户变量u1并赋值为1,u2赋值为2 

    SET @u1=1,@u2=2;

     定义用户变量是变量值可以是一个表达式

    例:创建用户变量u1,其值为u2的值加1

    SET @u1=@u2+1;

            在SELECT语句中,表达式发送到客户端后才进行计算。因此在HAVING、GROUP BY或ORDER BY子句中,不能使用包含SELECT列表中所设变量的表达式。

            对于SET语句,可以使用“=”或“:=”作为分配符。分配给每个变量的值可以为整数、实数、字符串或NULL值,也可以用其他SQL语句代替SET语句来为用户变量分配一个值。在这种情况下,分配符必须为“:=”,而不能用“=”,因为在非SET语句中“=”被视为比较操作符。

    2.2、系统变量

            系统变量是MySQL的一些特定设置。当MySQL数据库服务器启动时,这些设置被读取出来决定下一步骤。例如,有些设置定义了数据如何被存储,有些设置则影响处理速度,还有些与日期有关,这些设置就是系统变量。和用户变量一样,系统变量也有一个值和一个数据类型,但不同的是,系统变量在MySQL服务器启动时就被引入并初始化为默认值。

    例:获得现在使用的MySQL版本号 

    SELECT @@VERSION;

             在MySQL中,系统变量VERSION的值设置为版本号。在变量名前必须加两个@符号才能正确返回该变量的值。

            大多数的系统变量应用于其他SQL语句中时,必须在名称前加两个@符号,而为了与其他SQL产品保持一致,某些特定的系统变量是要省略这两个@符号的,如CURRENT_DATE(系统日期)、CURRENT_TIME(系统时间)、CURRENT_TIMESTAMP(系统日期和时间)和CURRENT_USER(SQL用户的名字)。

     例:获取系统当前时间

    SELECT CURRENT_TIME;

             MySQL对于大多数系统变量都有默认值。当数据库服务器启动时,就使用这些值。也可以在C盘MYSQL文件夹下的my.ini选项文件中修改这些值。但数据库服务器启动时,该文件被自动读取。

            使用SHOW VARIABLES语句可以得到系统变量清单。

    例:显示系统变量清单 

    SHOW VARIABLES;

     3、运算符与表达式

    3.1、算术运算符

            算术运算符在两个表达式上执行数学运算,这两个表达式可以是任何数值数据类型。算术运算符有+(加)、-(减)、*(乘)、/(除)和%(求模/取余)5种运算。

    3.2、比较运算符

            比较运算符(又叫关系运算符),用于比较两个表达式的值,其运算结果为逻辑值,可以为1(真)、0(假)和NULL(不能确定)中的一种。

            比较运算符可以用于比较数字和字符串。数字作为浮点值比较,而字符串以不区分大小写的方式进行比较(除非用特殊的BINARY关键字)

            注意:MySQL在运算过程中能够自动地把数字转换为字符串,而在比较运算过程中,MySQL能够自动地把字符串转换为数字。

    3.3、逻辑运算符

            逻辑运算符用于对某个条件进行测试,运算结果为true(1)或false(0)。

    这些具体的运算符在博主以前发布的《MySQL之数据查询(WHERE)》一文中有写到,所以这里便不具体写出了。

    3.4、运算符优先级

            当一个复杂的表达式有多个运算符时,运算符优先级决定执行运算的先后次序。执行的顺序会影响所得到的运算结果。在一个表达式中按先高(优先级数字小)后低(优先级数字大)的顺序进行运算。

    优先级从小到大:

    +(正)、-(负)1级

    *(乘)、/(除)、%(模)2级

    +(加)、-(减)3级

    =,>,<,>=,<=,<>,!=,!>,!< 4级

    NOT 5级

    AND 6级

    OR 7级

    =(赋值) 8级

    3.5、表达式

            表达式就是常量、变量、列名、运算符和函数的组合。一个表达式通常可以得到一个值。与常量和变量一样,表达式的值也具有某种数据类型,可能的数据类型有字符类型、数值类型、日期时间类型,这样,根据表达式值的类型,表达式可分为字符型表达式、数值型表达式和日期表达式。

            表达式按照形式还可分为单一表达式和复合表达式。单一表达式就是一个单一的值,如一个常量或列名。复合表达式是由运算符将多个单一表达式连接而成的表达式。

    4、系统内置函数

    4.1、数学函数

            数学函数用于执行一些比较复杂的算术操作。MySQL支持很多数学函数。若发生错误,所有的数学函数都会返回NULL。

     4.1.1、GREATEST()和LEAST()函数

    功能为获得一组数中的最大值和最小值。

    1. # 例
    2. SELECT GREATEST(10,9,20,5),LEAST(1,2,3);

     4.1.2、FLOOR()和CEILING()函数

            FLOOR()用于获得小于一个数的最大整数值,CEILING()函数用于获得大于一个数的最小整数值。    

    4.1.3、ROUND()和TRUNCATE()函数

            ROUND()函数用于获得一个数的四舍五入的整数值。

            TRUNCATE()函数用于把一个数字截取为一个指定小数个数的数字,逗号后面的数字表示指定小数的位数。例:SELECT TRUNCATE(3.1415,2)

    4.1.4、ABS()函数

            ABS()用于获得一个数的绝对值

    4.1.5、SIGN()函数

            SIGN()函数返回数值的符号,返回的结果是正数(1)、负数(-1)或者零(0)

     4.1.6、SQRT()函数

            用于返回一个数的平方根

    4.2、字符串函数

            在字符串函数中,包含的字符串必须用单引号括起。MySQL提供了很多字符串函数。

     4.2.1、ASCII()函数

    ASCII(char)

            返回的字符表达式最左端字符的ASCII值。参数char的类型为字符型的表达式,返回值为整型。例:SELECT ASCII('A');     返回的便是字母A的ASCII码值

     4.2.2、CHAR()函数

    CHAR(X1,X2,X3)

    将X1,X2,X3的ASCII码转换为字符并将结果组合成一个字符串。参数X1,X2,X3为介于0-255之间的整数,返回值为字符型。例:SELECT CHAR(65,66,67);  返回ASCII码值为65、66、67的字符,组成一个字符串。

    4.2.3、LEFT()和RIGHT()函数

    LEFT | RIGHT(str,x)

            分别返回从字符串str左边和右边开始指定x个字符

    例:返回Book表中书名最左边的3个字符

    SELECT LEFT(书名,3) FROM Book;

     4.2.4、TRIM()、LTRIM()和RTRIM()函数

    TRIM | LTRIM | RTRIM(str)

            使用LTRIM()和RTRIM()分别删除字符串中前面的空格和尾部的空格,返回值为字符串。参数str为字符型表达式,返回值类型为varchar。

            TRIM()删除字符串首部和尾部的所有空格。

    1. # 例
    2. SELECT TRIM(' MySQL ');
    3. # 结果:返回MySQL5个字符

     4.2.5、REPLACE()函数

    REPLACE(str1,str2,str3)

            REPLACE()函数的作用是用字符串str3替换str1中所有出现的字符串str2,返回替换后的字符串。

    4.2.6、SUBSTRING()函数

    SUBSTRING(expression,Start,Length)

            返回expression中指定的部分数据。参数expression可为字符串、二进制串、text、image字段或表达式。Start、Length均为整型,前者指定子串的开始位置,后者指定子串的长度(需要返回的字节数)。如果expression是字段类型和二进制类型,则返回值类型与expression的类型相同。如果为text类型,返回的是varchar类型。

    例:显示Members表中会员姓名,要求在一列中显示姓,在另一列中显示名。 

    1. SELECT SUBSTRING(会员姓名,1,1)AS 姓,
    2. SUBSTRING(会员姓名,2,LENGTH(会员姓名)-1)AS
    3. FROM Members
    4. ORDER BY 会员姓名;

     LENGTH函数的作用是返回一个字符串的长度。

    4.3、日期和时间函数

    4.3.1、NOW()函数

            使用NOW()函数可以获得当前的日期和时间,它以YYYY-MM-DD HH:MM:SS的格式返回当前的日期和时间。例:SELECT NOW();

     4.3.2、CURTIME()和CURDATE()函数

            CURTIME()和CURDATE()函数比NOW()函数更为具体化,他们分别返回的是当前的时间和日期,没有参数。

    4.3.3、YEAR(dstr)函数

            YEAR(dstr)函数分析日期值dstr并返回其中关于年的部分。

    例:SELECT YEAR(202208142132); 

    4.3.4、MOTNTH()和MONTHNAME()函数

             MOTNTH()和MONTHNAME()函数分别以数值和字符串的格式返回参数中月的部分。

    4.3.5、DAYNAME()函数

            和MONTHNAME()相似,DAYNAME()以字符串形式返回星期名。 

    4.4、加密函数

    4.4.1、AES_ENCRYPT()和AES_DECRYPT()函数

    AES_ENCRYPT | AES_DECRYPT(str,key); 

            AES_ENCRYPT()函数返回的是密钥key对字符串str利用高级加密标准(AES)算法加密后的结果,结果是一个二进制的字符串,以BLOB类型存储。而AES_DECRYPT()函数用于对用高级加密方法加密的数据进行解密。若检测到无效数据或不正确的填充,函数会返回NULL。

    4.4.2、ENCODE()和DECODE()函数

    ENCODE | DECODE(str,key);

            ENCODE()函数用来对字符串str进行加密,返回的结果是一个二进制字符串,以BLOB类型存储。DECODE()函数使用正确的密钥对加密后的结果进行解密。与AES_ENCRYPT()和AES_DECRYPT()函数相比,这两个函数加密程度相对较弱。 

    4.4.3、PASSWORD()函数

    PASSWORD(str);

             返回的字符串str加密后的密码字符串,适合于插入到MySQL的安全系统。该加密过程不可逆,和UNIX密码加密过程使用不同的算法,主要用于MySQL的认证系统。

    例:SELECT PASSWORD('MySQL');  返回MySQL的加密版本。

    4.5、控制流函数

            MySQL有部分函数是用来进行条件操作的。这些函数可以实现SQL的条件逻辑,允许开发者将一些应用程序业务逻辑转换到数据库后台。

             和许多脚本语言提供的IF()函数一样,MySQL的IF()函数也可以建立一个简单的条件测试:IF(ex1,ex2,ex3)

            该函数有3个参数,第1个是要被判断的表达式,如果表达式为真,IF()将会返回第2个参数。如果为假,IF()将会返回第3个参数。

    例:SELECT IF(2*4>9-5,'是','否'); 先判断2*4是否大于9-5,是则返回'是',否则返回'否'。

    4.6、类型转换函数

            MySQL提供CAST()函数进行数据类型转换,它可以把一个值转换为指定的数据类型。

     CAST(expr,AS type)

    expr是CAST()函数要转换的值,type是转换后的数据类型。

            在CAST()函数中MySQL支持以下数据类型:BINARY、CHAR、DATE、TIME、DATETIME、SIGNED和UNSIGNED类型。

            通常情况下,当使用数值操作时,字符串会自动地转换为数字,因此下面例子中两种操作会得到相同的结果:SELECT 1+'99',1+CAST('99' AS SIGNED);

            字符串可以指定为BINARY类型,这样他们的比较操作就对大小写敏感。使用CAST()函数指定一个字符串为BINARY何字符串前面使用BINARY关键词具有相同的作用。

    例:SELECT 'a'=BINARY'A','a'=CAST('A'AS BINARY);

    两个表达式的结果都为零表示两个表达式都为假,从此例可以看出字符串指定为BINARY类型后,对大小写是敏感的。

  • 相关阅读:
    Shell脚本编写教程【十】——Shell 输入/输出重定向
    《爱在 ZStack Cube 超融合》三部曲
    新能源汽车展厅用哪些种类的显示屏比较好?
    CPU眼里的C/C++:1.2 查看变量和函数在内存中的存储位置
    趁热打铁之文本信息标注平台
    Python全栈开发【基础-02】计算机CPU内存基础详解
    java-php-net-python-银行招聘信息网计算机毕业设计程序
    大家面试测试工程师一般问什么问题?
    电商大促就靠RPA,摆脱重复劳动,急速提效
    c面向对象编码风格(上)
  • 原文地址:https://blog.csdn.net/qq_62731133/article/details/126311923