检测数据库表名是否存在

检测数据库表名是否存在,第1张

if not exists (

select  from sysobjects

where xtype='U'

and name='table_name')

create table table_name

( id int)

很简单,就是在创建之间,先检查是否存在这个名字的数据库

然后根据自己的需要,进行后续的 *** 作

如果存在

1先删除,这样就可以建立新的数据库了

2保留原来的数据库,将新的数据库取一个原来不存在的名字,

如果不存在

1直接建立新数据库,

完毕,over,^_^

首先,没有数据库是能够建立连接的,但这只是和mysql服务器相连,而不是和某个具体的数据库,所以,这样的连接,意义不大(不知道你用什么 *** 作mysql,所以没有给出具体连接字符串)

如果建立好了连接,判断数据库是否存在就简单了

因为mysql中有一个数据库information_schema(这应该是你知道的),而这张数据库中有一张表schemata,是用来存储其他数据库信息的,你用

select

schema_name

from

schemata;

查询一下,所有的数据库就出来了。

ps

我不知道你用的什么和mysql相连的,所以,告诉你的都是通用的方法。如果有问题,再hi我

1查询生命周期

在进入正题时候,我们先来了解EF Core查询的生命周期。

11LINQ查询会由Entity Framework Core处理并生成给数据库提供程序可处理的表示形式(说白了就是生成给数据库可识别数据形式)。

发送的查询结果(查询表示形式)会被缓存,以便每次执行查询时无需进行11中处理。

12查询结果(查询表示形式)会传递到数据库提供程序

数据库提供程序会识别出查询的哪些部分可以在数据库中求值。

查询的这些部分会转换为特定数据库的查询语言(例如,关系数据库的T-SQL)。

一个或多个查询会发送到数据库并返回结果集(返回的是数据库中的值,而不是实体实例中的)。

13对于结果集中的每一项

131如果这是跟踪查询(后续会讲到),EF会检查数据是否表示已在上下文实例的更改跟踪器中的实体中。

如果是,则会返回现有实体。

如果不是,则会创建新实体、设置更改跟踪并返回该新实体。

132如果这是非跟踪查询(后续会讲到),EF会检查数据是否表示已在此查询的结果集中的实体中。

如果是,则会返回现有实体。非跟踪查询使用弱引用跟踪已返回的实体。如果具有相同标识的上一个结果超出范围,并运行垃圾回收,则可能会获得新的实体实例。

如果不是,则会创建新实体并返回该新实体。

14执行查询时

当调用LINQ运算符时,只会生成查询的内存中表示形式。当我们使用查询结果(查询表示形式)时才会发送到数据库。导致查询发送到数据库的最常见 *** 作如下:

在for循环中循环访问结果:

var blogs = from b in _contextBlog

select new

{

bBlogId,

bUrl

};

//触发数据库查询

foreach(var blog in blogs)

{

var id = blogBlogId;

}

当我们执行完LINQ运算符的时候,从SQL Server Profiler监控里面可以看到,并没有执行的SQL语句,也就是说查询结果blogs并没有立即发送给数据库获取返回数据结果集。

而当我们调试进去for循环时候,SQL Server Profiler监控里面可以看到出现了执行SQL语句。也就是说这时候查询结果blogs才执行发送给数据库返回结果集。

使用ToList、ToArray、Single、Count等运算符

_contextBlogToList();

_contextBlogToArray();

_contextBlogCount();

_contextBlogSingle();

_contextBlogFirst();

执行这种形式运算符也会立即发送到数据库获取结果集的。具体执行过程呈现,这里大伙自行测试吧。

将查询结果数据绑定到UI

2跟踪查询与非跟踪查询

在1小节生命周期里面我们有提及过跟踪与非跟踪查询,现在我们来了解下这两种查询区别。

21跟踪查询

