Mysql学习日志

1.概述

DB 数据库(Database):存数据的仓库,其本质是一个文件系统,保存了一系列有组织的数据

DBMS 数据库管理系统:一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制。用户通过数据库管理系统访问数据库中表内的数据

SQL 结构化查询语言:专门用来与数据库通信的语言

关系型数据库设计规则

E-R(实体 联系)模型中三个主要概念:实体集、属性和联系集

实体集对应数据库的一个表,实体则对应数据库表中的一行,也称为一条记录,一个属性则对应数据库表中的一列,也称为一个字段

表的关联关系:一对一、一对多、多对多和自我引用

2.基本的select语句

1.SQL的分类:

DDL:数据定义语言 CREATE\ ALTER\ DROP \ RENAME\TRUNCATE

DML:数据操作语言     INSERT \ DELETE \ UPDATE \ SELECT    (关键)

DCL:数据控制语言 COMMIT \ ROLLBACK \ SAVEPOINT \ GRANT \ REVOKE

\G可以使得查询的信息由列变成行来显示(转置)

 

2. 建议遵守大小写规范:win下大小写不敏感,linux大小写敏感

建议:数据库名、表名、表别名、字段名、字段别名都小写

关键字、函数名、绑定变量等都大写

3.注释: #单行注释

        /*

        多行注释

        */

        -- 注释文字(--后面加空格)

4.导入现有的数据表、表的数据

方式1:source文件的全路径名

方式2:基于具体的图形化界面的工具可以导入数据

navicat : 点击localhost——运行sql文件

5.最基本的SELECT语句: SELECT 字段1,字段2,...  FROM 表名

SELECT 1+1;

 SELECT 1+1 FROM DUAL;#DUAL伪表

 SELECT * FROM 

#*:表中的所有的字段(或列)

6.列的别名

 select d_id id, d_name  name from bumen;

#as:全称:alias(别名),可以省略

#列的别名可以使用一对""引起来。不要使用''

7.去除重复行

# select DISTINCT birthday from student;

 

8.空值参与运算

#空值:null

#null不等同于0

#空值参与运算

结果还是null

解决方案引入 :ifnull()

9.着重号``

#当表名、字段名和关键字冲突时,坚持使用,要用着重号引用起来

10.查询常数

select 'wang' as corporation, birthday from student;

 11.显示表结构

DESCRIBE student;#显示了表中字段的详细信息

DESC效果一样

 12.过滤数据

#select * from student where sex = 'nan';

#where 写在from结构的后面

3.运算符

1.算术运算符

#加减乘除 + - * /  div     % mod (取模)

 #在sql中,+没有连接的作用,就表示加法。此时,会将字符串转化成数值(隐式转换)

 

2.比较运算符

 2.1 = 等于运算符

       <=>安全等于

        <>   !=不等于

        <    <=      >=    >

#字符串存在隐式转换,如果转换数值不成功,则看作0

#两边都是字符串的话,则按照ANSI的比较规则进行比较

#只要有null参与判断,结果就为null

<=>安全等于,唯一的区别就是可以用来对null进行判断,两边都是null,返回1

2.2比较运算符

# is null \ is not null \ isnull

# LEAST()  \ GREATEST() 最大最小

#(NOT)BETWEEN 条件1(下界) AND条件2(上界)   (查询条件一和条件2范围内的数据,包含边界)

# IN \ NOT IN (set)  离散的查询

# LIKE :模糊查询  %(不确定个数的字符,0个或多个) _(代表一个不确定的字符)

#转义字符:\

#REGEXP \ RLIKE:正则表达式 ^以开头 $结尾

2.3逻辑运算符

# NOT  !    OR ||    AND &&   XOR (异或,追求异)  

#AND的优先级高于OR

2.4位运算符

# & | ^ ~ >>  << 

4.排序与分页

4.1排序

#如果没有使用排序操作,默认情况下查询返回的是先后添加的顺序现实的

#使用ORDER BY对查询的数据进行排序操作   ACS升序  DESC降序

#OEDER BY 默认的按照升序排列

#可以使用列的别名进行排序

#列的别名只能在ORDER BY中使用,不能在WHERE中使用 (sql语句先操作from where,再看select 和 order by)

 

 

 #二级排序,直接在OEDER BY后面加即可

4.2分页

#使用limit实现数据的分页显示

 limit (pageNO - 1)* pageSize,pageSize;

