GVKun编程网logo

MySQL 数据库查询与数据操作:使用 ORDER BY 排序和 DELETE 删除记录

1

在这篇文章中,我们将为您详细介绍MySQL数据库查询与数据操作:使用ORDERBY排序和DELETE删除记录的内容。此外,我们还会涉及一些关于azureVMbackupdelete失败softdele

在这篇文章中,我们将为您详细介绍MySQL 数据库查询与数据操作:使用 ORDER BY 排序和 DELETE 删除记录的内容。此外,我们还会涉及一些关于azure VM backup delete 失败soft delete、C++ delete 和 delete []的区别、C++ 中的 delete vs delete[] 运算符、C++中 delete 和 delete[] 的区别的知识,以帮助您更全面地了解这个主题。

本文目录一览:

MySQL 数据库查询与数据操作:使用 ORDER BY 排序和 DELETE 删除记录

MySQL 数据库查询与数据操作:使用 ORDER BY 排序和 DELETE 删除记录

使用 ORDER BY 进行排序

使用 ORDER BY 语句按升序或降序对结果进行排序。

ORDER BY 关键字默认按升序排序。要按降序排序结果,使用 DESC 关键字。

示例按名称按字母顺序排序结果:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  password="yourpassword",
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "SELECT * FROM customers ORDER BY name"

mycursor.execute(sql)

myresult = mycursor.fetchall()

for x in myresult:
  print(x)

ORDER BY DESC

使用 DESC 关键字以降序排序结果。

示例按名称以字母逆序排序结果:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  password="yourpassword",
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "SELECT * FROM customers ORDER BY name DESC"

mycursor.execute(sql)

myresult = mycursor.fetchall()

for x in myresult:
  print(x)

删除记录

您可以使用"DELETE FROM"语句从现有表格中删除记录:

示例删除地址为"Mountain 21"的记录:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  password="yourpassword",
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "DELETE FROM customers WHERE address = ''Mountain 21''"

mycursor.execute(sql)

mydb.commit()

print(mycursor.rowcount, "条记录已删除")

重要提示:请注意语句 mydb.commit()。这是必需的,以使更改生效,否则不会对表格进行更改。

请注意DELETE语法中的WHERE子句:WHERE子句指定应删除哪些记录。如果省略WHERE子句,将删除所有记录!

防止SQL注入

通常认为,转义任何查询的值都是一种良好的做法,甚至在删除语句中也是如此。

这是为了防止SQL注入,这是一种常见的网络黑客技术,可以破坏或滥用您的数据库。

mysql.connector 模块使用占位符 %s 在删除语句中转义值:

示例使用占位符 %s 方法转义值:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  password="yourpassword",
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "DELETE FROM customers WHERE address = %s"
adr = ("Yellow Garden 2", )

mycursor.execute(sql, adr)

mydb.commit()

print(mycursor.rowcount, "条记录已删除")

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

azure VM backup delete 失败soft delete

azure VM backup delete 失败soft delete

今天用azure 对虚拟机vm 进行备份后,想把vault backup 删除,发现有问题,后来查了文档:https://docs.microsoft.com/en-us/azure/backup/backup-azure-security-feature-cloud#enabling-and-disabling-soft-delete

发现要解除soft delete:

(要删除这个resource group, 发现有这个备份vault 还在)。

C++ delete 和 delete []的区别

C++ delete 和 delete []的区别

转载自https://blog.csdn.net/cbNotes/article/details/38900799

 

1.我们通常从教科书上看到这样的说明:
delete 释放new分配的单个对象指针指向的内存
delete[] 释放new分配的对象数组指针指向的内存
那么,按照教科书的理解,我们看下下面的代码:

int *a = new int[10];
delete a;        //方式1
delete [] a;     //方式2

肯定会有很多人说方式1肯定存在内存泄漏,是这样吗?

(1). 针对简单类型 使用new分配后的不管是数组还是非数组形式内存空间用两种方式均可 如:
 

