• mysql-sql操作


    原文地址 :https://gitee.com/gaohaixiang192/study-node/blob/master/mysql-sql.md

    库操作

    查看现有库

    show databases;
    
    • 1

    切换到指定库

    use sys;
    
    • 1

    确认当前所在库

    select database();
    
    • 1

    建库

    create database testdb;
    -- 或
    create database testdb character set utf8 collate utf8_bin;
    
    • 1
    • 2
    • 3

    删库

    drop database testdb;
    
    • 1

    表操作

    查看 testdb 库中的表

    use testdb;
    show tables;
    
    • 1
    • 2

    查看 testtable 表结构

    desc testtable;
    -- 或
    desc testtable ;
    -- 或
    desc testdb.testtable;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    新建表

    create table testtable(
        name char(16) not null,
        password char(48) default '',
        parimary kye(name)
    )default charset=utf8;  -- 采用utf8作为字符集
    
    • 1
    • 2
    • 3
    • 4
    • 5

    查看表的实际创建指令

    show create table testdb.testtable;
    
    • 1

    删除表

    drop table testtable;
    
    • 1

    各种时间函数的使用

    1)使用now()查看当前的日期和时间

    mysql> SELECT now();
    +---------------------+
    | now()               |
    +---------------------+
    | 2017-04-02 04:02:42 |
    +---------------------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2)使用sysdate()查看系统日期和时间

    mysql> SELECT sysdate();
    +---------------------+
    | sysdate()           |
    +---------------------+
    | 2017-04-02 04:03:21 |
    +---------------------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3)使用curdate()获得当前的日期,不含时间

    mysql> SELECT curdate();
    +------------+
    | curdate()  |
    +------------+
    | 2017-04-02 |
    +------------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4)使用curtime()获得当前的时间,不含日期

    mysql> SELECT curtime();
    +-----------+
    | curtime() |
    +-----------+
    | 04:04:55  |
    +-----------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5)分别获取当前日期时间中的年份、月份、日

    mysql> SELECT year(now()),month(now()),day(now());
    +-------------+--------------+------------+
    | year(now()) | month(now()) | day(now()) |
    +-------------+--------------+------------+
    |        2017 |            4 |          2 |
    +-------------+--------------+------------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    6)获取系统日期时间中的月份、日

    mysql> SELECT month(sysdate()),day(sysdate());
    +------------------+----------------+
    | month(sysdate()) | day(sysdate()) |
    +------------------+----------------+
    |                4 |              2 |
    +------------------+----------------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    7)获取系统日期时间中的时刻

    mysql> SELECT time(sysdate());
    +-----------------+
    | time(sysdate()) |
    +-----------------+
    | 04:06:08        |
    +-----------------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    修改表结构

    建表

    create table testdb.testtable(
        id int(4) primary key,
        name varchar(4) not null,
        age int(2) not null
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5

    添加一个 address 字段

    alert table testdb.testtable add address varchar(48);
    
    • 1
    • 在age之后添加一个gender字段
    alert table testdb.testtable add enum('boy','girl') after age;
    
    • 1

    修改 gender 字段名为 sex,并添加非空约束

    alert table testdb.testtable change gender sex enum('boy','girl') not null;
    
    • 1

    删除字段,删除 sex 字段

    alert table testdb.testtable drop sex;
    
    • 1

    索引创建与删除

    建表时指定 index,name 索引字段

    create database home;
    use home;
    create table tea4(
        id char(6) not null,
        name varchar(6) not null,
        age int(3) not null,
        gender enum('boy','girl') default 'boy',
        index(id),index(name)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    删除表中某个 index 索引字段,删除 name 的 index 索引字段

    drop index name on tea4;
    
    • 1

    在已有表中设置一个 index 索引字段,为 age 字段建立索引,名为 nianling

    create index nianling no tea4(age);
    
    • 1

    查看指定表的索引信息

    show index from tea4\G;
    
    • 1

    创建表时指定 unique 索引字段,

    • unique 便是唯一,同一个表可以有多个字段具有唯一性
    • 创建tea5表,将id,name建立unique索引,age设置index索引
    create table tea5(
        id char(6),
        name varchar(4) not null,
        age int(3) not null,
        unique(id),unique(name),index(age)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    删除 unique 索引,在已有表中设置 unique 索引字段

    • 删除tae5表name字段唯一索引
    drop index name on tea5;
    
    • 1
    • 重新为tea5表的name字段建立unique索引
    create unique index name on tea5(name);
    
    • 1

    建表时设置 primary key 主键索引

    • 每个表中主键只有一个
    • 可以在某个字段的 约束条件中指定主键,也可以在最后指定
    create table biao01(
        id int(4) primary key,
        name vachar(8)
    );
    -- 或
    create table biao02(
        id int(4),
        name varchar(8),
        primary key(id)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 建表时,某个主键字段为int,可以为其设置 auto_increment 自增属性
    create table tea6j(
        id int(4) auto_increment,
        name varchar(4) not null,
        age int(2) not null,
        primary key(id)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    删除现有表的 primary key 主键索引

    alert table biao01 drop primary key;
    
    • 1
    • 若想清除带有自增属性的主键,需要先清除自增属性-修改id列的字段定义
    alter table tea6 modify id int(4) not null;
    alert table tea6 drop primary key;
    
    • 1
    • 2

    为现有表添加 primary key 主键索引

    alert table tea6 add primary key(id);
    
    • 1

    设置外键实现数据同步更行与删除

    create table yg(
        yg_id int(4) auto_increment,
        name char(16) not null,
        primary key(yg_id)
    );
    
    create table gz(
        gz_id int(4) not null,
        name char(16) not null,
        gz flot(7,2) not null default 0,
        index(name),
        foreign key(gz_id) peferences yg(yg_id)
                   on update cascade on delete cascade 
    );
    insert into yg(name)values('zhangsan'),('lisi');
    insert into gz(gz_id, name, gz,) values(1,'zhangsan',12000),(2,'lisi',8000);
    -- 验证 update 更新联动,注意gz表中 gz_id 变动,由 1 变成 1234
    update yg set yg_id=1234 where name='zhangsan';
    slect * from gz where name='zhangshan';
        
    -- 验证 delete 删除联动,注意gz表中,name 为 zhangsan 信息被删除
    delete from yg where name='zhagnsan';
    select * from gz where name='zhangsan';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    存储引擎配置

    查看存储引擎信息

    show engines;
    
    • 1

    查看默认存储类型

    show variables like 'default_storage_engine';
    
    • 1

    修改默认存储引擎

    set default_storage_engine=MyISAM;
    
    • 1

    修改配置文件,重启使存储引擎生效

    vi /etc/my.cnf
    [mysqld]
    ...
    default_storage_engine=MyISAM
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5

    数据的导入导出,

    • 将/etc/passwd文件导入数据库

    新建userdb库,ueser表,数据导入

    create database userdb character set utf8 collate utf8_bin;
    CREATE TABLE user(
        username varchar(24) NOT NULL,
        password varchar(48) DEFAULT 'x',
        uid int(5) NOT NULL,
        gid int(5) NOT NULL,
        fullname varchar(48),
        homedir varchar(64) NOT NULL,
        shell varchar(24) NOT NULL
    );
    --  查看导入数据文件存放的目录,一般为 /var/lib/mysql-files/passwd
    show variables like '%secure%';
    -- 将/etc/passwd文件复制到该文件下
    load data infile '/var/lib/mysql-files/passwd'
        into table userlist
        fileds terminated by ':';
    -- 为user表中每条记录田间自动编号
    alert table user add sn int(4) auto_increment primary key first;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    从数据库中导出查询结果

    • 修改导出文件存放的目录
    vi /etc/my.cnf
    [mysqld]
    secure_file_priv='/myload'
    
    重启数据库
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 查看目录,并导出数据
    show varable like "secure_file_priv";
    select * from userdb.user where uid<100
        into outfile '/myload/user2.txt'
        fields terminated by ':';
    
    • 1
    • 2
    • 3
    • 4

    操作表数据

    创建表

    create table testdb.testtable(
        name varchar(12) not null,
        gender enum('boy','girl') default 'boy',
        age int(3) not null 
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5

    删除表的所有记录

    delete from testdb.testtable
    
    • 1

    插入表数据

    insert testdb.testtable values -- 指定表字段的每个值
        ('zhangshan','boy',24),
        ('lixiaolu','girl',25),
        ('wangwu','girl',23);
    insert into testdb.testtable(name,age)  -- 只指定记录的部分字段的值
        values('Mike',22);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    更新表数据

    update testdb.testtable set age=10; -- 更新表记录中age的所有值
    update testdb.testtable set age=20  -- 只对满足条件的值更新
        where general='boy';
    
    • 1
    • 2
    • 3

    删除表数据

    delete from testdb.testtable where age < 18;    -- 删除满足条件的表记录
    delete from testdb.testtable;   -- 删除表中所有的数据
    
    • 1
    • 2

    查询及匹配条件

    表中插入数据

    insert into testdb.testtable values
        ('Jim','girl',24),
        ('Tom','boy',21),
        ('Lily','girl',20),
        ('Jerry','boy',27),
        ('Mike','boy',21)
        ;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    常用的统计函数

    select count(*) from testdb.testtable;  -- 统计表中数据的数量
    select avg(age),max(age),min(age) from testdb.testtable;    -- 平均,最大,最小
    select count(gender) from testdb.testtable where gender='boy';  -- 某个项的总数
    
    • 1
    • 2
    • 3

    字段值的数值比较

    select * from testdb.testtable where age=21;
    select * from testdb.testtable where age>21;
    select * from testdb.testtable where age=<21;
    select * from testdb.testtable where age between 20 and 24;
    
    • 1
    • 2
    • 3
    • 4

    多个条件的组合

    select * from testdb.testtable where age=<21 and gender='girl';
    select * from testdb.testtable where age>21 or gender='girl';
    select * from testdb.testtable where name in ('Jim','Tom','Mickey');
    
    • 1
    • 2
    • 3

    使用select做数学计算

    select 1234+5678;
    select 1234*5678;
    select 1234/5678;
    select name,age+15 from testdb.testtable;
    
    • 1
    • 2
    • 3
    • 4

    模糊查询,like

    _匹配单个字符,%匹配多个字符
    
    • 1
    select * from testdb.testtable where name like 'J%';
    select * from testdb.testtable where name like 'J__';
    
    • 1
    • 2

    使用正则表达式,regexp

    select * from testdb.testtable where name regexp '^J.*y$';
    -- 等同于
    select * from testdb.testtable where name like 'J%y';
    
    select * from testdb.testtable where name regexp '^J|y$';
    -- 等同于
    select * from testdb.testtable where name like 'J%' or name like '%y';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    指定字段排序,默认升序

    select * from testdb.testtable group by age;
    -- 等同于
    select * from testdb.testtable group by age asc;    -- 升序
    select * from testdb.testtable group by age desc;    -- 降序
    
    • 1
    • 2
    • 3
    • 4

    限制输出的条数,limit

    select * from testdb.testtable limit 3;
    select * from testdb.testtable group by age desc limit 3;
    
    • 1
    • 2

    分组查询,group by

    select gender,count(gender) from testdb.testtable group by gender;
    select gender as '性别',count(gender) as '人数' 
        from testdb.testtable group by gender;
    
    • 1
    • 2
    • 3

    用户授权及撤销

    create user 'syncuser'@'%' identified with mysql_native_password by '123456'; -- 创建用户
    grant all privileges on *.* to 'syncuser'@'%';  -- 授权
    grant select on *.* to 'syncuser'@'%';  -- 只授查询权限
    flush privileges; 
    show grant for 'syncuser'@'%';  -- 查看授权
    revoke all on *.* from 'syncuser'@'%'; -- 撤销授权
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    视图

    查看某个库的所有视图

    show tables status where comment='view';
    
    • 1

    作用

    1、提高了重用性;
    2、对数据库重构,却不影响程序的运行;
    3、提高了安全性能,可以对不同的用户,设定不同的视图;
    4、让数据更加清晰。
    
    • 1
    • 2
    • 3
    • 4
    /*
    测试表:user有id,name,age,sex字段
    测试表:goods有id,name,price字段
    测试表:ug有id,userid,goodsid字段
    */
    -- 1、提高了重用性;
    -- 原本的sql语句
    select a.name as username, 
           b.name as goodsname 
    from user as a, 
         goods as b, ug as c 
    where a.id=c.userid and c.goodsid=b.id;
    -- 创建一个视图
    create view other as 
        select a.name as username, 
               b.name as goodsname 
        from user as a, goods as b, ug as c 
        where a.id=c.userid and c.goodsid=b.id;
    -- 使用视图,直接代理原来的sql语句
    select * from other;
    
    -- 2、对数据库重构,却不影响程序的运行;
    /*
    测试表:usera有id,name,age字段
    测试表:userb有id,name,sex字段
    */
    create view user as 
        select a.name,a.age,b.sex 
        from usera as a, userb as b where a.name=b.name;
    -- 以上假设name都是唯一的。此时php端使用sql语句:select * from user;
    -- 就不会报错什么的。这就实现了更改数据库结构,不更改脚本程序的功能了。
    
    -- 3、提高了安全性能,可以对不同的用户,设定不同的视图;
    -- 例如:某用户只能获取user表的name和age数据,不能获取sex数据。则可以这样创建视图。示例如下:
    create view other as select a.name, a.age from user as a;
    -- 这样的话,使用sql语句:select * from other; 最多就只能获取name和age的数据,其他的数据就获取不了了。
    
    -- 4、让数据更加清晰。
    -- 让数据更加清晰。想要什么样的数据,就创建什么样的视图。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    视图的基本使用

    1、什么是视图:是一种虚拟存在的表
    2、内容与真实的表相似,包含一系列带有名称的列和行数据。
    3、视图并不在数据库中以存储的数据的形式存在。
    4、行和列的数据来自定义视图时查询所引用的基本表,并且在具体引用视图时动态生成。
    5、更新视图的数据,就是更新基表的数据
    6、更新基表数据,视图的数据也会跟着改变
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    -- 将/etc/passwd文件导入数据库
    -- 建表
    create table testdb.user(
        username char(20),
        password char(1),
        uidint(2),
        gid int(2),
        comment char(100),
        homedir char(100),
        shell char(50));
    -- 拷贝文件到指定目录
    -- cp /et/passwd /var/lib/mysql-files/
    -- 将数据导入 testdb.user 表中
    load data 
        infile "/var/lib/mysql-files/passwd"  
        into table testdb.user fields terminated 
        by ":"  lines terminated by "\n";
    -- 为 testdb.user 表添加行号及主键
    alert table testdb.user add id int(2) parimary key auto_increment first;
    -- 创建视图1 结构及数据与user表一样
    use testdb;
    create view userv1 as select * from user;
    -- 创建视图2 只有user表shell是/bin/bash 用户信息
    create view userv2 as shell from user;
    -- 对视图表和基表进行insert update delete 操作
    insert into userv1(username,uid) values("jarry",9);
    update userv1 set uid=9 where username='adm';
    delete from userv1 where uid=9;
    -- 删除视图1和视图2
    drop view userv1;
    drop view userv2;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    创建视图完全格式

    -- 快速建表 user2 表
    create table user2 select username,uid,gid from user limit3;
    -- 快速建表 info 表
    create table info select username,uid,homedir,shell form user limit 5;
    -- 查询 user2.username = info.username 的字段
    select * from user2 left join info on user2.username=info.name;
    
    -- 创建视图,关联查询建的视图  默认不允许修改视图字段的值
    -- 下面的创建是错误的
    -- create view v4 as select * from user2 left join info on user2.username=info.name;
    create view v4 as 
        select a.username as ausername,
               b.username as busername,  
               a.uid as auid,
               b.uid as buid  
        from user2 a  left join info b  on  a.username=b.username;
    -- 查看视图 v4 的所有信息
    select * from v4;
    desc v4;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    or replace 选项的使用

    -- 创建时,若视图已经存在则会替换已经有的视图
    create  or  replace view v4 as 
        select a.username as ausername,
               b.username as busername,  
               a.uid as auid,
               b.uid as buid  
        from user2 a  left join info b  on  a.username=b.username;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    with local check option

    -- local 和 cascaded 关键字决定检查的范围
    -- local 仅检查当前视图的限制
    -- cascaded 同时要满足基表的限制(默认值)
    create table user1 select username,uid,shell from user where uid>=5 and uid <=40;
    create view v1 as select username,uid from user1 where uid<=20;
    -- 操作超过视图表的条件限制(uid<=20)之后,在视图表里面查看不到,在基表里可以查看到
    update v1 set uid=21 where  username="sync";
    -- 基表在超过条件限制(uid>=5 and uid <=40),在基表里依然可以查看到
    update user1 set uid=41 where  username="ftp";
    -- 快速创建一个新表a
    create table a select * from user where uid < 10;
    -- 不写默认为CASCADED检查自己和a要满足的要求即可
    create view v3 as select * from a where uid < 10 with  check option;
    update v3 set uid=9 where username="adm";
    -- 满足自身v2的要求
    create view v2 as select * from v1 where uid >= 5 with local check option;
    update v2 set uid=9 where username="sync";
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    with cascaded check option

    create view v5 as select * from v1 where uid >= 5 with cascaded check option;
    
    • 1

    存储过程

    作用

    1、增强SQL语句的功能和灵活性;
    2、减少网络流量,从而可降低网络负载;
    3、提高数据库的访问效率;
    4、提高数据库的安全性和数据的完整性;
    5、使数据独立,达到解耦的效果。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    创建存储过程

    delimiter -- 定义定界符
        create procedure say() -- say(),必须带有括号
        begin
        select * from user id<=10;
        end 
    delimiter ; -- 把命令的定界符改回来,分号前有空格
    call say(); -- 调用存储过程名,在括号里面不写参数时,可以不加括号
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    查看存储过程

    show procedure status ;
    -- 或者
    select db,name,type from mysql.proc where name="say";
    
    • 1
    • 2
    • 3

    删除存储过程

    drop procedure say;
    
    • 1

    创建一个显示shell是 /bin/bash 的用的 存储过程

    delimiter // 
        create procedure pl()
        begin
        select count(username) from user where shell="/bin/bash";
        end 
        // 
    delimiter ;
    call pl();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    存储过程参数的使用

    /*
    in 输入参数 传递值给存储过程,必须在调用存储过程时指定,在存储过程中修改该参数的值不能;默认类型是in
    out 输出参数 该值可在存储过程内部被改变,并可返回
    inout 输入/输出参数 调用时指定,并且可被改变和返回
    */
    delimiter // 
        create procedure say2(in username char(10))
        begin 
        select username;
        select * from where username=username;
        end 
        // 
    delimiter ;
    call say2("tom");
    
    -- 创建名为p2的存储过程,可以接收用户输入shell的名字,统计user表中用户输入shell名字的个数
    delimiter // 
        create procedure p2(out number int)
        begin 
        select count(username) into @number from user where shell!="/bin/bash";
        select @number ;
        end 
        // 
    delimiter ;
    call p2(@number)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    使用循环结构

    算数运算

    set @z=1+2;select @z;
    set @x=1;set @y=2;set @z=@x*@y;select @z;
    set @x=1;set @y=2;set @z=@x-@y;select @z;
    
    /*
    declare调用变量不需要@  其他都需要
    调用变量时,有@符号的变量 如@x:调用的是用户自定义变量
    没有@符号的变量 如x:调用的是存储过程的参数变量
    */
    delimiter //
        create procedure say5(in bash char(20), in  nologin char(25), out x int , out y int)
        begin
        declare z int ;
        set z=0;
        select count(username) into  @x from user where shell=bash;
        select count(username) into  @y from user where shell=nologin;
        set z=@x+@y;
        select z;
        end
        //
    delimiter ;
    call say5("/bin/bash","/sbin/nologin",@x,@y);
    
    -- 顺序结构(if判断)当“条件成立”时执行命令序列,否则,不执行任何操作
    delimiter //
        create  procedure say6(in  x int(1) )
        begin
        if x <= 10 then
        select * from user where id <=x;
        end if;
        end
        //
    delimiter ;
    call say6(1);        -- 条件判断成立,等于1是否成立
    call say6(2);
    
    -- 定义名称为p3的存储过程,用户可以自定义显示user表记录的行数,若调用时用户没有输入行数,默认显示第1条记录
    delimiter //
    create  procedure p3(in  linenum char(10) )
        begin
        if linenum is null then
        set @linenum=1;
        select * from user where id=@linenum;
        else
        select linenum;
        select * from user where id=linenum;
        end if;
        end
        //
    delimiter ;
    call p3(null);        -- 不输入查看的行数
    call p3(3);        -- 输入查看的行数
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
  • 相关阅读:
    python---字典
    这些js原型及原型链面试题你能做对几道
    Oracle 19c LISTAGG 函数中distinct
    库存管理“智慧官”上线!北京电信基于飞桨打造主动型库存决策分析系统
    发布app项目和更新app版本
    泛微OA之获取每月固定日期
    ArrayList 源码分析扩容原理
    Serverless 架构下的 AI 应用开发
    最新发布!阿里云卓越架构框架重磅升级
    8 张图 | 剖析 Eureka 的首次同步注册表
  • 原文地址:https://blog.csdn.net/liao__ran/article/details/127593476