#WHERE ..... ORDER BY ... LIMIT 声明顺序

#limit的格式:严格来说:limit 位置偏移量,条目数

#limit 0,条目数 等价于 limit 条目数

#limit条目数 offset     偏移量

5.多表查询

出现笛卡尔积(交叉连接)的错误:缺少了多表的连接条件 连接条件无效

#多表查询的正确方式:需要有连接条件

#如果查询语句中出现了多个表中都存在的字段,则必须指明此字段所在的表

#建议多表查询时,每个字段前都指明其所在的表

#可以给表起别名,在SELECT和WHERE中使用表的别名,如果起了别名,则一定要使用

#如果有n个表实现多表的查询,则至少需要n-1个连接条件

多表查询的分类:

角度一:等值连接和非等值连接

角度二:自连接和非自连接

角度三:内连接和外连接

内连接:合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行

外连接:合并具有同一列的两个以上的表的行,结果集中除了包含一个表与另一个表匹配的行,还查询到了左表或右表不匹配的行

外连接的分类:左外连接、右外连接、满外连接

#SQL92语法实现外连接:使用 +

#SQL99语法使用JOIN ....ON的方式

#SQL99实现内连接 inner join

#SQL99实现外连接 left / right outer join

满外连接:

#UNION的使用

合并查询结果

UNION 返回两个查询的结果集的并集,并去重(效率低)

UNION ALL 不去重

#7种JOIN的实现

#中图:内连接

#左上图:左外连接

#右上图:右外连接

#左中图:在最后加where 左表条件 is null;

#右中图:在最后加where 右表条件 is null

#左下图:满外连接

方式1:左上图union all 左中图

方式2:左中图union all 左上图

#右下图:左中图 union all 右中图

#SQL99语法新特性:自然连接 natural join :自动查询两张连接表中所有的相同的字段,然后进行等值连接(不够灵活)

#USING连接:当连接表中的字段名一样时,可以使用JOIN ON 可以简化成JOIN ...  USING...

6.函数

从函数的定义分为自定义函数和内置函数

MYSQL的内置函数及分类

数值函数、字符串函数、日期和时间函数、流程控制函数、加密与解密函数、获取MASQL信息函数、聚合函数

总体上分为 单行函数 多行函数

6.1单行函数

round() 四舍五入

truncate() 截断

concat()连接字符串

insert(str,idx,len,replacestr)插入

replace(str,a,b)替换

UPPER/LOWER  大写小写

left(str,n)最左的n个字符返回

LPAD(str,len,pad)字符串pad在左边补充str至n位(实现右对齐)

RPAD(实现左对齐)

TRIM()去除首尾空格

TRIM(s1 from s)去掉s首尾的s1

STRCMP(s1,s2)比较ASCII码

SUBSTR(s,index,len)返回index开始的子字符串

LOCATE(substr,str)返回子字符串首次出现的位置

ELT(m,s1,s2,...)返回第m个字符串

FIELD(s,s1,s2...)返回S在字符串列表中第一次出现的位置

FIELD_IN_SET(s1,s2)返回s1在s2中出现的位置,s2是一个以逗号分隔的字符串

NULLIF(value1,value2)相等返回null,否则返回value1

日期和时间函数

获取日期和时间

CURDATE()   CURTIME()  NOW() SYSDATE() UTC_DATE()

日期和时间戳的转换

UNIX_TIMESTAMP()

EXTRACT(type from date)返回日期特定的部分,type指定返回值

TIME_TO_SEC()时间和秒钟转换的函数

DATE_ADD(datetime,INTERVAL expr type)返回与给定日期时间相差INTERVAL时间段的日期时间

日期的显示格式化与解析

格式化:日期---> 字符串

解析: 字符串 ---> 日期

DATE_FORMAT(date,fmt)按照字符串fmt格式化日期date值

TIME_FORMAT(time,fmt)按照字符串fmt格式化日期time值

%Y 4位数字表示年份 %y两位数字表示年份

%M 月名表示月份   %m两位数字表示月份

%b缩写的月名   %c数字表示月份

%D 因为后缀表中月中的天数  %d两位数字表示月中的天数

%e数字形式表示月中的天数

解析:格式化的逆过程

STR_TO_DATE(str, fmt)

流程控制函数

IF(value, value1, value2) 如果value为true,返回value1,否则返回value2

IFNULL( value1, value2) 如果value1不为NULL,返回value1,否则返回value2