int *a = new int[10];
delete a;
delete [] a;


   此种情况中的释放效果相同,原因在于:分配简单类型内存时,内存大小已经确定,系统可以记忆并且进行管理,在析构时,系统并不会调用析构函数,
   它直接通过指针可以获取实际分配的内存空间,哪怕是一个数组内存空间(在分配过程中 系统会记录分配内存的大小等信息,此信息保存在结构体_CrtMemBlockHeader中,

(2). 针对类Class,两种方式体现出具体差异
   当你通过下列方式分配一个类对象数组:

class A
{
private:
    char *m_cBuffer;
    int m_nLen;
public:
    A()
    {
        m_cBuffer = new char[m_nLen];
    }
    ~A()
    {
        delete [] m_cBuffer;
    }
};
A *a = new A[10];
delete a; 
/*仅释放了a指针指向的全部内存空间但是只调用了a[0]对象的析构函数 
剩下的从a[1]到a[9]这9个用户自行分配的m_cBuffer对应内存空间将不能释放 
从而造成内存泄漏*/
delete [] a;     
/*调用使用类对象的析构函数释放用户自己分配内存空间并且   
释放了a指针指向的全部内存空间
*/


所以总结下就是,如果ptr代表一个用new申请的内存返回的内存空间地址,即所谓的指针,那么:
   delete   ptr   代表用来释放内存,且只用来释放ptr指向的内存。
   delete[]   rg   用来释放rg指向的内存,!!还逐一调用数组中每个对象的destructor!!
   对于像int/char/long/int*/struct等等简单数据类型,由于对象没有destructor,所以用delete 和delete [] 是一样的!但是如果是C++对象数组就不同了!

关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。
对于 (1),上面提供的程序已经证明了 delete[] 和 delete 是等同的。但是对于 (2),情况就发生了变化。
我们来看下面的例子,通过例子的学习了解C++中的delete和delete[]的使用方法

#include <iostream>
using namespace std;
class Babe
{
public:
    Babe()
    {
        cout << "Create a Babe to talk with me" << endl;
    }
    ~Babe()
    {
        cout << "Babe don''t go away,listen to me" << endl;
    }
};
int main()
{
    Babe* pbabe = new Babe[3];
    delete pbabe;
    pbabe = new Babe[3];
    delete []pbabe;
    return 0;
}


结果是:


Create a Babe to talk with me
Create a Babe to talk with me
Create a Babe to talk with me
Babe don''t go away,listen to me
Create a Babe to talk with me
Create a Babe to talk with me
Create a Babe to talk with me
Babe don''t go away,listen to me
Babe don''t go away,listen to me
Babe don''t go away,listen to me


大家都看到了,只使用delete的时候只出现一个 Babe don''t go away,listen to me,而使用delete[]的时候出现3个 Babe don''t go away,listen to me。不过不管使用delete还是delete[]那三个对象的在内存中都被删除,既存储位置都标记为可写,但是使用delete的时候只调用了pbabe[0]的析构函数,而使用了delete[]则调用了3个Babe对象的析构函数。

你一定会问,反正不管怎样都是把存储空间释放了,有什么区别。答:关键在于调用析构函数上。此程序的类没有使用操作系统的系统资源(比如:Socket、File、Thread等),所以不会造成明显恶果。如果你的类使用了操作系统资源,单纯把类的对象从内存中删除是不妥当的,因为没有调用对象的析构函数会导致系统资源不被释放,如果是Socket则会造成Socket资源不被释放,最明显的就是端口号不被释放,系统最大的端口号是65535(216 _ 1,因为还有0),如果端口号被占用了,你就不能上网了,呵呵。如果File资源不被释放,你就永远不能修改这个文件,甚至不能读这个文件(除非注销或重器系统)。如果线程不被释放,这它总在后台运行,浪费内存和CPU资源。这些资源的释放必须依靠这些类的析构函数。所以,在用这些类生成对象数组的时候,用delete[]来释放它们才是王道。而用delete来释放也许不会出问题,也许后果很严重,具体要看类的代码了.

 

C++ 中的 delete vs delete[] 运算符

C++ 中的 delete vs delete[] 运算符

C ++中的delete和运算符有什么区别?delete[]

答案1

小编典典

运算符释放内存并为使用创建的delete单个对象调用析构函数new

运算符为使用创建的delete []对象数组释放内存并调用析构函数new []

使用delete返回的指针new []或返回delete []的指针new会导致未定义的行为。

C++中 delete 和 delete[] 的区别

C++中 delete 和 delete[] 的区别

C++中 delete 和 delete[] 的区别

当调用delete的时候,系统会自动调用已分配的对象的析构函数。当我们用new [] 分配的对象是基本数据类型时,用delete和delete [] 没有区别。但是,当分配的对象是自定义对象时,二者不能通用。一般来说使用new分配的对象,用delete来释放。用new[] 分配的内存用delete [] 来逐个释放。

转自  原文

c++中对new申请的内存的释放方式有delete和delete[两种方式,到底这两者有什么区别呢?

1.我们通常从教科书上看到这样的说明:

delete 释放new分配的单个对象指针指向的内存

delete[] 释放new分配的对象数组指针指向的内存

那么,按照教科书的理解,我们看下下面的代码:

 

 

1

2

3

int *a = new int[10];

delete a;        //方式1

delete [] a;     //方式2

肯定会有很多人说方式1肯定存在内存泄漏,是这样吗?

(1). 针对简单类型 使用new分配后的不管是数组还是非数组形式内存空间用两种方式均可 如:

 

 

1

2

3

int *a = new int[10];

delete a;

delete [] a;

此种情况中的释放效果相同,原因在于:分配简单类型内存时,内存大小已经确定,系统可以记忆并且进行管理,在析构时,系统并不会调用析构函数,

它直接通过指针可以获取实际分配的内存空间,哪怕是一个数组内存空间(在分配过程中 系统会记录分配内存的大小等信息,此信息保存在结构体_CrtMemBlockHeader中,

具体情况可参看VC安装目录下CRTSRCDBGDEL.cpp)

(2). 针对类Class,两种方式体现出具体差异

当你通过下列方式分配一个类对象数组:

 

 

1

2

3

4

5

6

7

8

9

10

11

12

  class A

   {

   private:

      char *m_cBuffer;

      int m_nLen;

   public:

      A(){ m_cBuffer = new char[m_nLen]; }

      ~A() { delete [] m_cBuffer; }

   };

   A *a = new A[10];

   delete a;         //仅释放了a指针指向的全部内存空间 但是只调用了a[0]对象的析构函数 剩下的从a[1]到a[9]这9个用户自行分配的m_cBuffer对应内存空间将不能释放 从而造成内存泄漏

   delete [] a;      //调用使用类对象的析构函数释放用户自己分配内存空间并且   释放了a指针指向的全部内存空间

所以总结下就是,如果ptr代表一个用new申请的内存返回的内存空间地址,即所谓的指针,那么:

delete   ptr   代表用来释放内存,且只用来释放ptr指向的内存。 

delete[]   rg   用来释放rg指向的内存,!!还逐一调用数组中每个对象的destructor!!

对于像int/char/long/int*/struct等等简单数据类型,由于对象没有destructor,所以用delete 和delete [] 是一样的!但是如果是C++对象数组就不同了!

关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。 

对于 (1),上面提供的程序已经证明了 delete[] 和 delete 是等同的。但是对于 (2),情况就发生了变化。

我们来看下面的例子,通过例子的学习了解C++中的delete和delete[]的使用方法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

#include <iostream>

using namespace std;

/////////class Babe

class Babe

{

public:

    Babe()

    {

        cout << \"Create a Babe to talk with me\" << endl;

    }

    ~Babe()

    {

        cout << \"Babe don\''t Go away,listen to me\" << endl;

    }

};

//////////main function

int main()

{

    Babe* pbabe = new Babe[3];

    delete pbabe;

    pbabe = new Babe[3];

    delete pbabe[];

    return 0;

}

结果是:

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

Create a babe to talk with me

 

Create a babe to talk with me

 

Create a babe to talk with me

 

Babe don\''t go away,listen to me

 

Create a babe to talk with me

 

Create a babe to talk with me

 

Create a babe to talk with me

 

Babe don\''t go away,listen to me

 

Babe don\''t go away,listen to me

 

Babe don\''t go away,listen to me

大家都看到了,只使用delete的时候只出现一个 Babe don’t go away,listen to me,而使用delete[]的时候出现3个 Babe don’t go away,listen to me。不过不管使用delete还是delete[]那三个对象的在内存中都被删除,既存储位置都标记为可写,但是使用delete的时候只调用了pbabe[0]的析构函数,而使用了delete[]则调用了3个Babe对象的析构函数。你一定会问,反正不管怎样都是把存储空间释放了,有什么区别。答:关键在于调用析构函数上。此程序的类没有使用操作系统的系统资源(比如:Socket、File、Thread等),所以不会造成明显恶果。如果你的类使用了操作系统资源,单纯把类的对象从内存中删除是不妥当的,因为没有调用对象的析构函数会导致系统资源不被释放,如果是Socket则会造成Socket资源不被释放,最明显的就是端口号不被释放,系统最大的端口号是65535(216 _ 1,因为还有0),如果端口号被占用了,你就不能上网了,呵呵。如果File资源不被释放,你就永远不能修改这个文件,甚至不能读这个文件(除非注销或重器系统)。如果线程不被释放,这它总在后台运行,浪费内存和CPU资源。这些资源的释放必须依靠这些类的析构函数。所以,在用这些类生成对象数组的时候,用delete[]来释放它们才是王道。而用delete来释放也许不会出问题,也许后果很严重,具体要看类的代码了.

关于MySQL 数据库查询与数据操作:使用 ORDER BY 排序和 DELETE 删除记录的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于azure VM backup delete 失败soft delete、C++ delete 和 delete []的区别、C++ 中的 delete vs delete[] 运算符、C++中 delete 和 delete[] 的区别等相关内容,可以在本站寻找。

本文标签: