mysql基础2——增、删、改、查

news2024/11/15 11:19:49

文章目录

  • 一、DDL操作
    • 1.1 数据库操作
    • 1.2 表操作
    • 1.3 用户操作
    • 1.4 查看命令show
    • 1.5 获取帮助
  • 二、DCL操作
    • 2.1 用户授权
    • 2.2 查看授权
    • 2.3 取消授权
  • 三、DML操作
    • 3.1 插入insert
    • 3.2 查询select
      • 3.2.1 常规查询
      • 3.2.2 条件查询
      • 3.2.3 order by用法
      • 3.2.4 group by用法
      • 3.2.5 内连接&左连接&右连接
        • 3.2.5.1 内连接
        • 3.2.5.2 左连接
        • 3.2.5.3 右连接
        • 3.2.5.4 其他用法
    • 3.3 修改update
    • 3.4 删除delete
    • 3.5 删除truncate

一、DDL操作

1.1 数据库操作

1.查看数据库。

MariaDB [(none)]> show databases;

在这里插入图片描述
2.创建数据库qingjun。

MariaDB [(none)]> create database if not exists qingjun;

在这里插入图片描述
3.删除数据库qingjun。

MariaDB [(none)]> drop database if exists  qingjun;

在这里插入图片描述

1.2 表操作

在这里插入图片描述

1.进入数据库,创建表student,id不能为空;名字长度不能超过10;年龄是整数,不能超过255岁。

MariaDB [(none)]> use test;
MariaDB [test]> create table student(id int not null,name varchar(10),age tinyint);

在这里插入图片描述
2.查看所有表。

MariaDB [test]> show tables;

3.查看表结构。

MariaDB [test]> desc student;

在这里插入图片描述
4.创建表时添加主键,且默认值为1。

MariaDB [test]> CREATE TABLE IF NOT EXISTS baimu(id int not null default 1 primary key);

在这里插入图片描述
5.修改表结构,添加score字段,float为数据类型。

MariaDB [test]> alter table baimu add score float;

在这里插入图片描述

6.修改表结构,删除id字段。

MariaDB [test]> alter table baimu drop id;

在这里插入图片描述
7.修改表结构,修改字段属性,将score字段的NULL类型为no。

MariaDB [test]> alter table baimu modify score float not null;

在这里插入图片描述

1.3 用户操作

1.创建用户wuhan,指定密码。本地需使用密码登录数据库。

MariaDB [(none)]> create user 'wuhan'@'127.0.0.1' identified by 'citms';

在这里插入图片描述
2.创建用户beijing,不设置密码。本地无密码登录数据库,进入数据库设置用户密码。

MariaDB [(none)]> create user 'beijing'@'localhost';

在这里插入图片描述

3.创建用户lisi,设置密码。远程主机登录数据库需要使用密码登录。

MariaDB [(none)]> create user  'lisi'@'192.168.130.161'   identified by 'citms';

在这里插入图片描述
4.删除用户。

MariaDB [(none)]> drop user 'lisi'@'192.168.130.161';

在这里插入图片描述
5.查看所有用户。

select user,host from mysql.user;

在这里插入图片描述

1.4 查看命令show

1.查看支持的所有字符集。

show character set;

在这里插入图片描述

2.查看当前数据库支持的所有存储引擎。

show engines\G

在这里插入图片描述

3.查看所有库。

show databases;

在这里插入图片描述
4.查看某个库的所有表。

show tables from test;

在这里插入图片描述
5.查看某个库的某张表结构。

desc test.baimu;

在这里插入图片描述
6.查看创建库的过程。

show create database test;

在这里插入图片描述
7.查看创建表的过程。

show create table test.baimu;

在这里插入图片描述
8.查看某张表的状态。

show table  status like 'baimu'\G

在这里插入图片描述
9.查看表状态的其他用法。

//查看表名为student及其后面的所有字符长度的表状态,比如student1、student123等。
show table status like 'student%'\G;

//查看表名为student及其前面的所有字符长度的表状态,比如123student、filstudent等。
show table status like '%student'\G; 

//查看表名为student,且其后面以为字符长度的表状态,比如student1、studentp等。
show table status like 'student_'\G; 

1.5 获取帮助