CASE WHEN....THEN....WHEN...THEN.... ELSE....END  类似于JAVA的if else

CASE...WHEN...THEN...WHEN....THEN...ELSE...END 类似switch

加密与解密函数

对数据库的数据进行加密,以防止数据被他人窃取。

PASSWORD(str) 返回字符串str的加密版本。41位长的字符串,不可逆(MASQL 8.0弃用)

MD5() SHA()

ENCODE(VALUE,password_seed)返回使用password_seed作为加密密码加密的value

DECODE(VALUE,password_seed)解密(弃用)

MYSQL信息函数

VERSION()版本号 , CONNECTION_ID()MYSQL服务器的连接数 DATABASE(),  SCHEMA()当前所在的数据库 USER()当前连接MYSQL的用户名,“名@用户名”

CHARSET(value)返回字符串value自变量的字符集

COLLATION(value)返回字符串value的比较规则

其他函数

FORMAT(value,n)返回对数字value进行格式化后的结果数据,n表示四舍五入保留到小数点后n位

CONV(VALUE,from,to)将value的值进行不同进制的转换

INET_ATON(ipvalue)将以点分隔的IP地址转化位一个数字

INET_NTOA(value)数字IP转化为IP地址

BENCHMARK(n,expr)将表达式expr重复执行n此 ,测试MYSQL处理expr所耗费的时间

CONVERT(value USING char_code)将value的字符编码修改为char_code

7.聚合函数

对一组数据进行汇总的函数,返回一个值

7.1常见的聚合函数类型

AVG()  SUM():只适用于数值类型的字段(或变量) (过滤null)

MAX()   MIN():适用于数值类型、日期类型和字符串类型的字段

COUNT():作用计算指定字段在查询结果中出现的个数

如果计算表中有多少条记录:

count(*) 

count(1)

count(具体字段):不一定对,因为不计算空值

#如果使用的是MyISAM引擎   三者的效率一样都是O(1)

#如果使用的是InnoDB存储引擎,count(*) = count(1) > count(字段)

7.2GROUP BY的使用

#需求:查询各个学生的平均成绩

# SELECT中出现的非主函数的字段必须出现在GROUP BY中,反之,不一定

#GROUP BY声明在FROM后面,WHERE后面,ORDER BY前面,LIMIT前面

#with rollup计算总体的一个主函数

#with rollup和order by互斥

7.3HAVING的使用(过滤数据)

#如果过滤条件中使用了聚合函数,则必须使用HAVING来替换WHERE

#HAVING必须声明在GROUP BY的后面

#开发中,HAVING的前提是SQL使用了GROUP BY

#当过滤条件中有聚合函数时,则此过滤条件必须声明在HAVING中

#当过滤条件中没有聚合函数时,建议声明在WHERE中

WHERE和HAVING的对比
        HAVING的适用范围更广

        如果过滤条件没有聚合函数,WHERE(先过滤,在连接)的执行效率要高于HAVING

        

7.4SQL底层执行原理

   SELECT语句的完整结构

SELECT ....,.....,....(存在聚合函数)

FROM ....,(LEFT/RIGHT)JOIN ......, ON  多表的连接条件

WHERE 多表的连接条件 AND 不包含聚合函数的过滤条件

GROUP BY....,.....

HAVING 包含聚合函数的过滤条件

ORDER BY.....,....(ASC / DESC)

LIMIT...,.....

SQL语句的执行过程

FROM ....   -->  ON -> (LEFT/RIGHT JOIN) -> WHERE -> GROUP BY -> HAVING

-> SELECT  -> DISTINCT

-> ORDER BY -> LIMIT

每个步骤都会产生一个虚拟表

8.子查询

将一个查询语句嵌套在另一个查询语句内部的查询

需求:谁的年纪比HAN大

两次交互的时间长

方式2:自连接

方式3:子查询

称谓的规范:外查询(或主查询)、内查询(或子查询)

子查询在主查询之前一次执行完成

子查询的结果被主查询使用

注意事项:子查询要包含在括号内  将子查询放在比较条件的右侧  单行操作符对应单行子查询,多行操作符对应多行子查询

子查询的分类:

角度1:分为单行子查询和多行子查询:从内查询返回的结果的条目数

角度2:分为相关子查询 和 不相关子查询:内查询是否被执行多次

比如:相关子查询的需求:查询工资大于本部门平均工资的员工信息

        不相关子查询的需求:查询工资大于本公司平均工资的员工信息

#单行子查询:

单行操作符:  =  !=  >  >=     <   <=

题目:查询birthday比  id  8001的员工大的信息

子查询额编写技巧(或步骤): 从里往外写  从外往里写

SELECT BIRTHDAY FROM YUANGONG WHERE ID = 8001

SELECT ID, BIRTHDAY FROM YUANGONG WHERE BIRTHDAY >

串起来

 #子查询中的空值问题

#非法使用子查询

多行子查询

操作符:IN 等于列表中的任意一个

              ANY 需要和单行比较操作符一起使用,和子查询返回的某一个值比较

              ALL 需要和单行比较操作符一起使用,和子查询返回的所有值比较

              SOME 实际上是ANY的别名,一般使用ANY

举例:

#IN

找到每门课考的最差的学生的id

 #ANY

 #ALL

查询平均分数最低的id

MYSQL中聚合函数不能嵌套使用

取别名

不相关子查询:

在SELECT查询中,除了GROUP BY和LIMIT外,其他位置都可以声明子查询

EXISTS 和 NOT EXISTS关键词的使用

自连接的方式好,处理速度比子查询快

9.创建和管理表

数据存储过程:创建数据库 —— 确认字段——创建数据表——插入数据

创建数据库:

CREATE DATABASE IF NOT EXISTS

管理数据库

查看当前连接中的数据库都有哪些

show databases

切换数据库

use

查看当前数据库中都有哪些数据表

show tables

查看当前使用的数据库

select database()  from dual

查看指定数据库下保存的数据表

show tables from mysql

#修改数据库

#更改字符集

ALTER DATABASES 数据库名 CHARACTER SET ' '

#数据库不能改名,可视化工具中是通过复制旧表实现改名

#删除数据库

DROP DATABASE

DROP DATABASE IF EXISTS

创建数据表

#方式1:

 查看表结构

 方式2:基于现有的表(查询语句中字段的别名可以作为新创建的表的字段的名称)

复制表不需要数据,可以设置一个筛选条件

 #修改表 ---- ALTER  TABLE

DESC

#添加一个字段

ALTER TABLE 表名 ADD 字段 数据类型#默认添加到表中的最后一个字段

ALTER TABLE 表名 ADD 字段 数据类型 FIRST;放到第一个

#修改一个字段:数据类型、长度、默认值

ALTER TABLE 表名 MODIFY 字段 数据类型 DEFAULT '默认值'

#重命名一个字段

ALTER TABLE CHANGE 字段名 新的字段名 数据类型

#删除一个字段

ALTER  TABLE 表名 DROP COLUMN 字段名

#重命名表

方式一:RENAME TABLE  TO

方式二:ALTER TABLE RENAME TO

#删除表:不光将表结构删除,同时表中的数据也删除,释放表空间

DROP TABLE IF EXISTS

#清空表:删除表中的所有数据,但表结构保留

TRUNCATE TABLE

#DCL 中 COMMIT 和ROLLBACK

COMMIT:提交数据,一旦执行COMMIT,数据就被永久保留在数据库中,意味着数据不可以回滚

ROLLBACK:回滚操作。一旦执行,就可以实现数据的回滚,回滚到最近的一次COMMIT之后

#对比TRUNCATE和DELETE FROM

相同点:都可以实现对表中所有数据的删除,同时保留表结构

不同点:TRUNCATE TABLE:一旦执行此操作,表数据全部清除,同时,数据是不可以回滚的

              DELETE FROM:一旦执行此操作,表数据可以全部清除,同时,数据是可以回滚的(不带where)

DCL 和 DML 的说明

1.DDL的操作一旦执行,就不可回滚; DML的操作默认情况下,一旦执行,也是不可以回滚的,(因为在DDL之后,一旦会操作一次commit)但是如果在执行DML之前,执行了SET autocommit = FALSE,则执行的DML操作就可以实现回滚

MYSQL8.0  DDL的原子性:要么成功要么回滚

第10章数据处理之增删改

0.储备工作

1.添加数据

方式1:一条一条的添加数据

一、没有指明添加的字段

注意:一定要按照声明的字段的先后顺序添加

 二、指明要添加的字段(推荐)

没有进行赋值的字段为null

 三、同时插入多条记录

方式2:将查询结果插入到表中

查询的字段一定要与添加到的表的字段一一对应

 说明:要添加数据的字段不能低于查询字段的长度,否则会有添加不成功的风险

