热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#数据操作系列-1.SQL基础操作

前篇介绍了一些数据库的基本概念和以及一些常见的数据库,让我们对数据库有了一个初步的认识。这一篇我们将继续为C#数据操作的基础填上一个空白-SQL语句。SQL(StructuredQueryLanguage,结构化查询语言)是一种特定的编程语言,用于管理数据库系统,操作数据甚至编写一些程序。当然,一方面因为时间问题,一方面因为各大数据库的区别(当然了,还有就是个人对SQL研究并不是那么深)所以这一篇

0.前言

前篇介绍了一些数据库的基本概念和以及一些常见的数据库,让我们对数据库有了一个初步的认识。这一篇我们将继续为C#数据操作的基础填上一个空白-SQL语句。

SQL(Structured Query Language,结构化查询语言)是一种特定的编程语言,用于管理数据库系统,操作数据甚至编写一些程序。

当然,一方面因为时间问题,一方面因为各大数据库的区别(当然了,还有就是个人对 SQL 研究并不是那么深)所以这一篇就从SQL的基本操作入手,带领大家一起看看SQL的世界。

1. SQL的分类

在SQL的世界里,被分割为两个部分:DML(Data Manipulation Language 数据操纵语言)、DDL(Database Definition Language 数据定义语言)。当然,也有很多其他的分法,这里参照了机械工业出版社出版的《计算机科学丛书- 数据库系统概念》。

1.1 DML

数据操纵语言,用户可以凭此来访问或者操纵那些被结构化存储起来的数据。DML提供了以下功能:

  • 对存储在数据库的数据进行检索(select)
  • 在数据库中添加新的数据(insert)
  • 修改数据库中的数据(update)
  • 删除数据库中的某些数据(delete)

简单的概括起来就是增删改查,对于开发而言这是一项枯燥乏味的工作,当然也是每个程序必不可少的工作。如果你见到这个词:crud,不要诧异,这是开发对增删改查的一种缩写(create,read,update,delete)。

在技术的演变过程中,为了更快更好的增删改查,有一些大牛开发出了一系列的ORM框架,比如C#里最出名的EntityFramework、与Hibernate同源的NHibernate等等。

1.2 DDL

数据定义语言,用户可以用来创建数据库、修改数据库属性、删除数据库,新建表、视图,修改表、视图,删除表、视图等。与DML不同的是,DDL操作的对象从数据转变成了承载数据的实体或者与操作数据的实体。

还有与DML不同的一点是,DDL更多的会使用 create、alter、drop等关键字(分别用来 创建、修改、销毁)。

1.3 方言

如今的城市人们来自五湖四海,有的人用普通话,有的人还是一口流利的家乡话。与之相同的就是在数据库这个江湖里,各大门派都在标准SQL里添加了自己的东西,让SQL成了一个操持着五湖四海的方言的大家族。比如说微软的Transcat-SQL和PL/SQL。

2. 一些简单操作

这里先简单介绍一下通用SQL下的操作:

2.1 创建数据库

create database test;

这是一个简单的创建数据库的SQL语句,这是标准SQL的一部分。效果就是创建一个名字为test的数据库,字符集等属性是系统的默认值。

当然,在SQL Server里可以通过以下方式指定字符集:

create database 数据库名 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; -- 使用gbk
CREATE DATABASE 数据库名 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; -- 使用utf8

这是在开发过程中最常用的创建数据库方式。

2.2 创建表

数据表是数据库里最重要的一个实体,我们大概演示一下如何通过sql语句创建一个表:

create table demo
(
	[key] int identity primary key ,
    [name] varchar(20)
)
go

SQL 创建表的格式如下:

create table <表名>
(
    [属性名] <类型>  [params...配置]
)

如果有第二个属性,则在第一个之后添加一个逗号,然后继续按照格式声明。

其中 属性名和类型是必须的,配置则可有可无。

常见配置项:

  • identity 表示该列是个自增列,一般是起始1,增长步长为1
  • primary key 表示该列是主键列,只能有一个主键
  • not null 表示该字段非空,如果是空值进来则会报错
  • unique 表示该字段的值不能出现重复

而数据类型则因为数据库不同会有一些细微的差别,所以这里就不错过多介绍了。

2.3 查询

一个简单的查询:

select * from demo;

表示查询该表的所有数组。

然后更进一步,可以限制查询条件:

select * from demo where <条件>;

注意一下这里的条件里的等值判断用的是一个等号,而不像开发语言里用的是双等号。

这时候发现我们用不了那么多的字段,然后筛选出要显示的字段:

select <字段01>,<字段02>,<字段03> from [表名] where <条件>

这里简单介绍一下查询,当然还有很多没有一一介绍,在后续的章节会把这部分补齐的。

2.4 添加数据

在查询之前,我们得先保证数据表里有数据,所以我们看看如何插入数据吧。

插入单条记录:

insert into [表名](<字段1>,<字段2>,<字段3>) values('值1','值2','值3')

在表名后面跟括号,括号内写入要插入值的字段,然后values关键字后面用括号包裹起来的一组值便是要插入的值。插入值要与字段名一一对应。

如果要插入多条记录呢?

insert into [表名](<字段1>,<字段2>,<字段3>) values('值1','值2','值3'),('值1','值2','值3')

如果需要插入多条的话,将数据用括号包裹起来,然后依次跟在values后面。

2.5 修改数据

当我们发现插入的数据有问题的时候或者因为业务的进行,数据库表里的数据需要更新,这时候我们可以参照以下方式写自己的sql:

update [表名]
set <字段1> = <值1>

如果需要更新多个字段,可以在更新字段后面添加一个逗号,然后跟在后面,简单实例:

update AdditionalService
set storeid = 1  , name = '23'

目前所以的更新都是全表更新,当然我们一样可以使用 where来限制。

2.6 删除数据

删除数据的关键字是delete,所以删除的写法是:

delete [表名]
where <条件>

如果不设置where 条件,则删除的是全表数据。

2.7 删除表

删除表的操作:

drop table [表名]

这个操作会把表结构和表里的数据都删除。

3.总结

这一篇大概介绍了SQL的基本用法,开发过程中的SQL基本够用了。后续会随着文章内容逐步填补未介绍的部分。

更多内容烦请关注 我的博客《高先生小屋》

C# 数据操作系列 - 1. SQL基础操作


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 我们


推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
author-avatar
brucegogo03
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有