1.查看如何创建数据库。

help create database;

在这里插入图片描述
2.查看如何创建表。

help create table;

在这里插入图片描述

二、DCL操作

权限类型释义
ALL所有权限
SELECT读取内容的权限
INSERT插入内容的权限
UPDATE更新内容的权限
DELETE删除内容的权限
表示方式释义
*.*所有库的所有表
db_name指定库的所有表
db_name.table_name指定库的指定表

注意事项:

  1. WITH GRANT OPTION权限不能随便使用, 被授权的用户可将自己的权限副本转赠给其他用户,说白点就是将自己的权限完全复制给另一个用户,所以不建议使用。
  2. mysql服务进程启动时会读取mysql库中的所有授权表至内存中,GRANT或REVOKE等执行权限操作会保存于表中,mysql的服务进程会自动重读授权表,并更新至内存中,对于不能够或不能及时重读授权表的命令,需要手动执行命令刷新权限。

2.1 用户授权

1.当创建用户时没有设置密码时,可以在授权时设置密码。

//创建用户不设置密码。
create user 'baimu'@'192.168.130.161';

//给用户授予只能在192.168.130.161主机上能操作所有权限,并设置用户密码。
grant  all   on  *.*   to 'baimu'@'192.168.130.161' identified by 'citms'; 

//刷新权限。
flush privileges;

2.当创建用户设置了密码,可以直接授权,不需再次设置密码,也可以再次设置密码用来修改之前密码。

//创建用户设置密码。
create user 'qingjun'@'192.168.130.161' identified by 'citms';

//给用户授予只能在192.168.130.161主机上能操作所有权限。
grant all on *.* to 'qingjun'@'192.168.130.161';

//刷新权限。
flush privileges;

3.授权一种权限,针对所有资源。

//给用户授予只能在192.168.130.161主机上使用insert插入权限,允许可以对所有库中的所有表操作。
grant insert on *.* to 'qingjun'@'192.168.130.161';

//刷新权限。
flush privileges;

4.授权一种权限,针对部分资源。

//给用户授予只能在192.168.130.161主机上使用insert插入权限,只允许对text库中的所有表进行操作。
grant insert on test.* to 'qingjun'@'192.168.130.161';

//刷新权限。
flush privileges;

5.授权用户能在所有主机上访问。

//给用户授予只能在192.168.130.161主机上使用insert插入权限,只允许对text库中的所有表进行操作。
grant insert on test.* to 'qingjun'@'%';

//刷新权限。
flush privileges;

2.2 查看授权

1.查看当前登录用户的授权信息。

show grants;

在这里插入图片描述
2.查看指定用户qingjun的授权信息。

show grants for 'qingjun'@'192.168.130.161';

在这里插入图片描述

2.3 取消授权

1.删除baimu用户对数据库的select权限。

revoke select   on *.* from 'baimu'@'192.168.130.161';

//刷新权限。
flush privileges;

在这里插入图片描述

三、DML操作

  • DML操作包括增(INSERT)、删(DELETE)、改(UPDATE)、查(SELECT),均属针对表的操作。

3.1 插入insert

1.插入一条数据。

//查看表结构。
desc student;

//往student表中插入一条数据
insert student value('2','zhangsan','22');

//查看表内容。
select * from student;

在这里插入图片描述
2.插入多条数据。

//查看表结构。
desc student;

//往student表中插入2条数据
insert student values('3','lisi','20'),('4','wangwu','30');

//查看表内容。
select * from student;

在这里插入图片描述
3.只插入一个字段值。

desc student;

//往student表中插入1条数据,只包含一个字段值,其余字段默认为空。
insert student(name) value('haha');

//查看表内容。
select * from student;

在这里插入图片描述

3.2 查询select

3.2.1 常规查询

1.一般用法。

//查看表所有字段内容。
select * from student;

//查看表中name字段内容。
select name from student;

//查看表中id,name字段内容。
select id,name from student;

在这里插入图片描述

2.使用as更改字段别名查询。

//把原有的id,name,age分别改成编号,名字,年龄。
select id as 编号,name as 名字,age as 年龄 from student;

//id不改,把name,age分别改成n,a。
select id,name as n,age as a from student;

