精华内容
下载资源
问答
  • TP5 Echarts图使用

    千次阅读 2019-08-30 11:31:21
    你可以通过几种方式获取 ECharts。 ... ... ... 从官网下载界面选择你需要的版本下载... data: [5, 20, 36, 10, 10, 20] }] }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option); 运行结果:

    你可以通过几种方式获取 ECharts。
    https://www.echartsjs.com/zh/download.html
    https://echarts.baidu.com/dist/echarts.min.js
    https://echarts.baidu.com/dist/echarts.js
    从官网下载界面选择你需要的版本下载,根据开发者功能和体积上的需求,我们提供了不同打包的下载,如果你在体积上没有要求,可以直接下载完整版本。开发环境建议下载源代码版本,包含了常见的错误提示和警告。
    引入 ECharts

    ECharts 3 开始不再强制使用 AMD 的方式按需引入,代码里也不再内置 AMD 加载器。因此引入方式简单了很多,只需要像普通的 JavaScript 库一样用 script 标签引入。

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <!-- 引入 ECharts 文件 -->
        <script src="echarts.min.js"></script>
    </head>
    </html>
    

    绘制一个简单的图表

    在绘图前我们需要为 ECharts 准备一个具备高宽的 DOM 容器。

    然后就可以通过 echarts.init 方法初始化一个 echarts 实例并通过 setOption 方法生成一个简单的柱状图,下面是完整代码。
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>ECharts</title>
        <!-- 引入 echarts.js -->
        <script src="echarts.min.js"></script>
    </head>
    <body>
        <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
        <div id="main" style="width: 600px;height:400px;"></div>
        <script type="text/javascript">
            // 基于准备好的dom,初始化echarts实例
            var myChart = echarts.init(document.getElementById('main'));
    
            // 指定图表的配置项和数据
            var option = {
                title: {
                    text: 'ECharts 入门示例'
                },
                tooltip: {},
                legend: {
                    data:['销量']
                },
                xAxis: {
                    data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
                },
                yAxis: {},
                series: [{
                    name: '销量',
                    type: 'bar',
                    data: [5, 20, 36, 10, 10, 20]
                }]
            };
    
            // 使用刚指定的配置项和数据显示图表。
            myChart.setOption(option);
        </script>
    </body>
    </html>
    

    运行结果:
    在这里插入图片描述

    展开全文
  • tp6学习第

    2020-04-10 21:39:08
    public function index(){ # 添加数据 $data = ['cat'=>'2','title'=>'美特斯邦威七分牛仔女2018夏季新款中腰修身洗水牛仔商场款','price'=>'49.90','add_time'=>1576080000]; $save = Db::table('shop_goods')...

    ThinkPHP6 数据库
    ThinkPHP6 数据库和模型操作已经独立为ThinkORM库
    要使用Db类必须使用门面方式( think\facade\Db )调用
    数据库操作统一入口: Db::
    一、数据库管理软件
    1,phpMyAdmin(网页数据库管理)
    2,Navicat for MySql(windows软件数据库管理)

    二、创建数据库
    1、管理员表

    CREATE TABLE `shop_admin` (
        `uid` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',
        `account` varchar(50) NOT NULL COMMENT '账户',
        `password` char(32) NOT NULL COMMENT '密码',
        `name` varchar(50) NOT NULL COMMENT '姓名',
        `status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '状态 1开启 2关闭',
        `add_time` int(10) unsigned NOT NULL COMMENT '添加时间',
        PRIMARY KEY (`uid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='后台管理员';
    
    INSERT INTO `shop_admin` VALUES (1, 'ouyangke', 'e10adc3949ba59abbe56e057f20f883e', '欧阳克', 1, 1576080000);
    

    2、商品分类表

    DROP TABLE IF EXISTS `shop_cat`;
    CREATE TABLE `shop_cat` (
        `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
        `name` varchar(50) NOT NULL COMMENT '分类名',
        `status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '状态 1开启 2关闭',
        PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COMMENT='分类表';
    
    INSERT INTO `shop_cat` VALUES (1, '女装', 1);
    INSERT INTO `shop_cat` VALUES (2, '男装', 1);
    INSERT INTO `shop_cat` VALUES (3, '孕产', 1);
    INSERT INTO `shop_cat` VALUES (4, '童装', 1);
    INSERT INTO `shop_cat` VALUES (5, '电视', 1);
    INSERT INTO `shop_cat` VALUES (6, '手机', 1);
    INSERT INTO `shop_cat` VALUES (7, '电脑', 1);
    

    3、商品表

    CREATE TABLE `shop_goods` (
        `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT ' 商品ID',
        `cat` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '分类ID',
        `title` varchar(200) NOT NULL COMMENT '商品标题',
        `price` double(10,2) unsigned NOT NULL COMMENT '价格',
        `discount` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '折扣',
        `stock` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '库存',
        `status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '状态 1开启 2关闭 3删除',
        `add_time` int(10) unsigned NOT NULL COMMENT '添加时间',
        PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
    
    INSERT INTO `shop_goods` VALUES (1, 1, '云朵般轻盈的仙女裙 高级钉珠收腰长裙 气质无袖连衣裙', 279.99, 0, 1100, 1, 1576080000);
    INSERT INTO `shop_goods` VALUES (2, 1, '高冷御姐风灯芯绒a字连衣裙女秋冬2019年新款收腰显瘦复古裙子', 255.90, 0, 100, 1, 1576080000);
    

    4、菜单表

    CREATE TABLE `shop_menu` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
      `title` varchar(50) NOT NULL COMMENT '菜单名',
      `fid` int(10) NOT NULL COMMENT '父ID',
      `status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '状态 1开启 2关闭',
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COMMENT='左侧菜单表';
    
    INSERT INTO `shop_menu` VALUES (1, '商品管理', 0, 1);
    INSERT INTO `shop_menu` VALUES (2, '商品列表', 1, 1);
    INSERT INTO `shop_menu` VALUES (3, '商品分类', 1, 1);
    INSERT INTO `shop_menu` VALUES (4, '用户管理', 0, 1);
    INSERT INTO `shop_menu` VALUES (5, '用户列表', 4, 1);
    INSERT INTO `shop_menu` VALUES (6, '购物车', 4, 1);
    INSERT INTO `shop_menu` VALUES (7, '用户地址', 4, 1);
    INSERT INTO `shop_menu` VALUES (8, '订单管理', 4, 1);
    INSERT INTO `shop_menu` VALUES (9, '后台管理', 0, 1);
    INSERT INTO `shop_menu` VALUES (10, '管理员列表', 9, 1);
    INSERT INTO `shop_menu` VALUES (11, '个人中心', 9, 1);
    INSERT INTO `shop_menu` VALUES (12, '左侧菜单', 9, 1);
    

    三、执行原生 MySql
    1、query 方法用于执行 MySql 查询操作

    public function index(){
        $query = Db::query("SELECT * FROM `shop_goods` where status=1");
        print_r($query);
    }
    2、ex
    

    ecute 方法用于执行 MySql 新增和修改操作

    public function index(){
        $execute = Db::execute("INSERT INTO `shop_goods` VALUES (3, 1, '2019秋冬新款时尚简约纯羊绒加厚圆领羊绒长裙显瘦气质连衣裙女', 1179.00, 0, 200, 1, 1576080000)");
        print_r($execute);
        $execute = Db::execute("UPDATE `shop_goods` set `price`='1100' where `id`=3 ");
        print_r($execute);
    }
    

    四、查询
    1、单条数据查询 find

    find 方法查询结果不存在,返回 null,否则返回结果数组

    public function index(){
        $find = Db::table('shop_goods')->find(5);
        print_r($find);
    }
    

    2、多条数据查询 select

    select 方法查询结果是一个二维数组,如果结果不存在,返回空数组

    public function index(){
        $select = Db::table('shop_goods')->select();
        print_r($select);
    }
    

    3、查询某个字段的值 value

    value 方法查询结果不存在,返回 null

    public function index(){
        $value = Db::table('shop_goods')->value('title');
        print_r($value);
    }
    

    4、查询某一列的值 column

    column 方法查询结果不存在,返回空数组

    public function index(){
        $column = Db::table('shop_goods')->column('title');
        print_r($column);
        $column = Db::table('shop_goods')->column('title','id');
        print_r($column);
    }
    

    五、添加
    1、添加一条数据 insert

    insert 方法添加数据成功返回添加成功的条数,通常情况返回 1

    public function index(){
        $data = ['cat'=>'1','title'=>'日系小浪漫与温暖羊毛针织拼接网纱百褶中长收腰连衣裙','price'=>'1598.35','add_time'=>1576080000];
        $insert = Db::table('shop_goods')->insert($data);
        print_r($insert);
    }
    

    2、添加一条数据 insertGetId

    insertGetId 方法添加数据成功返回添加数据的自增主键

    public function index(){
        $data = ['cat'=>'1','title'=>'针织毛衣连衣裙2019秋冬新款气质宽松羊毛长袖中长款休闲打底裙女','price'=>'690.00','add_time'=>1576080000];
        $insert = Db::table('shop_goods')->insertGetId($data);
        print_r($insert);
    }
    

    3、添加多条数据 insertAll

    insertAll 方法添加数据成功返回添加成功的条数

    public function index(){
        $data = [
            ['cat'=>'1','title'=>'秋冬加厚连衣裙女超长款宽松羊绒衫高领套头过膝毛衣百搭针织长裙','price'=>'658.00','add_time'=>1576080000],
            ['cat'=>'1','title'=>'2019新款秋冬慵懒风宽松毛衣针织连衣裙复古港味网红两件套','price'=>'408.00','add_time'=>1576080000],
            ['cat'=>'2','title'=>'男士长袖t恤秋季圆领黑白体恤T 纯色上衣服打底衫男装','price'=>'99.00','add_time'=>1576080000]
        ];
        $insert = Db::table('shop_goods')->insertAll($data);
        print_r($insert);
    }
    

    六、修改
    1、修改数据 update

    update 方法返回影响数据的条数,没修改任何数据返回 0

    public function index(){
        $data = ['price'=>'68'];
        $update = Db::table('shop_goods')->where('id',8)->update($data);
        print_r($update);
    }
    

    2、自增 inc

    inc 方法自增一个字段的值

    public function index(){
        $inc = Db::table('shop_goods')->where('id',5)->inc('stock')->update();
        print_r($inc);
        # 字段的值增加5
        $inc = Db::table('shop_goods')->where('id',6)->inc('stock',5)->update();
        print_r($inc);
    }
    

    3、自减 dec

    dec 方法自减一个字段的值

    public function index(){
        # 字段的值减去1
        $dec = Db::table('shop_goods')->where('id',7)->dec('stock')->update();
        print_r($dec);
        # 字段的值减去5
        $dec = Db::table('shop_goods')->where('id',8)->dec('stock',5)->update();
        print_r($dec);
    }
    

    七、删除
    1、删除数据 delete

    delete 方法返回影响数据的条数,没有删除返回 0

    public function index(){
        # 根据条件删除数据
        $delete = Db::table('shop_goods')->where('id',1)->delete();
        print_r($delete);
        # 删除主键为2的数据
        $delete = Db::table('shop_goods')->delete(2);
        print_r($delete);
        # 删除整表数据
        $delete = Db::table('shop_goods')->delete(true);
        print_r($delete);
    }
    

    2、软删除 useSoftDelete

    业务数据不建议真实删除数据,TP系统提供了软删除机制

    public function index(){
        # 软删除
        $delete = Db::table('shop_goods')->useSoftDelete('status',3)->delete();
        print_r($delete);
    }
    

    八、其他操作(自学)
    save 方法统一写入数据,自动判断是新增还是更新数据(以写入数据中是否存在主键数据为依据)。

    public function index(){
        # 添加数据
        $data = ['cat'=>'2','title'=>'美特斯邦威七分牛仔裤女2018夏季新款中腰修身洗水牛仔裤商场款','price'=>'49.90','add_time'=>1576080000];
        $save = Db::table('shop_goods')->save($data);
        print_r($save);
        # 修改数据
        $data = ['price'=>'99.00','id'=>3];
        $save = Db::table('shop_goods')->save($data);
        print_r($save);
    }
    

    备注:增删查改是常规操作

    九、数据集
    Thinkphp提供了很多处理数据集的方法

    方法	描述
    toArray	转换为数组
    isEmpty	是否为空
    all	所有数据
    merge	合并其它数据
    diff	比较数组,返回差集
    flip	交换数据中的键和值
    intersect	比较数组,返回交集
    keys	返回数据中的所有键名
    pop	删除数据中的最后一个元素
    shift	删除数据中的第一个元素
    unshift	在数据开头插入一个元素
    push	在结尾插入一个元素
    reduce	通过使用用户自定义函数,以字符串返回数组
    reverse	数据倒序重排
    chunk	数据分隔为多个数据块
    each	给数据的每个元素执行回调
    filter	用回调函数过滤数据中的元素
    column	返回数据中的指定列
    sort	对数据排序
    order	指定字段排序
    shuffle	将数据打乱
    slice	截取数据中的一部分
    map	用回调函数处理数组中的元素
    where	根据字段条件过滤数组中的元素
    whereLike	Like查询过滤元素
    whereNotLike	Not Like过滤元素
    whereIn	IN查询过滤数组中的元素
    whereNotIn	Not IN查询过滤数组中的元素
    whereBetween	Between查询过滤数组中的元素
    whereNotBetween	Not Between查询过滤数组中的元素
    
    public function index(){
        $select = Db::table('shop_goods')->select();
        if($select->isEmpty()){
            echo '未找到数据';
        }
        print_r($select->toArray());
    }
    

    十、示例
    controller代码

    namespace app\controller;
    use think\facade\View;
    class Index{
        public function index(){
            $title = '商城';
            $login = '欧阳克';
            $menu = Db::table('shop_menu')->where('fid',0)->select();
            $left = $menu->toArray();
            foreach($left as &$left_v){
                $left_v['lists'] = Db::table('shop_menu')->where('fid',$left_v['id'])->select();
            }
            $list = Db::table('shop_goods')->select();
            $right = $list->toArray();
            foreach($right as &$right_v){
                $right_v['cat'] = Db::table('shop_cat')->where('id',$right_v['cat'])->value('name');
            }
            View::assign([
                'title'  => $title,
                'login' => $login,
                'left' => $left,
                'right' => $right
            ]);
            return View::fetch();
        }
    }
    

    view代码:index.html

    {include file="public/head" /}
    {include file="public/left" /}
    <div class="main" style="padding:10px;">
        <div class="content">
            <span>商品列表</span>
            <button class="layui-btn layui-btn-sm" onclick="add()">添加</button>
            <div></div>
        </div>
        <table class="layui-table">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>商品标题</th>
                    <th>分类</th>
                    <th>原价</th>
                    <th>折扣</th>
                    <th>现价</th>
                    <th>库存</th>
                    <th>状态</th>
                    <th>添加时间</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody>
                {volist name="right" id="right_v"}
                    <tr>
                        <td>{$right_v.id}</td>
                        <td>{$right_v.title}</td>
                        <td>{$right_v.cat}</td>
                        <td>{$right_v.price}</td>
                        <td>{$right_v.discount}</td>
                        <td>
                            {if $right_v.discount!=0}
                                {$right_v.price*($right_v.discount/10)}
                            {else/}
                                {$right_v.price}
                            {/if}
                        </td>
                        <td>{$right_v.stock}</td>
                        <td>{if $right_v['status']==1}开启{else/}关闭{/if}</td>
                        <td>{$right_v.add_time|date='Y-m-d'}</td>
                        <td>
                            <button class="layui-btn layui-btn-xs" onclick="edit()">编辑</button>
                            <button class="layui-btn layui-btn-danger layui-btn-xs" onclick="del()">删除</button>
                        </td>
                    </tr>
                {/volist}
            </tbody>
        </table>
    </div>
    {include file="public/bottom" /}
    
    展开全文
  • 童鞋别被脱系列这是系列篇第一节,其主要内容如下思维导图所示。如太简单,文末在看走起!数据库基础1 了解sql----长生不老,异常稳定查看近几年的TIOBE发现了,一直在前十,可见是个老且管用的东西。来自网络了解...

    此数据库系列,是学习工作中的总结,具体章节系列如下图所示。如果您需要扫盲数据库,突击数据库的面试,那就盘他,盘他!所谓初恋,初次见面,下凡数据库基础。请多多关照!

    11c3b909948acfae91c28070febdd262.png
    童鞋别被脱裤系列

    这是系列篇第一节,其主要内容如下思维导图所示。如太简单,文末在看走起!

    c1ce81226bb6f370467eba71785fc3b1.png
    数据库基础

    1 了解sql----长生不老,异常稳定

    查看近几年的TIOBE发现了,一直在前十,可见是个老且管用的东西。

    69f27920b994a98280514dcd567fa5d6.png
    来自网络

    了解几个术语:

    • DDL(Data Definition Language),定义数据库对象。

    • DML:(DATA Manipulation Language),用来操作和数据库相关记录。

    • DCL:(Data Cnotrol Language)定义访问权限和安全级别。

    • DQL(Data Query Language)。查询记录。

    sql大小写规范

    • 表名、表别名、字段名、字段别名等可以小写

    • SQL保留字,函数名,绑定变量大写

    SELECT name,age FROM student WHERE id="1";

    2 为啥要存储数据

    我们大部分的系统都会考虑到数据的存储,那么如何更有效地保存好数据,做好数据备份。当我们拥有了数据,可以进行数据挖掘,大数据分析,舆情预测,自然语言处理等等一系列的骚操作,可见存储数据是多么的重要。这一篇文章对数据库基础知识的扫盲,下一节将是数据存储,数据备份等。另外我必须要知道硬盘的处理速度比cpu,内存,网卡都会慢哟。

    3 DBMS是什么

    • DB、DBS和DBMS区别

    全称功能
    DBMSDataBase Management System可对多个数据库进行管理
    DBDataBase存储数的集合,理解为多个数据表
    DBSDataBase system老大哥。包含了数据库管理系统和数据库管理人员DBA

    4 当前主流的DBMS有哪些

    2674a8a2651ea8f0d2157619866a4516.png
    主流的DBMS

    5 sql与Nosql

    Nosql的Timestamp:

    ee80cdf6d3405345fb91d34a4a1e5e1f.png

    1970:Nosql=we have no sql

    1980:Nosql=know sql

    2000:Nosql=No SQL

    2005:Nosql=not only sql

    2013:Nosql=No,SQL

    键值数据库

    通过key-value方式存储,key为唯一表示,优点,查询快,缺点是无法像关系型数据库一样使用条件过滤,这样可能导致遍历所有的键,消耗大量的计算。所以经常用来作为缓存,比如redis。

    文档数据库

    管理文档,一个文档相当于一条记录,MongoDB。

    搜索引擎

    虽然关系型数据库常常通过索引的方式提高检索效率(不一定),但是对于全文检索却比较低。搜索引擎的优势比如Elasticsearch、Splunk和Solr采用全文搜索,核心原理为倒排索引

    列式数据库

    相对于行式数据库,将数据按照列存储,这样可以大量降低系统的IO(因为相邻的数据类型一样,方便压缩,自然就会降低IO),适合分布式文件系统,比如

    图数据库

    典型的就是网络中的人与人的关系,节点和边关系。

    6 Oracle中的sql如何执行的

    4b9070e9e3dedc5bdc73e53dcc230eb3.png
    查询执行流程
    • 语法检查:检查SQL拼写是否正确。

    • 语义检查:检查SQL访问对象是否存在。

    • 权限检查:检查用户是否有访问权限。

    • 共享池检查:包含了库缓存、数据字典缓冲区等。主要用来缓冲执行计划或者表、视图等对象。

    • 优化器:进行硬解析,决定创建解析树和生成执行计划应该怎么做

    • 执行器:有了优化器,那么在执行器思考如何被执行

    7 mysql中sql如何执行的

    236d372a1985190681a7d7872877d851.png
    查询执行流程
    • 查询缓存

    首先注意,mysql8.0之后已经放弃了这个功能(因为如果数据更新,缓存会清空,如果为动态数据经常更新,这样反而增加SQL查询时间)。缓存通常的理解是一个中间层,如果在中间层存在查询语句就直接返回,如果没有则给解析器处理。

    • 解析层

    主要进行语法分析和语义分析。

    • 优化器

    确定SQL语句的执行路径。是根据全表检索还是根据索引。

    • 执行器

    进行权限检查。

    那么mysql和oracle两者执行情况有啥不一样呢

    MySql具有多种存储引擎且可以自定义存储引擎,那么有哪些存储引擎,优点缺点是啥?

    描述
    InnoDBMysql5.5以后默认存储引擎,支持事务,行级锁,外键约束
    MyISAMMysql5.5以前为默认存储引擎,不支持事务和外键,最大特点速度快,占资源少
    Memory存储引擎使用系统内存为存储介质,更快的响应速度。
    NDB存储引擎用于Mysql Cluster分布式集群环境
    Archive存储引擎压缩机制的特点便于文件的归档,常用来做仓库

    8 如何查看一条sql的资源使用情况

    • prifiling是否开启

    mysql> select @@profiling;如果为0代表关闭,设置为1表示打开。

    • 执行sql查询语句

    mysql> select *from student;

    • 查看当前所有profiles

    show profiles;查看当前会话的profiles

    • 查看执行时间show profile

    9 DDL

    • 创建数据库

    • 创建公众号原创作者数据库

    CREATE DATABASE WeChat_Official_Account_Author;

    • 创建表结构(注意语句最后;结束,最后一个字段定义结束没有逗号)

    CREATE TABLE authors_name(author_id int(15) NOT NULL AUTO_INCREMENT),author_name varchar(255) NOT NULL);

    • 添加字段

    ALTER TABLE  authors_name ADD(age int(12));

    • 修改字段名

    ALTER TABLE authors_name RENAME_COLUME age to author_age;

    • 删除字段

    ALTER TABLE author_names DROP COLUME author_age;

    10 数据库的常见约束

    不成规矩,不成方圆

    • 主键约束

    唯一标识一条记录,不重复且不能为空(UNIQUE+NOT NULL)。主键可以使是一个字段或者多个字段的组合,一个数据表主键只能有一个

    • 外键约束

    外键确保表与表之间引用的完整性。外键可以重复也可以为空。

    • 唯一性约束

    字段在表中可以使唯一的。

    • NOT NULL约束

    表明字段不应为空,必须有取值。

    • CHECK约束

    检查特定字段取值范围的有效性

    11 常见查询语句

    • 查询姓名列

    • 查询单列和查询多列

    SELECT author_name FROM authors_name;

    SELECT * FROM authors_name;

    • 去除重复行

    SELECT DISTICT age   FROM authors_name;

    • 查询排序(ASC 递增排序,DESC递减排序)

    SELECT  author_name FROM authors_names ORDER BY age DESC;

    • 约束返回结果的个数(返回5条数据 LIMIT需要放在最后)

    SELECT  author_name FROM authors_names ORDER BY age DESC LIMIT 5;

    • SELECT语句中关键字顺序

    关键字的顺序:SELECT…..FROM…WHERE…GROUP BY

    • SELECT语句的执行顺序

    FROM>WHERE>GROUP BY HAVING>SELECT

    • 那么一句select的执行顺序原理是什么?请看下图。

    02ff9506e6369099d29102c5d1f0295f.png
    一句select经历了啥

    12 sql运算符

    • 比较运算符(不同的DBMS支持的运算符可能不同)

    dd79a1387a8956260090aed0875edaad.png
    比较运算符
    • 逻辑运算符

    83111f4a540d600f9fc4ac25680363cc.png
    逻辑运算符

    当WHERE字句中同时出现OR和AND的时候,AND执行优先级会更高。一般来说()优先级最高,其次是AND,然后是OR。

    • 通配符过滤

    通配符是对文本类型进行模糊查询,但是通常是全表扫描,所以效率很低。只有当LIKE后面没有通配符,并对字段进行索引的时候不会进行全表扫描。匹配一部分特殊字符。"LIKE"操作符。

    • 通配符匹配之任意字符串出现的任意次数(%)

    • 通配符匹配之耽搁字符(_)

    13 常见sql函数

    提供函数,类似接口,更方便快速的得出想要的结果。

    描述例子
    ABS()取绝对值SELECT ABS(-5)---5
    MOD()取余SELECT MOD(101,3)---2
    ROUND()四舍五入为指定的小数位数,如果两个参数,分别为字段名称和小数位数SELECT ROUND(38.29,1)--38.3
    LENGTH()计算字段长度。一个汉字三个字符。SELECT LENGTH('小蓝')--6
    UPPER()字符转大写SELECT LOWER('qwe')--QWE
    LOWER()字符转小写SELECT LOWER('QWE')--qwe
    REPLACE()替换函数SELECT REPLACE('QWE123D','QWE',789)--789123D
    SUBSTRING()截取字符串SELECT SUBSTRING('QWE123',1,3)--
    CHAR_LENGTH()计算机字段的长度,汉字,数字都算一个字符SELECT CHAR_LENGTH('小蓝')--2
    CONCAT()连接字符串SELECT CONCAT('XIAOLAN',789)---XIAOLAN789
    DATA()返回时间的日期SELECT DATA('2020-03-13 11:30:20')--2020-03-13
    YEAR()/MONTH()/DAY()返回时间的年份/月份/天数SELECT YEAR(NOW())--2020
    HOUR()返回时间的小时SELECT hour('12:13:14')--12
    MINUTE()返回时间的分钟SELECT MINUTE('12:13:14')--13
    SECOND()返回时间的秒部SELECT SECOND('12:13:14')--14
    CURRENT_DATE()系统当前日期SELECT CURRENT_DATE('2020-03-13 11:30:20')--2020-03-13
    CURRENT_TIME()系统当前时间,没有具体日期SELECT CURRENT_TIME('2020-03-13 11:30:20')--11:30:20
    CURRENT_TIMESTAMP()日期+时间SELECT CURRENT_TIMESTAMP--2020-03-13 11:30:20

    14 聚集函数

    描述例子
    COUNT()总行数,不管某个字段是否为NULLSELECT COUNT(*) FROM authors_name WHERE age>25
    MAX()最大值SELECT MAX(Age)  FROM authors_name
    MIN()最小值SELECT MIN(Age)  FROM authors_name
    SUM()求和SELECT SUM(Age)  FROM authors_name
    AVG()平均值SELECT AVG(Age)  FROM authors_name
    • 数据分组

    使用GROUP BY字句进行数据分组。

    • HAVING过滤分组和WHERE的区别

    WHERE 是用于数据行,而 HAVING 则作用于分组。如果分组完以后需要排序,就在其后增加ORDER BY完成

    17 视图

    • 什么是视图

    视图可以理解为一个中间表(结果集),咋们叫虚拟表,它主要把我们经常查询的结果存放于中,从而提升使用的效率。本身不具有数据。

    • 为什么使用视图

    重用SQL语句

    使用表的一部分而不是整个表

    更改数据格式和表示。

    通过授予表的特定访问权限来保护数据

    • 使用视图过滤不想想要的数据

    • 更新视图

    18 事务处理

    要么完全执行,要么不执行。

    • A(Atomicity)原子性。不可分割,进行数据处理的基本单位。

    • C(Consistency)一致性。在进行事务操作以后,会从一致的状态变为另一种一致的状态。即使事务回滚也不能被破坏。

    • I(Isolation)隔离性。事务的独立性。一个事务在提交之前,对其他的事务不可见。

    • D(Durability)持久性。通过事务日志保证。即使系统崩溃,通过数据库日志的更新让系统恢复到最后一次成功的更新状态。

    19 事务隔离

    我们知道当在高并发的情况下,这个时候需要较高的吞吐量,那么采取方式之一就是将原来的串行操作变化为并行。这个时候可以通过降低数据库的隔离标准,来换取事务的并发能力。

    讲述相关内容之前,我们先定义一个表如下。

    IDAgeName
    118小蓝
    219小林
    320小旋
    • 脏读

    小蓝今天想去看看数据库内容,并想把朋友小地增加到数据库中,于是操作如下:

    SQL> BEGINT:
    SQL> INSERT INTO authors value(4,20,"小地");

    此时小蓝还没有提交这个事务,小林去访问了这个表(小林去年买了个表,哈哈哈嗝),于是

    SELECT * 

    然后得到这个结果:

    IDAgeName
    118小蓝
    219小林
    322小旋
    420小地

    结论:小蓝还没有提交事务,小林访问却看到了增加的小地,这就是脏读。

    • 不可重复读

    小蓝听说小地也在表里,然后想看看是为何人如此牛掰,几岁了?

    SELECT Age 

    结果如下:

    Age
    20

    我的天,这么年轻?小蓝试图用个事务去修改其年龄

    SQL>

    此时小蓝去查询下修改是否成功

    SELECT Age 

    结果如下:

    Age
    25

    牛掰,修改成功?那么问题来了,小蓝虽然修改了,但是并没有提交呀,这就是不可重复读,两次查询出现了不同的结果。

    • 幻读

    今天小旋过来想看看,表里都有哪些小伙伴。

    SELECT *

    结果如下:

    IDAgeName
    118小蓝
    219小林
    322小旋
    420小地

    这个时候小林遇到个小妹妹,发现其文采还不错,开启个事务将其放入表中。

    BEGIN;

    小林记性太好了,于是还想看看到底有哪些人,

    SELECT * 

    结果如下

    IDAgeName
    118小蓝
    219小林
    322小旋
    420小地
    521小魏

    啊!小林惊呆了,怎么多了个妹妹!!!这就是幻读!

    • 隔离级别

    脏读不可重复读幻读
    读未提交允许允许允许
    读已提交禁止允许允许
    可重复读禁止禁止允许
    可串行化禁止禁止禁止

    总结下:

    读未提交:

    允许脏读,也就是可能读取到其他会话中未提交事务修改的数据

    读已提交

    只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)

    可重复读

    可重复读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻读

    串行读:

    全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞.

    20 python如何操作oracle

    55a74668689e2c3e1f11c07515f346af.png
    简单操作
    • 插入数据

    64a900865d02afdd6b3c6735147f0f1f.png
    插入数据
    • 查询数据

    916b8607e29afa461098799a44cbf4a6.png
    查询数据

    21 初探调优

    为什么调优,无非就是希望响应更快,吞吐量更大,用户体验更好。

    那么怎么获得反馈

    • 用户

    他们是直接体验者,来的直接。

    • 日志汇聚分析,服务器监控,数据库内部监控

    通过性能工具进行查看,想起一张图送给大家。

    这里是性能指标图

    af077e62ed2e93cb2f0df5afe220f3d7.png

    来自网络

    一般从哪几个方面着手数据库调优,总之没有最好,只有更合适。

    • 前期DBMS的调研,选择合适业务的DBMS

    比如需要有事务处理能力,可以选择mysql的InnoDB。如果采用如果考虑大幅度的降低系统IO,那么可以考虑Nosql中的列式数据库,之前说过列式存储方便使用压缩,但是不适合频繁的增删改。

    • 选择合适的缓存比如redis

    将经常使用的数据放入缓存中(内存),提升查询效率。

    • 库级别的优化

    主从架构优化读写策略,具体方法请关注系列篇第二节。

    好了,上面的基础部分学习应该差不多了,那么数据库相关的优化,主从架构,读写分离,数据库的分片等都是怎么样的呢?尽请期待后续学习分享,一起成长!

    参考链接:

    http://www.redis.cn/

    《mysql必知必会》

    https://dev.mysql.com/doc/

    https://blog.csdn.net/gengkui9897/article/details/89294936

    《高性能mysql》

    暖男告知

    跟小蓝每天进步一点点,生活就会美一点!

    加我微信,带你进入高手如云学习交流群,一起成长!

    f75de38ac5a84dc7e092eb60ea495d66.png

    ▼[c/c++后台开发面经系列]1 深信服面经[c/c++后台开发面经系列]2 京东面经(含答案)写简历这几点一定要注意!Linux后台开发必看![c/c++后台开发面经系列]3 bigo/映客面经(含答案)点下面“ 在看”的永远18岁哟~
    展开全文
  • 在使用php编程的场景中,总有一些情况下需要将数组转为json字符串,就需要用到php自带的json_encode函数;但是当数组中含有中文字符串时,转出来的结果却是以下结果(unicode字符串):...
    11f860636510daa50c4844fb0af7860e.png

    在使用php编程的场景中,总有一些情况下需要将数组转为json字符串,就需要用到php自带的json_encode函数;

    但是当数组中含有中文字符串时,转出来的结果却是以下结果(unicode字符串):

    <?php $tmpArr = array( 'name' => '长裤', 'color' => 'blue', 'size' => 'XL', 'title' => '中年男装 长裤' ); $tmpJson = json_encode($tmpArr); echo $tmpJson;输出:{"name":"长裤","color":"blue","size":"XL","title":"中年男装 长裤"}

    要想中文不被转为unicode字符串,只需要给json_encode函数中传入一个参数JSON_UNESCAPED_UNICODE即可,如下:

    <?php $tmpArr = array( 'name' => '长裤', 'color' => 'blue', 'size' => 'XL', 'title' => '中年男装 长裤' ); $tmpJson = json_encode($tmpArr,JSON_UNESCAPED_UNICODE); echo $tmpJson;输出:{"name":"长裤","color":"blue","size":"XL","title":"中年男装 长裤"}

    但是PHP版本<5.4.0中并不支持以上参数JSON_UNESCAPED_UNICODE,这个时候我们可以通过以下方式解决:

    $tmpArr = array( 'name' => '长裤', 'color' => 'blue', 'size' => 'XL', 'title' => '中年男装 长裤' ); $tmpJson = json_encode($tmpArr); $tmpJson = preg_replace_callback("#u([0-9a-f]{4})#i",function($matchs){ return iconv('UCS-2BE', 'UTF-8', pack('H4', $matchs[1])); },$tmpJson); echo $tmpJson;输出:{"name":"长裤","color":"blue","size":"XL","title":"中年男装 长裤"}

    好了,今天的分享就到这里,如果喜欢我的内容,欢迎转发~~

    下期见!

    展开全文
  • 童鞋别被脱系列这是系列篇第一节,其主要内容如下思维导图所示。如太简单,文末在看走起!数据库基础1 了解sql----长生不老,异常稳定查看近几年的TIOBE发现了,一直在前十,可见是个老且管用的东西。来自网络了解...
  • tp6学习第二步

    2020-04-07 21:02:02
    } } view代码 备:Index类对应view下面的目录 备:index方法对应view下面的目录里的静态文件 、模版变量 assign 方法赋值属于全局变量赋值 模版输出 {$name} controller代码 namespace app\controller;...
  • tp6学习第三步

    2020-04-08 21:50:22
    default 默认值 raw 不使用(默认)转义 md5 md5加密 substr 截取字符串 可以多函数调用 controller文件 public function index(){ View::assign('time',1576048640); View::assign('num',10.0032); View::assign('...
  • 5 , 1 , ' 赤犬 ' ), ( 6 , 1 , ' 黄猿 ' ), ( 7 , 2 , ' 四皇 ' ), ( 8 , 2 , ' 七武海 ' ), ( 9 , 2 , ' 草帽海贼团 ' ), ( 10 , 9 , ' 索隆 ' ), ( 11 , 7 , ' 香克斯 ' ), ( 12 , 8 , ' 多弗朗明哥 ' ), ...
  • t.circle(5) t.color(160, 82, 45) t.end_fill() t.pu() t.seth(0) t.fd(20) t.pd() t.pencolor(255, 155, 192) t.seth(10) t.begin_fill() t.circle(5) t.color(160, 82, 45) t.end_fill() # 头 t.color((255, 155,...
  • keras之分类问题和回归问题

    万次阅读 2019-12-05 18:31:04
    iVBORw0KGgoAAAANSUhEUgAAAP8AAAD8CAYAAAC4nHJkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAEjxJREFUeJzt...
  • 1)图像分类: 公开数据集: (1)MNIST:10个类别,手写数字体数据集,6万条训练数据和1万条测试数据,28*... (3)CIFAR10:10个类别,5万条训练数据和1万条测试数据,32*32彩色图,飞机、汽车、猫、狗等; (4...
  • 贝叶斯文本分类

    2018-04-20 10:40:35
    (用 Python 尝试相乘许多很小的数,最后四舍入后会得到 0) 一种解决办法是对乘积取自然对数。在代数中有 ln(a * b) = ln(a) + ln(b), 于是通过求对数可以避免下溢出或者浮点数舍入导致的错误。采用自然对数...
  • thinkphp 下实现繁简体汉字转换

    千次阅读 2016-09-24 15:06:36
    (5, '挨', '挨'), (6, '矮', '矮'), (7, '愛', '爱'), (8, '礙', '碍'), (9, '安', '安'), (10, '岸', '岸'), (11, '按', '按'), (12, '案', '案'), (13, '暗', '暗'), (14, '昂', '昂'), (15, '襖', '袄...
  • 一、简介 前面几篇文章对微信公众...这一篇文章将对大家每天都会关心的天气查询进行开发,例如,用户发送消息 “苏州天气”,则会返回苏州实时天气状况,以及未来两天甚至未来天的天气状况。 二、思路分析
  • 爬取数据的接口淘宝定义限速规则,为了防止淘宝数据接口返回以下消息u'\r\nvar propvalues={"error_response":{"code":7,"msg":"App Call Limited","...
  • shardingsphere mybatis plus 加mysql实现库分表
  • TP5_Splider 一个基于Thinkphp5+phpQuery 网络爬虫抓取数据接口 统一输出接口数据api.适合正在学习Vue,AngularJs框架学习 开发demo,需要接口并保证接口不跨域的问题,新闻分类(头条/军事/娱乐/体育/科技/艺术/教育/...
  • NLP-文本分类(2)

    千次阅读 2019-04-09 16:49:00
    8, 316, 8, 106, 5, 4, 2223, 5244, 16, 480, 66, 3785, 33, 4, 130, 12, 16, 38, 619, 5, 25, 124, 51, 36, 135, 48, 25, 1415, 33, 6, 22, 12, 215, 28, 77, 52, 5, 14, 407, 16, 82, 2, 8, 4, 107, 117, 5952, 15...
  • 1.首先进ECharts官网下载echarts.js 点击下载,结合TP5讲解,主要代码在js里面,更多请到ECharts官网 2.引进echarts.js <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &...
  • 但是,在Linux3.18rc5之后,如果在关闭SACK(后面会讲为什么要关闭SACK)的前提下重新模拟上述的AIMD过程,将会是下面的样子: 事实上,不管你用的是不是Reno算法,即便是Cubic,BIC这种,也依然是上面的结果,即在...
  • 点击下方“AI算法与图像处理”,一起进步! 重磅干货,第一时间送达大家好,我是阿潘。随着元宇宙的概念大火,智能时尚的或许能在未来创造出巨大的价值!今天分享一篇相关的综述,参考文献包含 5...
  • 行人重识别(ReID) ——技术实现及应用场景

    万次阅读 多人点赞 2018-11-01 13:20:55
    第一张是 1 除以 1,第二张是除以排序实际位置,2 除以 3,第三个位置是 3 除以 4,第四个是 4 除以 8,第张图是 5 除以 20,然后把它们的值求平均,再总除以总的图片量,最后得出的 mAP 值大概是 0.63。...
  • [color=orange][size=large]使用replace函数去掉字段内容包含的空格,例子如下: update [表名] set [字段名]=replace([字段名],' ','') where 条件[/size][/color]
  • PHP之dao层的封装和简单结果的展示

    千次阅读 2017-06-27 21:16:16
    //链接数据 $this->connect(); //设定链接编码 $this->setCharset($this->charset); //选定数据库 $this->selectDB($this->dbname);  } //禁止克隆  private function __clone(){} // 这里进行链接 public ...
  • 第一张是 1 除以 1,第二张是除以排序实际位置,2 除以 3,第三个位置是 3 除以 4,第四个是 4 除以 8,第张图是 5 除以 20,然后把它们的值求平均,再总除以总的图片量,最后得出的 mAP 值大概是 0.63。...
  • Spider的使用 4.1 Spider运行流程: 4.2 Spider类分析: 4.3 实战案例: 5. Downloader Middleware的使用 5.1 使用说明: 5.2 自定义Downloader Middleware中间件 ① process_request(request,spider) ② process_...
  • jQuery初识与选择器

    2019-08-11 10:39:35
    1、jQuery的基本概念 为什么要学习jQuery? 使用javascript开发过程中,有许多的缺点: 1. 查找元素的方法太少,麻烦。...5. 代码冗余。 什么是jQuery? jQuery的官网 :https://jquery.com jQuery就是一个js库...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 209
精华内容 83
关键字:

tp5分库