返回实体类型的查询是默认会被跟踪的,这表示如果这些实体实例有更改行为,会通过SaveChanges()持久化将更改的值更新到数据库中,但是如果更改的值跟实体实例的值相同,则不会持久化提交数据到数据库,这就是跟踪查询。在以下示例中,将检测到对博客链接所做的更改,并在 SaveChanges() 期间将这些更改持久化到数据库中。

//返回blog实体类型的查询是默认会被跟踪

var blog = _contextBlogSingleOrDefault(b => bBlogId == 1);

//检测对博客链接所做的更改

blogUrl = "1";

//持久化保存到数据库中

_contextSaveChanges();

实体初始链接值是1,当我们点击Save按钮保存的时候,检测到对博客链接所做的更改值还是1的时候,并不会提交更改值到数据库中的。看看下图SQL Server Profiler监控就知道,并没有监控到对应有更新的T-SQL语句,也就是说并没有执行更新 *** 作:

当我们再把链接值更改为2点击保存时候,EF Core检测到博客链接值已经从1更改为2,就会持久化保存到数据库中。

blogUrl = "2";

废话少说,直接上图:

22非跟踪查询

如果不需要更新从数据库中检索到的实体,则应使用非跟踪查询。可以将单个查询替换为非跟踪查询。

var blogs = contextBlogs

//不用跟踪查询

AsNoTracking()

ToList();

//或者在上下文实例级别更改默认跟踪行为

contextChangeTrackerQueryTrackingBehavior = QueryTrackingBehaviorNoTracking;

var blogs = contextBlogsToList();

还是一样老谭秘方事例,当你加上非跟踪查询标识后,无论怎么更改博客链接值,都不会持久化保存数据到数据库中的。

var blogs = _contextBlog

//不用跟踪查询

AsNoTracking()

SingleOrDefault(m => mBlogId == 1);

blogsUrl = "2";

_contextSaveChanges();

直接上图跟踪结果:

在这相信大家从该小节跟踪与非跟踪查询中事例描述中总算对1小节查询生命周期有一定理解吧。

23跟踪和自定义投影

即使查询的结果类型不是实体类型,默认情况下EF Core也会跟踪结果中包含的实体类型。在以下返回匿名类型的查询中,结果集中的Blog实例会被跟踪。

var blog = contextBlogs

Select(b =>

new

{

Blog = b,

PostCount = bPostsCount()

});

如果结果集包含来自LINQ组合的实体类型,EF Core将跟踪它们。

var blog = contextBlogs

Select(b =>

new

{

Blog = b,

Post = bPostsOrderBy(p => pRating)LastOrDefault()

});

如果结果集不包含任何实体类型,则不会执行跟踪。在以下查询中,我们返回匿名类型(具有实体中的某些值,但没有实际实体类型的实例)。查询中没有任何被跟踪的实体。

var blog = contextBlogs

Select(b =>

new

{

Id = bBlogId,

Url = bUrl

});

EF Core支持执行顶级投影中的客户端评估。如果EF Core具体化实体实例以进行客户端评估,则会跟踪该实体实例。此处,由于我们要将blog实体传递到客户端方法StandardizeURL,因此EF Core也会跟踪博客实例。

var blogs = contextBlogs

OrderByDescending(blog => blogRating)

Select(blog => new

{

Id = blogBlogId,

Url = StandardizeUrl(blog)

})

ToList();

public static string StandardizeUrl(Blog blog)

{

var url = blogUrlToLower();

if (!urlStartsWith(">

我遇到的有2种

查询表报错 (只能重命名表,重新创建表)

查询数据mysql崩溃

为了防止数据丢失,提前设置备份 主从设置,开启log-bin 日志,条件可以的话使用固态硬盘+UPS ,避免异常断电

以上就是关于检测数据库表名是否存在全部的内容,包括:检测数据库表名是否存在、create database建立数据库重复、php *** 作MySQL数据库判断多个数据表是否存在,不存在就创建要怎么写呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9737403.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存