//查看age最大的名字和年龄。
select name,max(age) as age from student;

在这里插入图片描述

3.2.2 条件查询

操作类型常用操作符
操作符>,<,>=,<=,=,!=
BETWEEN
AND
LIKE:模糊匹配
RLIKE:基于正则表达式进行模式匹配
IS NOT NULL:非空
IS NULL:空
条件逻辑操作AND
OR
NOT

1.一般用法。

//查找age>25的字段所有内容。
select * from student where age >25;

//查找age>30的name内容。
select name from student where age >30;

在这里插入图片描述
2.between用法:查找age在10~30之间的所有内容。

select * from student where age between 10 and 30;

在这里插入图片描述

3.and 的用法:查找name=tom,且age>25的所有内容。

select * from student where name = 'tom' and age > 25;

在这里插入图片描述
4.or的用法:查找name=tom,或者age>25的所有内容。

select * from student where name='tom' or age > 25;

在这里插入图片描述
5.like用法。

//查看name的结尾像u的结果。
select * from student where name like '%u';

//查看name的开头像l的结果。
select * from student where name like 'l%';

在这里插入图片描述
6.rlike用法,基于正则表达式。

//查看以m结尾的结果.
select * from student where name rlike 'm$';

//查看以l开头的结果。
select * from student where name rlike '^l'; 

//每个点代表一个字符,此处并没有表示开头结尾,所有会匹配4个字符以上的所有结果。
select * from student where name rlike '....'

//每个点代表一个字符,此处表示了开头结尾,只会匹配4个字符的所有结果.
select * from student where name rlike '^....$';

在这里插入图片描述
7.NULL和NOT NULL的用法。

//查询age为空的字段内容。
select * from student where age is NULL;

//查询age不为空的字段内容。
select * from student where age is NOT NULL;

在这里插入图片描述

3.2.3 order by用法

语法意义
ORDER BY ‘column_name’根据column_name进行升序排序
ORDER BY ‘column_name’ DESC根据column_name进行降序排序
ORDER BY ’column_name’ LIMIT 2根据column_name进行升序排序 并只取前2个结果
ORDER BY ‘column_name’ LIMIT 1,2根据column_name进行升序排序 并且略过第1个结果取后面的2个结果

1.升序,使用asc,默认省略了。

//查询student表中age字段以升序方式排列的结果。
select * from student where age is not NULL order by age asc;

在这里插入图片描述
2.降序,使用desc。

//查询student表中age字段以降序方式排列的结果.
select * from student where age is not NULL order by age desc;

在这里插入图片描述
3.根据降序结果只取前面3个结果。

//查询student表中age字段以降序方式排列,且只取前三个值.
select * from student where age is not NULL order by age desc limit 3;

在这里插入图片描述
4.根据升序结果,跳过前两个结果后取3个结果。

//查询student表中age字段以升序方式排列,去掉最前面的2个值,取第三个到第五个的三个值.
select * from student where age is not NULL order by age limit 2,3;

在这里插入图片描述

3.2.4 group by用法

1.创建一个info的表,有名称、工资、部门三列内容。

create table info(id int not null primary key auto_increment,name varchar(50) not null,department varchar(100),salary int);

在这里插入图片描述
2.插入内容。

insert info(name,department,salary) values('tom','sales',5000),('jerry','dev',20000),('zhangshan','dev',10000),('lisi','sales',30000),('wangwu','office',8000),('qianliu','financial',10000),('zhaoqi','financial',20000),('sunba','operation',25000),('zhoujiu','operation',9000),('wutian','dev',15000);

在这里插入图片描述
3.查看名字,部门,最高工资,再将这一结果组成个新组(group by的用法)

select name,department,max(salary) as salary from info group by department;

在这里插入图片描述
4.查看名字,部门,最低工资,再将这一结果组成个新组(group by的用法)

MariaDB [maqiang]> select name,department,min(salary) as salary from info group by department;

在这里插入图片描述

3.2.5 内连接&左连接&右连接

1.给info表新增一个字段jn,并修改jn字段值。

//新增字段。
alter table info add jn int not null;

