关卡17:数据库

mysql数据库
    一、数据库相关概念
        1.数据库好处
            (1)持久化数据到本地
            (2)可以实现结构化查询,方便管理
        2.数据库的相关概念
            (1)DB(database):数据库,保存一组有组织的数据容器
            (2)DBMS(Database Management System)**:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据,常见DBMS:MySQL、Oracle、DB2、SqlServer等
            (3)SQL:结构化查询语言,用于和数据库通信的语言
        3.SQL语言
            (1)DML(Data Manipulate Language)**:数据操纵语言,用于添加、删除、修改数据库记录,并检查数据完整性
关键字:insert, delete, update 等
            (2)DDL(Data Define Languge):数据定义语言,用于库和表的创建、修改、删除    关键字:create, drop,alter等
            (3)TCL(Data Control Language):数据事务语言
            (4)DQL(Data Query Language):数据查询语言,用来查询数据库中表的记录(数据)
关键字:select, where 等
        4.数据库存储的特点
            (1)数据存放到表中,然后表再放到库中
            (2)一个库中可以有多张表,每张表具有唯一的表名标识自己
            (3)表中有一个或多个列,列又称为“字段”,相当于Java中的“属性”
            (4)表中的每一行数据相当于Java中的对象
    二、mysql相关知识点
        1.mysql常见的命令
            (1)查看当前所有的数据库:show databases;
            (2)打开指定的库: use 库名
            (3)查看当前库的所有表: show tables;
            (4)查看其他库的所有表:show tables from 表名;
            (5)创建表:create table 表名(  列名 列类型,列名 列类型 ...)
            (6)查看表结构:desc 表名;
            (7)查看服务器版本:mysql --V或mysql --version
        2.mysql语法规范
            (1)不区分大小写,建议关键字大写
            (2)使用英文分号结尾
            (3)各子句一般分行写
            (4)关键字不能缩写也不能分行
            (5)合理使用缩进
            (6)注释
                ①单行注释:#注释文字
                ②单行注释:-- (空格)注释文字
                ③多行注释:/*注释文字*/
        3.mysql的背景:前身属于瑞典的一家公司,mysql AB,08年被sun公司收购,09年sun被Oracle收购
        4.mysql的优点
            (1)开源、免费、成本低
            (2)性能高、移植性好
            (3)体积小,便于安装
    三、DQL(数据查询语言)
        1.查询所有的记录
            select * from 表名
        2.基础查询
            (1)多个字段(属性)查询: select 字段名1,字段名2...from 表名;
            (2)去除重复:distinct    (select distinct 字段名 from 表名)
            (3)计算列
                一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
                ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
                     表达式1:哪个字段需要判断是否为null
                    如果该字段为null后的替换值
            (4)起别名
                as    (select concat (‘a’,'b','c')As 结果)
        3.条件查询
            (1)按条件表达式筛选
                条件运算符:>,<,=,<>(!=),>=,<=
            (2)逻辑表达式筛选
                逻辑运算符:and,or,not
            (3)模糊查询
                复杂条件:like,betwee and,in,is null
            (4)安全等于
                <=>:可用于判断null也可用于判断数值类型
        4.排序查询
            (1)asc代表升序,desc代表降序,如果不写默认为升序 
            (2)order by子句中可以支持单个字段、多个字段、表达式、函数、别名
            (3)order by子句一般是放在查询语句最后面,limit子句除外
        5.常见的函数查询
            (1)概念:类似于Java中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名
            (2)好处:①隐藏了实现细节;②提高了代码的复用性
            (3)调用:select 函数名(实参列表)【from  表名】
            (4)特点:①函数名;②函数功能
            (5)分类:
                ①单行函数;如:cancat,length,ifnull
                ②分组函数;功能:做统计使用,又称为统计函数、聚合函数、组合函数
        6.单行函数
            (1)字符函数
                ①length;获取字符串长度
                ②concat拼接字符串
                ③upper 将字符变为大写,lower将字符变为小写
                ④substr、substring字符串截取
                ⑤instr指定元素在字符串中第一次出现的位置,找不到返回0
                ⑥trim去除字符串中前后空格
                ⑦lpad用指定的字符左填充到指定长度
                ⑧rpad用指定的字符有填充到指定的长度
            (2)数学函数
                ①round四舍五入
                ②ceil向上取整,返回大于等于该参数的最小整数
                ③floor向下取整,返回小于等于该参数的最大整数
                ④truncate截断,根据第二个参数(n)的数据截取第一个数据,从第n位后全部舍掉
                ⑤mod取余,被除数为负结果就为负
            (3)日期函数
                ①now返回当前的系统日期加时间
                ②curdate返回系统当前的日期不加时间
                ③curtime返回系统当前的时间不加日期
                ④str_to_date;将字符串通过指定的格式转换为日期
                ⑤date_format将日期通过指定格式转换成字符型
            (4)其他函数:version(),database(),user
            (5)流程控制函数
                ①if函数;select if(10>5,'大','小');
                ②case函数
        7.分组函数
            (1)分类:sum 求和,avg平均值,max最大值,min最小值,count计算个数
            (2)特点:
                ①sum,avg用于处理数据类型;max,min,count可以处理任何数据类型
                ②以上分组函数全都忽略null值
                ③可以与distinct(去重)搭配使用
                ④count函数:计算非空个数,count(*)或count(1)计算表的行数
                ⑤和分组函数一同查询的字段要求是group by后的字段
        8.分组查询
            (1)语法:selsect 分组函数,列(按什么分组就是什么,要求出现在group by的后面)from 表 【where 筛选条件】group by 分组列表 【order by 子句】
            (2)注意 :查询列表必须特殊,要求是分组函数和group by后出现的字段
            (3)特点:分组查询中的筛选条件分为两类
                ①筛选数据来自表中直接用where判断
                ② 筛选条件来自分组后计算后的结果在group by后用having连接
                ③分组函数做条件一定放在having子句中
        9.连接查询
            内连接:等值连接、非等值连接、自连接
            外连接:左外连接,右外连接,全外连接(全外连接结果=内连接结果+主表中有的从表中没有的+从表中有的主表中没有的)
            交叉连接
            (1)sql92标准
                ①等值连接:多表等值连接结果为多表的交集部分
                ②n表连接需要n-1条连接条件
                ③多表顺序可变
                ④一般为了区分字段需要为表起别名
                ⑤可以添加之前所学过的分组查询以及排序使用
                ⑥支持内连接,以及部分外连接
            (2)sql99标准
                ①支持内连接以及外连接(左外left[outer]、右外rigth[outer])
                ②外连接:外连接结果=内连接结果+主表中有而从表中没有的且显示为null
                ③左外连接:left join左边为主表
                ④右外连接:right join右边为主表
                ⑤full两边都为主表
        10.子查询
            ①含义:出现在其他语句中的select语句,称为子查询或内查询
            ②外部的查询称为主查询或外查询
            ③分类
                标量子查询(结果只有一行一列)
                列子查询(结果为一列多行)
                行子查询(结果为一行多列)
                表子查询(一般结果为多行多列)
            ④select后面仅仅支持标量子查询,from后面支持表子查询(要求子查询充当一个表必须取别名),where或having后面支持标量子查询、列子查询和行子查询,exists(相关查询)支支持表子查询
            ⑤where或having后面特点:子查询必须放在小括号内;子查询一般放在条件右侧;标量子查询一般搭配着单行操作符使用;列子查询一般搭配着多行操作符使用(IN,ANY/SOME,ALL,NOT IN);子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果
            ⑥单行操作符:>,<,>=,<=,<>
        11.分页查询
            (1)应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求
            (2)特点:
                ①limit写在查询语句的最后
                ②公式:要显示的页数 page,每页的条目数size;   limit(page-1)*size,size;
                ③从0开始索引
        12.联合查询
            (1)union联合查询:合并将多条查询语句的结果合成一个结果
            (2)应用场景:要查询的结果来自于多个表且多个表没有直接的连接关系,但是查询的信息一致时
            (3)特点:
                ①要求多条查询语句的查询列数是一致的
                ②要求多条查询语句的查询的每一列类型和顺序最好一致
                ③union默认去重,如果使用union all可以包含重复项
    四、DDL(数据定义语言)与DML(数操纵语言)
        (一)DML:插入 insert、修改 update、删除 delete
            1.insert
                (1).方式一:insert into 表名(列名,...) value(值1,...),value(值1,...)...
                (2).插入的值的类型必须与列的类型一致或兼容
                (3).列之间的顺序可以调换
                (4).列的个数与值的个数要相同
                (5).可以省略列名,默认为所有列,顺序默认为表中的顺序   insert into 表名 value(值1,...)
                (6).方式二:insert into 表名  set 列名=值,列名=值,...
            2.update
                update 表名 set 列名=新的值
        (二)DDL
            1.库的管理
                (1)库的创建: create database 库名
                (2)库的修改:库名不能直接修改,因为不安全;可以修改字符集: alter database 库名 character set gbk
                (3)库的删除:drop database if exists 库名;
                (4)show tables;查看当前库的表
            2.表的管理
                (1)表的创建:create table 表名(列名 列的类型[(长度)约束条件,....],....)
                (2)desc book;查看当前表的的结构
                (3)表的修改
                    ①修改列名:alter table 表名 change column 原列名 新列名 datetime;
                    ②修改列的类型或约束:alter table 表名 modify column 列名 新的类型或约束
                    ③删除列:alter table 表名 drop clumn 列名;不能写if exists
                    ④添加列:alteer table 表名 add column 添加列名 数据类型;
                    ⑤修改表名:alter table 表名 rename to 新表名;
                    ⑥表的删除:drop table if exists 表名;
                (4)表的复制
                    ①仅仅复制表的结构:create table 新表名 like 复制文件的表名
                    ②复制表的结构加数据:create table 新表名 select * from 数据表名
                    ③只复制部分数据:create table 新表名 select *from 数据表名 where 复制条件
                    ④仅仅复制部分字段:create table 新表名 select 字段名,字段名 from 数据表名 where 0
                (5)常见的数据类型
                    ①整数型:tinyint,smallint,mediumint,int、interger,bigint
                    ②创建表时没有写unsigned默认为有符号数,写了为无符号数;插入的数值超出数据范围,会报异常并且插入临界值;如果没有设置数据长度怎么填入就怎么显示,如果设置了长度必须搭配 zerofill使用,不足自动用0填充 zerofill默认为无符号

                    ③小数:定点数dec(M,D);decimal(M,D) ,浮点数:float(M,D),double(M,D) ;其中M代表整数部分加小数部分总长度(超出插入临界值),D代表小数部分的长度(超出则四舍五入)M和D均可省略,decimal省略默认为(10,0),定点数的精确的较高
                    ④字符型:较短文本:char,varchar;较长的:text,blob(较长的二进制数据);其他:binary和varbinary(用于保存较短的二进制数据),enum(用于保存枚举)
                    ⑤日期型:date(日期),datetime(日期加时间,范围(1000-9999)),timestamp(日期加时间,范围(1970-2038)),time(时间),year(年)
                (6)常见约束
                    ①含义:一种限制用于限制表中数据,为了保证表中数据的准确性和可靠性
                    ②not null:非空约束,表示该字段不能为空
                    ③default默认约束,用于保证该字段没有输入值时,给出一个默认值
                    ④primary key主键:用于保证该字段的唯一性,并且非空,便于查找
                    ⑤unique:唯一约束,用于保证该字段的数据是唯一的,可以为空
                    ⑥check:检查约束,mysql中不支持,检查值是否为设定的值
                    ⑦foreign key:外键:用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表中添加外键约束,用于用主表中的某列值;从表中的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求;主表的关联列必须是一个key(一般是主键或唯一)
                (7)标识列
                    ①含义:又称自增长列,可以不通过手动插入值,系统提供默认的序列值
                    ②表示要求与key搭配使用,一个表中只能有一个标识,表示的数据只能是数值型
                    ③可以通过:set auto_increment_increment=整数,修改每次增长的值
    五、TCL(数据事务语言)
        1.事务:一个或多个sql语句组合成的一个执行单元,这个执行单元中的sql语句要么全都不执行,要么全都执行
        2.事务的属性
            (1)原子性:指事务是一个不可在分割的最小单元,事务中的操作要么全都执行要么全都不执行
            (2)一致性:指事务的数据一致一个状态转换为另一个一致状态
            (3)隔离性:指一个事物的内部操作以及数据,不受其他并发事务的影响,并发事务之间不能互相干扰
            (4)持久性:指一个事物一旦提交,它所对应的数据库中的数据将是永久性修改,接下来的其他操作或数据库故障不应该对其有任何影响
        3.事务的创建
            (1)隐式事务:事务没有明显的开始和结束标志  update 表名 set salaer=1000 where name='张三丰'
            (2)显示事务:事物具有明显的开启和结束标记,前提 步骤一:必须关闭自动提交功能  set autocommit=0   ;步骤二:开启事务 start transaction; 步骤三:隐式语句; 步骤四:结束事务commit  或回滚事务: rollback;
        4.事务隔离级别
            (1)产生原因:事务并发时产生,就是当多个事务同时操作同一个数据库中的数据时所产生的
            (2)类别
                ①脏读:一个事务读取到另外一个没有提交的事务处理数据
                ②不可重复读:同一个事务之中,多次读到的数据不一致
                ③幻读:一个事务读取数据时,另外一个事务进行更新中,导致第一个事务读到的数据没有更新
        5.设置事务隔离级别
            (1)READ UNCOMMITIED:允许出现所有并发问题(脏读、不可重复读、幻读)
            (2)READ COMMITEO:可以避免脏读问题,但其他并发问题依然存在(不可重复读、幻读)
            (3)REPEATABLE READ:可以避免脏读和不可重复读的问题,但幻读还是依然存在
            (4)SERIALIIABLE:所有的并发问题都可以处理,但性能很低
            (5)oracle支持(1)、(4)默认为(2);MySQL全支持默认为:(3)
    六、视图
        1.定义:是一个虚拟表,数据由使用表动态生成,只保存了sql逻辑,不保存查询结果,和表的使用一样
        2.应用场景:
            (1)多个地方用到同样的查询结果
            (2)该查询结果使用的sql语句较复杂
        3.好处:
            (1)重用了sql语句
            (2)简化了复杂的sql操作
            (3)保护了数据库中数据安全,提高了安全性以及多处可以调用,提高了sql语言的复用性
        4.视图的创建:create view 视图名 as 查询语句
        5.查看视图:select * from 视图名;
        6.视图的修改
            (1)create or replace view 视图名 as 查询语句;(存在修改,不存在创建)
            (2)alter view 视图名 as 查询语句;
        7.删除视图:drop view 视图名1,视图名2...;
        8.查看视图的结构
            (1)desc 视图名;
            (2)show create view 视图名;(在命令行窗口查看)
        9.视图的更新:
            (1)插入:insert into 视图名 values(值1,值2..)
            (2)修改:update 视图名 set 字段名=值 where 字段名=值;
            (3)删除:delete from 视图名 where 字段名= 值; 上面几种更新都会修改原始表中的数据
            (4)以下几种及情况是不允许更新的
                ①包含:分组函数,distinct,group by,having,union 或者union all
                ②常量视图
                ③select中包含了子查询
                ④语句中包含了join,不能插入
                ⑤from(使用)一个不能更新的视图
                ⑥where子句的子查询引用到了from子句中的表
    七、变量
        1.系统变量
            (1)定义:由系统提供,不是用户自定义属于服务器层面
            (2)类别:全局变量 ,会话变量
                ①全局变量作用域:服务器每次启动将所有的全局变量赋值,针对于所有的会话(连接)有效,但不能跨重启
                ②会话变量作用域:仅仅支持当前会话
            (3)注意:如果是全局级别,则需要加global,如果是会话级别,则需要加session,如果不写默认为session
            (2)语法
                ①查看所有的系统变量:show global|[session] variables;
                ②查看满足条件的部分系统变量:show global|[session] variables like '%char%';
                ③查看指定的某个系统变量的值:select @@global|[session].系统变量名;
                ④为系统变量赋值:set global|[session] 系统变量名=值;       set @@global|[session].系统变量名=值;
        2.自定义变量
            (1)定义:变量是用户自定义的,不是由系统提供
            (2)类别:用户变量 ,局部变量
                ①用户变量作用域:只针对当前会话有效,同于会话变量作用域一样
                ②局部变量作用域 :仅仅只在定义它的degin end中有效,应用在degin end中且为第一句
            (3)用户变量使用步骤
                ①声明初始值:set @用户变量名=值;或set @用户变量名:=值;或select @用户变量名:=值;
                ②赋值(更新用户变量的值):方法一:①中的三种方法; 方法二:通过select 字段名 into 变量名 from 表名;
                ③使用(查看用户变量的值):select @用户变量名;
            (4)局部变量使用步骤
                ①声明:declare 变量名 类型;或 declare 变量名 类型 default 值;
                ②赋值:方式一与局部变量相同;方式二:通过select 字段名 into 局部变量名 from 表;
                ③使用 :select 局部变量名;
    八、存储过程和函数
        1.好处
            (1)提高了代码的重用性
            (2)简化操作
            (3)减少了编译次数并且减少了和数据库服务器的链接次数提高了效率
        2.存储过程
            一组预先编译好的sql语句的集合,理解成批量处理语句
        3.存储过程
            (1)创建语法:delimiter $  create procedure 存储过程名(参数列表) begin 存储过程体  end $
            (2)注意参数列表包含三部分:参数模式  参数名  参数类型 
            (3)参数模式:
                ①in:该参数可以作为输入,也就是才参数需要调用方传入
                ②out:该参数可以作为输出,也就是可以作为返回值
                ③inout:该参数既可以作为输入也可以作为输出,也就是可以传入值也可以作为返回值
            (4).注意:如果存储过程体仅仅就一句语句,begin end可以省略;存储过程体中每条sql语句的结尾要求加上分号,存储过程的结尾可以使用delimiter重新定义结束标记
            (5)调用语法:call存储过程名(实参列表)$;
            (6)删除存储过程:drop procrdure 存储过程名,...;
            (7)查看存储过程中的信息:desc 存储过程名;*    show creat procedure 存储过程名
        4.函数
            (1)与存储过程的区别:存储过程可以有多个或者零个返回值,适合批量插入批量更新;函数有且仅有一个返回值,适合做处理数据后返回一个结果
            (2)创建语法:create function 函数名(参数列表) retums 返回值类型  begin  函数体  end
            (3)注意:参数列表包含两个部分: 参数名  参数类型
            (4)函数体:肯定会有返回值(return返回语句),如果没有不会报错,如果return语句没有放在函数体的最后也不会报错,但不建议
            (5)return 值 函数体中有且仅有一句话,则可以省略 begin end  ,使用delimiter语句设置结束标记;
            (6)调用语法:select 函数名(参数列表)
            (7)查看函数:show create function 函数名;
            (8)删除函数:drop function 函数名
    九、流程控制结构
        1.分类
            (1)顺序结构:程序从上往下依次执行
            (2)分支结构:程序从两条或多条路径中选择一条执行
            (3)循环结构:程序在满足一定条件的基础上重复执行一段代码

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340