2.更新数据

UPDATE....SET....WHERE...

可以实现批量修改数据

 同时修改一条数据的多个字段

修改数据时,是可能存在不成功的情况的(可能由于约束造成)

3.删除数据

DELETE FROM .... WHERE...

小结:DML操作默认情况下,执行完以后都会自动提交数据,如果希望执行完以后不自动提交数据,则需要使用SET  autocommit = false

MYSQL8新特性:计算列

 

 

第11章MySQL数据类型精讲

关于属性:CHARACTER SET NAME

创建数据库时指明字符集

创建表的时候,指明表的字符集

创建表,指明表中的字段时,可以指定字段的字符集

1.整数类型

 可选属性:M宽度 ,配合ZEROFILL,当不足M时,用0填充

                UNSIGNED 无符号

                

2.浮点类型

float表示单精度浮点数

double双精度浮点数

非标准语句:FLOAT(M,D) DOUBLE(M,D) M称为精度,D称为标度,(M,D)中M=整数位+小数位,D=小数位

浮点数的精度问题:浮点数是不正确的,要避免使用“=”来判断两个数是否相等

3.定点数类型(精准的)

DECIMAL(M,D),DEC,  M+2字节

底层由字符串形式存储的

4.位类型BIT

存储的是二进制值,类似010101

5.日期与时间类型

 6.文本字符串类型

7.二进制字符串类型:存储一些二进制数据:图片、音频和视频等

分为BINARY与VARBINARY类型

BOLB存放二进制大对象

8.JSON

第12章 约束

为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制。从以下四个方面进行考虑:实体完整性、域完整性、引用完整性和用户自定义完整性

什么叫约束:对表中字段的限制

约束的分类:角度1:约束的字段的个数:单列约束VS多列约束

                     角度2:约束的作用范围:列级约束:声明此约束时声明在对应字段的后面

                                                              表级约束:在表中所有字段都声明完,在所有字段的后面                                                                                                                                   声明的约束

                     角度3:约束的作用(功能):1.not null(非空约束)2.unique(唯一性约束)3.primary key(主键约束)4.foreign key(外键约束)5.check(检查约束)6.default(默认值约束)

如何添加约束:在CREATE TABLE添加约束

                         在ALTER TABLE时增加约束、删除约束

如何查看表中的约束

SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS

WHERE TABLE_NAME = '表名称';

not null(非空约束)

建表时 CREAT TABLE  表名称(

                                                   字段名   数据类型   not null ,

                                                    字段名   数据类型   not null  )

在ALTER TABLE时增加约束、删除约束

ALTER TABLE  表名

MODIFY 字段名 数据类型 not null

ALTER TABLE  表名

MODIFY 字段名 数据类型  null

唯一性约束unique

建表时 CREAT TABLE  表名称(

                                                   字段名   数据类型   not null  UNIQUE,#列级约束

                                                    字段名   数据类型   not null 

                                                    #表级约束

                                                        CONSTRAINT uk_表名称_字段名 UNIQUE(字段名))

在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同

可以向声明为UNIQUE的字段上添加null值,而且可以多次添加null

在ALTER TABLE时增加约束、删除约束

方式一:

ALTER TABLE  表名

ADD CONTRAINT 别名  UNIQUE(字段名)

方式二:

ALTER TABLE  表名

MODIFY 字段名 数据类型 UNIQUE

复合的唯一性约束

CREATE TABLE USER(

id INT,

`name`  VARCHAR(15),

`password` VARCHAR(25),

#表级约束

CONTRAINT uk_user_name_pwd UNIQUE(`name`,`password`))

删除UNIQUE约束

添加唯一性约束的列上也会自动创建唯一索引

删除唯一约束只能通过删除唯一索引的方式删除

删除时需要指定唯一索引名,唯一索引名就和唯一约束名一样

如果创建唯一约束时未指定名称,如果是单列,就默认和列名相同;如果是组合列,那么默认和()中排在第一个的列名相同,也可以自定义唯一性约束名

#如何删除

ALTER TABLE 表名

DROP INDEX 索引名

)

PRIMARY KEY约束

一个表最多只能有一个主键约束

主键约束特征:非空且唯一,用于唯一的标识表中的一条记录                                                    

CREATE TABLE USER(

id INT PRIMARY KEY,#列级约束

`name`  VARCHAR(15),

`password` VARCHAR(25))