//修改字段值。
update info set jn = 1 where id = 1;
update info set jn = 2 where id = 2;
update info set jn = 3 where id = 3;
update info set jn = 4 where id = 4;
update info set jn = 5 where id = 5;
update info set jn = 6 where id = 6;
update info set jn = 7 where id = 7;
update info set jn = 8 where id = 8;
update info set jn = 9 where id = 9;
update info set jn = 10 where id = 10;

在这里插入图片描述
2.创建第二张表格basic_info,该表格里定义字段job_number与第一张表里的jn是一个意思。

//创建表。
create table basic_info(job_number int not null,age int not null);

//往basic_info表里插入数据。
insert basic_info values(1,21),(3,25),(5,30),(7,26),(9,28),(10,30),(2,20);

在这里插入图片描述

3.2.5.1 内连接

  • 内连接:使用inner join,取两张表格共有的值,再生成一张新表。

1.第一种查看方法是没有改名字,用的where。

select * from info inner join basic_info where info.jn = basic_info.job_number;

在这里插入图片描述
2.第二种查看方法是把info改成a,basic_info改成b,用的on。

select * from info as a inner join basic_info as b on a.jn = b.job_number;

在这里插入图片描述

3.2.5.2 左连接

  • 左连接: 使用left join,把左边(第一张表)有的字段内容取出来,左边有但右边没有的字段补齐并留空

1.优先看jn列,先取第一张表的jn列的所有字段。此处的4,6,8 第一张表有,但第二张表没有,所以其对应的字段内容留空。

select * from info as a left join basic_info as b on a.jn = b.job_number;

在这里插入图片描述

3.2.5.3 右连接

  • 右连接:使用right join,把右边(第二张表)有的字段内容取出来,右边有但左边没有的字段补齐并留空。

1.优先看job_number列,先取第二张表的job_number列的所有字段。这里没有留空部分是因为第二张表有的字段值在第一张表里都有,无法留空。

select * from info as a right join basic_info as b on a.jn = b.job_number;

在这里插入图片描述
2.现在在第二张表里job_number字段插入11,第一张表jn字段没有11。

insert basic_info value(11,35);

在这里插入图片描述
3.执行右连接,此时会把11的值取出来并留空。优先看job_number列,先取第二张表的job_number列的所有字段。此处的11值在第二张表有,但第一张表没有,所以其对应的字段内容留空。

select * from info as a right join basic_info as b on a.jn = b.job_number;

在这里插入图片描述

3.2.5.4 其他用法

1.取两张表里的一个tom内容。

  • 以info和basic_info两张表做对比,取第一张表中name=tom,且第一张表中的jn值=第二张表中的job_number值。
select * from info,basic_info where info.name = 'tom' and info.jn = basic_info.job_number;

在这里插入图片描述

2.取两张表里的一个内容的某一项(只取name和age)

  • 条件一:从第一张表info里取name字段的某个值,从第二张表basic_info里age字段的某一个值。
  • 条件二:从第一张表info里取的name字段值=tom。
  • 条件三:第一张表info的jn字段值 = 第二张表basic_info的job_number字段值。
select info.name,basic_info.age from info,basic_info where info.name = 'tom' and info.jn = basic_info.job_number; 

在这里插入图片描述

3.3 修改update

1.修改student表里的age=NULL所在的记录对应的name字段值为hehe。

update student set name = 'hehe' where age is NULL;

在这里插入图片描述
2.修改student表里的age=NULL所在的记录对应的age字段值为120。

update student set age = 120 where age is NULL;   

在这里插入图片描述

3.4 删除delete

1.删除student表里的id=2的那一行的数据。

delete from student where id = 2;

在这里插入图片描述
2.删除表里所有内容。

delete from student;

在这里插入图片描述
3.删除baimu这张表。

drop table  baimu;

在这里插入图片描述

3.5 删除truncate

语句类型特点
deleteDELETE删除表内容时仅删除内容,但会保留表结构。
DELETE语句每次删除一行,并在事务日志中为所删除的每行记录一项。
可以通过回滚事务日志恢复数据。
非常占用空间。
truncate删除表中所有数据,且无法恢复。
表结构、约束和索引等保持不变,新添加的行计数值重置为初始值。
执行速度比DELETE快,且使用的系统和事务日志资源少。
通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
对于有外键约束引用的表,不能使用TRUNCATE TABLE删除数据。
不能用于加入了索引视图的表。

