Sql编程

  1. 常量
  2. 字符串常量,如select  ‘hello’ as  col1
  3. 数值常量:整数常量(2018),小数常量(2.18)
  4. 日期时间常量:时间常量(‘14:30:24’),日期时间常量(‘2018-04-08 22:44:35’)
  5. 布尔值:true和false
  6. 二进制:0和1,如select b ‘11’  //b是二进制标志,x是16进制
  7. 十六进制: select X

 

create table if not exists student (
id varchar(10),
sno varchar(10),
sname varchar(10),
primary key(id)
);
create table if not exists teacher(
id int(10),
tno varchar(10),
tname varchar(10),
primary key(id)
);
  1. 变量

系统变量(@@开头)

用户自定义变量

  1. 用户会话变量(@开头):会话期间一直有效,不能客户机共享
  2. 局部变量

运算符

算数运算符

比较运算符

逻辑运算符

位运算符

流程语句

Begin-end语句块

delimiter $$
 BEGINSET @a=1;
if (@a > 0) THEN
 SELECT COUNT(*) from tb_public_effect_tmp;
 ELSE
 SELECT * from tb_effect_master;
 end if;END $$

 

如何定义一个函数?

函数如何调用?

函数应用场景?

 

条件控制语句

  1. if
  2. case
  3. while

 

系统函数

-----数学函数

  • 三角函数:pi(),radians(s),sin(x),cos(x)…
  • 指数函数:sqrt(),pow(x,y)
  • 对数函数:log(x)
  • 近似值函数:round(x);
  • 随机函数:rand(),
  • 二进制,八进制,十六进制,:bin(x),oct(x),hex()

-----字符串函数

  • 字符串字符集函数:convert(x  using  chatset)
  • 获取字符串长度:char_length(x)
  • 加密函数:password(x),md5(x)
  • 加密-解密函数:encode(x,key)  decode(password,key)
  • 字符串连接函数:concat(x1.x2,),concat_ws(x,x1,x2,…)
  • 修剪函数:ltrim(x),rtrim(x),trim(x)
  • 截取函数:left(x,n),right(x,n)
  • 字符串大小写转换函数:upper(x),uncase,lower(x),lcase(x)
  • Substring (x,start,length)
  • 替换函数:replace(x1,x2,x3)
  • 字符串比较函数:strcmp(x1,x2)
  • 字符串逆序函数:reverse(x)

-----类型转换函数

  • convert(x,type)
  • cast(x as type)

-----条件控制函数

  • if()
  • ifnull()
  • case

-----系统信息函数

version()   //获取版本号

Datebase()  //获取当前数据库

Schema()   //

user()      //获取当前用户

current_time() //获取当前时间

current_date() //获取当前日期

now()  //获取当前日期时间

monthnamea(x),dayname(x),weekday(x),dayofweek(x) // 获取月份星期信息

datediff(x1,x2), adddate(d,n) subdate(d,n)   //获取相隔天数

-----其他常用函数

Last_insert_id()

ip地址与整数相互转换函数

基准值函数

uuid()  函数

create table student(

id int,

name varchar(20),

gender varchar(2),

age int

);

视图

视图的定义:

视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

视图应用场景:

视图是虚拟表,本身不存储数据,而是按照指定的方式进行查询。比如,我们希望从前文提到的四张表,order_baisc,order_details,user和product中查找所有记录,需要写入代码指令:

mysql将常量作为表 mysql 定义常量_mysql将常量作为表

想再次查询这几个表中uid为u0001的用户的记录,有需要键入一次操作指令: 

mysql将常量作为表 mysql 定义常量_数据库_02

也就是说,每次查询都得重新键入查询指令SQL代码,这种费时费力的体力活,对于时间就是生命的你我来说,是不划算的。所以借助视图,来执行相同或相似的查询。

如何创建视图与应用视图

>CREATE VIEW 视图名(列1,列2...)
 AS SELECT (列1,列2...)
 FROM ...;

可以看到,创建视图和查询相比,增加了前面的CREATE VIEW 视图名 AS,使用视图和使用表完全一样,只需要把视图当成一张表就OK了。视图是一张虚拟表。

eg:创建order_baisc,order_details,user和product的查询视图,并通过视图查找uid为u0001的记录: 

mysql将常量作为表 mysql 定义常量_数据库_03

修改和创建视图可以使用代码:

CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...];

eg:

mysql将常量作为表 mysql 定义常量_数据库_04

查看数据库中有哪些视图 show tables 
前面提到,视图就是虚拟的表,因此,查看视图的方法和查看表的方法是一样的:

mysql将常量作为表 mysql 定义常量_数据_05

查看视图详情 :

>DESC 视图名;
或者
>SHOW FIELDS FROM 视图名;

eg:

mysql将常量作为表 mysql 定义常量_数据_06

通过视图变更数据:

INSERT INTO v_order(pid,pname,price) VALUES('p010','柴油','34');

mysql将常量作为表 mysql 定义常量_数据_07

通过上图,我们可以看到,跨表插入数据系统反馈报错,提示不能修改超过一个表的数据。因此,可以通过视图插入数据,但是只能基于一个基础表进行插入,不能跨表更新数据。

WITH CHECK OPTION 限制:

如果在创建视图的时候制定了“WITH CHECK OPTION”,那么更新数据时不能插入或更新不符合视图限制条件的记录。

eg:对表product创建一个单价超过3000的视图,并加上“WITH CHECK OPTION”,之后插入一个价格为42的记录:

mysql将常量作为表 mysql 定义常量_mysql将常量作为表_08

可以看到系统提示错误CHECK OPTION FAILED。因为视图限制了价格要高于3000. 
后面再次尝试了不加“WITH CHECK OPTION”的视图,后者可以成功插入。

同样的,在不加“WITH CHECK OPTION”的情况下,通过视图修改记录,也可以成功执行:

mysql将常量作为表 mysql 定义常量_数据库_09

通过视图修改,可能导致数据无故消失,因此:

没有特殊的理由,建议加上“WITH CHECK OPTION”命令。

注意点: 
1. 视图不是表,不直接存储数据,是一张虚拟的表; 
2. 一般情况下,在创建有条件限制的视图时,加上“WITH CHECK OPTION”命令。