CREATE TABLE USER(

id INT,

`name`  VARCHAR(15),

`password` VARCHAR(25),

#表级约束

CONSTRAINT 别名(没有必要取名字) PRIMARY KEY(字段名))

在ALTER TABLE时添加约束

ALTER TABLE 表名

ADD PRIMARY KEY(字段名)

ALTER TABLE 表名

DROP PRIMARY KEY;

(实际开发中不会删除主键元素)

自增列:AUTO_INCREMENT

作用:某个字段的值自增

要求:(1)一个表最多只能有一个自增列 (2)当需要产生唯一标识符或顺序值时,可设置自增长(3)自增长列约束的列必须是键列(主键列,唯一键列) (4)自增约束的列的数据类型必须是整数类型 (5)如果自增列指定了0和null,会在当前最大值的基础上自增;如果自增列手动指定了具体值,直接赋值为具体值

MYSQL8.0新特性:自增变量持久化

FOREIGN KEY约束

作用:限定某个表的某个字段的引用完整性

主表和从表/父表和子表

特点:从表的外键列,必须引用、参考主表的主键或唯一约束的列

在创建建外约束时,如果不给外键约束命名,默认名不是列名,而是自动产生一个外键名,也可以指定外键约束名

创建表时就指定外键约束的话,先创建主表,再创建从表

删表时,先删除从表,在删除主表

当主标的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依赖该记录的数据,然后才可以删除主表的记录

在主表中指定外键约束,并且一个表可以建立多个外键约束

从表的外键列与主表被参照的列名字可以不相同,但是数据类型必须一样,逻辑意义一致

当创建外键约束时,系统默认会在所在的列上建立对应的普通索引

删除外键约束后,必须手动删除对应的索引

结论:对于外键约束,最好是采用: `ON UPDATE CASCADE ON DELETE RESTRICT`的方式

开发中:不得使用外键和级联

CHECK约束

检查某个字段的值是否符合xx要求,一般指的是值的范围

create table(

id INT,

salary DECIMAL(10,2)  CHECK(salary > 2000)

)

DEFAULT约束

CREATE TABLE(

id INT DEFAULT 2000

建表时加 not null default 或 default 0

第13章视图

1.常见的数据库对象

 为什么要使用视图?

帮我们使用表的一部分而不是全部的表,另外针对不同的用户制定不同的查询视图

视图的理解:

视图是一种虚拟表,本身不具有数据的,占用很少的内存,建立在已有表的基础上,视图赖以建立的这些表称为基表,对视图做DML操作,会影响对应的基表中的数据,反之亦然。

视图本身的删除,不会导致基表中数据的删除

视图的应用场景:针对小型项目,不推荐使用视图,针对大型项目,可以考虑使用视图

视图的本质可以看作是存储起来的SELECT语句

视图的优点:简化查询;控制数据的访问

创建视图:

针对于单表:

CREATE VIEW 视图名称

AS 查询语句

 查看视图

语法1:查看数据库的表对象、视图对象

SHOW TABLES;

查看视图的结构

DESCRIBE 视图名称

查看视图的属性信息

SHOW TABLE STATUS LIKE  `视图`

查看视图的详细定义信息

SHOW CREATE VIEW 视图名称

更新视图的数据会导致基表中数据的修改,同理更新表中的数据也会导致视图的修改

(不建议更新视图中的数据,对视图的修改都是通过对实际数据表里数据的操作来完成的)

第14章存储过程和存储函数

含义:存储过程就是一组经过预先编译的SQL语句的封装

执行过程:存储过程预先存储在MySQL服务器上,需要执行的时候,客户端只需要向服务器。发出调用存储过程的命令,服务器端就可以把预先存储好的这一系列SQL语句全部执行

视图是虚拟表,二存储过程是程序化的SQL,可以直接操作底层数据表,相比于面向集合的操作方式,能够实现一些更复杂的数据处理。

创建存储过程

CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,...)

[characteristics...]

BEGIN

        存储过程体

END

第15章变量、流程控制和游标

系统变量分类:系统变量(全局系统变量、会话系统变量) VS 用户自定义变量

查看系统变量:

#查看全局系统变量

SHOW GLOBAL VARIABLES

#查询会话系统变量

SHOW SESSION VARIABLES

SHOW VARIABLES#默认查询的是会话系统变量

#查询部分系统变量

SHOW GLOBAL VARIABLES LIKE 'admin_%'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值