1.使用delete删除表内容,再插入新内容。此时再创建字段时,其id接着之前的来。删除之前最后一个id为10,那么用delete删除之后再创建时的id为11。

//删除整个表内容。
delete from info;

//新插入一条内容。
insert info(name,department,salary) values('tom','sales',5000);

在这里插入图片描述

2.使用truncate删除表内容,再插入新内容,新创建字段其id会重置为1。

//删除表内容。
truncate info;

//新插入一条内容。
insert info(name,department,salary) values('tom','sales',5000);

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/697023.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

输入年月日,日期; 求这个日期在这一年中是第几天

输入年月日,日期; 求这个日期在这一年中是第几天 1.问题 输入年月日,日期; 求这个日期在这一年中是第几天 2.代码 利用Java中的库函数 LocalDate 是Java 8引入的一个日期类&#xff0c;用于表示日期&#xff0c;不包含时间和时区信息 到时候直接调用方法可以获取对应的天数 p…

javaee ajax请求后台 不刷新页面

jsp页面 Reg.jsp <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd&qu…

【Python】经过一个点P3的一条直线垂直于已知直线,求交点坐标

一个高中数学题目&#xff0c;已经点P1和点P2构成直线&#xff0c;经过P3点做已知直线的垂线&#xff0c;求垂线与已知直线的交点坐标。 p1 [100, 15] p2 [16, 85] p3 [-50, 100] if p2[0] - p1[0] 0:# p1 p2 构成垂线&#xff0c;那么垂直线就是一条水平线x p1[0]y p3…

kafka3.x 入门 常用命令(二)

创建主题 kafka-topics.sh --bootstrap-server hadoop100:9092 --create --partitions 1 --replication-factor 3 --topic first查看主题列表 kafka-topics.sh --bootstrap-server hadoop100:9092 --list查看主题详情 kafka-topics.sh --bootstrap-server hadoop100:9092 --…

element-ui—textarea多行输入框—字数限制及优化

属性作用 show-word-limit &#xff1a;是否显示数字显示 maxlength“300”&#xff1a;设置最大值 class“public-showWordLimit”&#xff1a; 优化数字的显示的位置 :autosize “{ minRows: 2, maxRows: 8 }” &#xff1a;根据输入字符长度设置动态高度 2.代码案例 <…

vue3+vite安装配置element-plus

配置 element-plus 1. 安装 yarn add element-plus element-plus/icons-vue2. 按需引入插件 yarn add unplugin-vue-components unplugin-auto-import -D3. 配置vite.config.ts // vite.config.ts import AutoImport from unplugin-auto-import/vite import Components fro…

MySQL数据库的主从复制与读写分离

MySQL数据库的主从复制与读写分离 一、主从复制原理1、MySQL支持主从复制类型2、主从复制的原理3、主从复制的架构4、mysql主从复制延迟4、slave从服务器的配置5、验证主从复制的效果6、从服务器的故障问题解决1、遇到Slave_IO_Running:NO的情况2、遇到Slave_SQL_Running&#…

C++ - 哈希的应用

前面的文章中我们讲解了如何进行哈希表的构建以及使用实现的哈希表来模拟实现unordered_map&#xff0c;在本文中我们将继续来讲解一下哈希的应用。 位图 问题引入 首先我们来引入一个问题&#xff1a;给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&am…

Pyside6-第十三篇-布局(最后一章废话-理论篇)

本篇Pyside6的第十三篇&#xff0c;新知识点&#xff0c;布局。 布局的方式有5种。着重挑选几种将 QVBoxLayout&#xff08;垂直布局&#xff09;&#xff1a;按垂直方向排列小部件。 QHBoxLayout&#xff08;水平布局&#xff09;&#xff1a;按水平方向排列小部件。 QGridLay…

关于函数和变量命名

标识符命名基本要求 标识符是指用来识别某个实体的一个符号&#xff0c;在不同的应用环境下有不同的含义。 在计算机编程语言中&#xff0c;标识符是用户编程时使用的名字&#xff0c;用于给变量、常量、函数、语句块等命名&#xff0c;以建立起名称与使用之间的关系。 C语言…

jdk代理和cglib代理(实例推导)

目录 jdk代理和cglib代理&#xff08;实例推导&#xff09;jdk动态代理Cglib动态代理总结 jdk代理和cglib代理&#xff08;实例推导&#xff09; 更深层的探究jdk和cglib动态代理的原理 jdk动态代理 jdk动态代理&#xff08;简单实现&#xff09; 定义一个House的房源类型接口…

05 2024考研408-计算机组成原理第五章-中央处理器学习笔记

文章目录 前言一、CPU的功能与基本结构1.1、CPU的功能1.2、运算器与控制器需要实现功能1.3、运算器的基本结构1.3.1、基本结构构成&#xff08;七个部分&#xff09;1.3.2、各个部件详细介绍①算数逻辑运算单元②通用寄存器组&#xff08;介绍数据通路的基本结构2个&#xff09…

Python教程(1)——python环境的下载与安装

Python教程(1)——python环境的下载与安装 下面是下载并安装Python解释器的具体步骤&#xff0c;非常详细&#xff0c;保姆级别的教程&#xff0c;初学者一步一步的按照操作。 下载python运行环境 访问官方网站 在浏览器中打开Python的官方网站&#xff0c;网址为 https://…

【PyTest】玩转HTML报告:修改、汉化和优化

前言 Pytest框架可以使用两种测试报告&#xff0c;其中一种就是使用pytest-html插件生成的测试报告&#xff0c;但是报告中有一些信息没有什么用途或者显示的不太好看&#xff0c;还有一些我们想要在报告中展示的信息却没有&#xff0c;最近又有人问我pytest-html生成的报告&a…

vue中由 window.open转为二进制流下载 遇到下载之后无法打开或乱码的坑 (responseType: ‘blob‘ 无效)

我项目中 request.js文件用的是 axios请求的. 如果使用 window.open 下载的话没有太多要求了,但是安全性不行. 如果使用 二进制流的话就需要设置: responseType: blob (设置请求返回类型) function exportData(orgId, personName, gender) {return request({url: /console/e…

时钟、时钟域

1.1 时钟 时钟信号是一个按一定电压幅度&#xff0c;一定时间间隔连续发出的脉冲信号。 脉冲信号之间的时间间隔称为周期&#xff1a;在单位时间内所产生的脉冲个数称为频率&#xff0c;频率的标准计量单位是Hz&#xff08;赫兹&#xff09; 每一次时钟脉冲到来&#xff0c;芯…

yolov8-03训练自己的数据集并保存推理结果

目标&#xff1a;将推理结果保存为xyxy形式&#xff0c;并以 pkl 格式保存 主要采取了两种方式&#xff0c;一种是阅读源码&#xff0c;通过CIL的方式保存结果。 一种是在IDE内&#xff0c;通过python代码的形式。 查看推理相关的源码&#xff0c;探索保存结果的相关信息。 在…

PySide6/PyQT 之应用程序最小化到系统托盘

前言 在使用 PySide6/PyQT 时&#xff0c;应用程序默认只会在任务栏展示一个初始图标。很显然&#xff0c;这是不够人性化的。 而在使用微信时候&#xff0c; 按下键盘的Esc&#xff0c;就是隐藏窗口&#xff1b;按下键盘的快捷键 Ctrl Alt W就是显示或隐藏窗口&#xff1…

【Axure高保真原型】多选树穿梭框选择器

今天和大家分享多选树穿梭框的原型模板&#xff0c;左侧多选树选择子级选项后&#xff0c;可以在右侧看到对应的标签&#xff0c;取消选中也会删除对应标签。多选树可以通过选中或取消选中父级自动选中或取消选对应的子级&#xff0c;也可以选中或取消选子级自动反选父级。右侧…

首届“天网杯”网络安全大赛启动 | 赛宁网安提供全面技术支撑

​​6月25日&#xff0c;由中华人民共和国公安部、天津市人民政府指导&#xff0c;天津市公安局、天津市委网信办、天津市工信局、天津市滨海新区人民政府、公安部第一研究所、国家计算机病毒应急处理中心共同主办&#xff0c;南京赛宁信息技术有限公司提供全面技术支撑的首届“…