jpa 自定义sql if_SQL入门-1-建库建表

5a2e8209f11b626f485a735ae80ecfce.png

概论

什么是数据和数据库?

比如你要在“一起帮”上进行注册,你就需要输入“用户名”和“密码”。这里,用户名和密码就是数据。类似的,你发布一个求助,标题正文悬赏……等等,都是数据。(注意:源代码不能算是这里所指的数据)

那所谓数据库,简单的说,就是:存放数据的仓库。

为什么需要数据库和SQL?

因为应用程序离不开数据。

比如你输入了你的用户名和密码,进行注册,系统“一起帮”就需要:把他们存放 数据库。当你输入用户名和密码登录的时候,系统将利用你的用户名在数据库 中进行查找:只有当你输入的用户和密码和数据库 中存储的一致,你才能够成功登录。

又比如你在“一起帮”上发布求助,你输入的标题、正文和其他各种信息,都会被存放数据库 中。然后当其他用户浏览求助列表页面的时候,这些内容又会被从数据库 出来的。

不使用数据库,你把数据存放在哪里?(此处思考若干秒)

然后,你的方案(内存中/记事本等)能不能解决这两个问题:

  1. 安全。不仅仅是信息不会被恶意用户(所谓的“黑客”)窃取,还要保证信息不会因为断电、磁盘损坏等原因丢失损坏。
  2. 效率。一是使用效率,你能不能方便快速的存入(增)、查找(查)、修改(改)和删除(删)你想操作的数据?二是执行效率,当数据越来越多越来越多,比如上千万条的数据,你的方法能不能很快的执行?
  3. ……

数据库就能!

数据库可以被认为是一种软件,它能用一种很好的方式(安全有效等等)进行数据的管理(增删改查)。那么,如何进行这些增删改查的操作呢?

—— 使用SQL,这种结构化(Structured )查询(Query)语言(Language)。我们通过这三个单词来认识它:

  • Structured:结构化的。数据是按照某种“结构”,有序的组织起来的。什么样的一种结构呢?我们通常称之为:“表(Table)”结构。
  • Query:查询。实际上概括了增删改查四种操作,因为查询是核心:删和改的前提是查找,不然你删谁改谁呢?为了便于查询,增加数据的时候,也需要用一种“有组织的”方式进行存放。(复习:数据结构和算法。延伸:为什么“数算”在实际工作中用不到?
  • Language:语言,SQL是一门语言,是和数据库进行交流的工具。(复习:编程开发语言)

三大主流数据库

  • Oracle:甲骨文公司开发,收费,功能强大,语法丰富,适用于各种大中小微机环境。(复习:计算机类型
  • MySql:社区开源免费,后被甲骨文收购,但仍保留免费社区版。特点是可选择“引擎”,一直在不断完善中……
  • SQL Server:微软公司开发,收费,可视化操作界面(Management Studio)强大,之前只能在windows上部署,现在已可以在Linux上部署使用。

(说明:以上仅为简单概括解释)

NoSQL数据库将在同学们对SQL数据库有了更深的认识后予以介绍。

为配合我们http://ASP.NET全栈课程的学习,我们使用

Visual Studio和LocalDB

进行教学演示。LocalDB是Visual Studio自带的SQL Server的“精简开发版”,只需要在安装Visual Studio时勾选,它的特点是:

  • 轻量级:不需要复杂的安装/配置/启动等
  • 专为开发者(developer)设计,让开发者专注于开发

延伸阅读:SQL Server全部版本: Enterprise / Standard / Web / Developer / Express,其中,Express是免费的。

新建一个数据库

演示建库过程

注意:

  1. 养成记忆和使用快捷键的习惯,比如记住SQL Server Object Explorer:Ctrl+, Ctri+S
  2. 可以把窗口拖放到你喜欢的位置。
  3. 能够设置和查看数据库文件存放的位置

理解mdf和ldf文件

数据库创建之后,我们能在建库时指定的文件夹下找到两个文件:

6c69a72a1eda99b454c1bbe16d5f5e10.png

按后缀名不同:

  • .mdf(Master Database File): 存储用户录入数据库的数据。
  • .ldf(Log Database File): 存储每一次用户对数据库进行操作的记录,这些记录被称之为“日志(log)”,其内容就好像:
  1. 2019年10月4日 17点37分,用户“大飞哥”新建数据库17bang
  2. 2019年10月4日 17点39分,用户“大飞哥”在数据库17bang中新建表Student,表结构为:列UserName和Password两列……
  3. 2019年10月4日 17点41分,用户“大飞哥”在表Student中添加一行数据……

注意,ldf会记录用户在数据库上的所有操作,以及所有操作的所有细节!所以,当mdf文件损坏时,我们可以利用ldf文件进行恢复。

请同学们由此体会:数据库的安全性要求。

实际上,我们在图形界面上的操作,都会被转换成SQL语句,然后由数据库运行这些SQL语句,完成数据操作。

建库的SQL语句

非常简单:

CREATE 

逐字翻译:创建 数据库 [17bang],非常容易理解。

观察这条SQL语句,它主要由以下这些内容组成:

  1. 关键字。如:CREATE、DATABASE,在query窗口中,这些关键字都被Visual Studio进行了高亮(加蓝色或灰色)。他们是千万不能拼写错误的,一旦拼写错误就不会有高亮,提示你进行拼写检查(同时有可能出现波浪线)
  2. 用户自定义(即由你自己确定)的名称,如:17bang。注意虽然这些名称由你定义,但你必须遵守一定的命名规则规范。
  3. 符号:(注意符号只能使用半角 格式)
    1. 方括号[]。如果自定义名称符合命名规则,方括号是可以省略的。但由于17bang是数字开头,所以必须添加[]
    2. 分号;。用于一条SQL语句的末尾,标志一条SQL语句的结束。T-SQL中很多时候可以省略;,但为了和SQL标准一致,我们还是建议加上。
  4. 空格。用于区分单词。多个空格会被视为一个空格。

演示:新建一个query,运行SQL语句

注意:

  1. 如果在QL Server Object Explorer中没有发现新建的数据库,可以进行手动刷新

另外,还有

删除数据库

的SQL语句:

DROP 

切换数据库和批处理

当我们有多个数据库的时候,我们需要指定表建立在哪个数据库上。上面我们使用了GUI进行数据库的切换,有没有SQL语句呢?有的:

USE 

运行上述代码,完全没有问题。但是,如果你同时运行建库和切换数据库的代码试试:

CREATE 

你会得到一个错误提示,说数据库不存在:

Msg 911, Level 16, State 1, Line 2
Database '17bang' does not exist. Make sure that the name is entered correctly.

17bang这个数据库我不是刚建立了的么?

OK,要理解这一点,需要我们首先理解一个 批处理 的概念。

什么是“批处理”呢?简单的说,SQL Server会把所有发送给它的SQL语句作为一个完整的可执行的单元进行处理(包括解析、优化、执行等等),这些SQL语句被称之为“一批”。上述建库和切换数据库的命令无法在同一批次中完成,或者你可以理解成:创建一个数据库,这个数据库只能在下一批次才能被使用。

所以你有两个选择:

1)人工的分两批执行,第一次选中CREATEDATABASE[17bang]; 执行执行完毕之后,再一次的选中USE[17bang]; 执行。

2)使用 GO 来分隔SQL语句。GO并不是一条SQL语句,而是一个对SQL Server的客户端(比如VS的new query窗口)有效的命令。客户端检测到 GO,就会以GO为分隔符,将SQL语句分隔成若干批发送给SQL Server,由SQL Server分批处理。

所以,上述建库转库的SQL语句可以写成如下样式,然后整个一次 Ctrl+Shift+E 要求执行:

CREATE 

创建数据库并切换之后,我们就可以在数据库中

新建第一张表

演示建表过程

注意:

  1. 区分数据库实例((localdb)MSSQLLocalDB)、数据库(17bang)和表(Student)
  2. 在Add New Table后进行的工作是设置表结构,而不是填充表的内容,完成建表之后我们只有一张空表Student
  3. 观察底部生成的SQL语句

1ac1040c1e16400af07ef5718001229c.png

建表的SQL语句

观察这条SQL语句,它在建库语句的基础上,多了:

  1. 关键字TABLE、INT、NOT NULL……
  2. 用户自定义的数字,如:10,50,这个我们稍后再讲
  3. 圆括号(),不能省略。注意这个圆括号是半角的(使用英文输入法),而且记住:所有编程语言里的符号都是半角的!不是(),而是();不是,而是,;不是;而是;……这是初学者最容易犯的错误之一,^_^
  4. 换行。在SQL中,换行等同于空格。使用空格只是为了提高代码的可读性(更容易让开发者阅读理解),不影响代码的执行。

上述内容构成了一段完整的SQL语句。我们逐行解释:(--后面的内容被称之为“注释”,是不会被执行的、描述性质的文本内容)

CREATE 

其中,dbo是database owner(数据库所有者)的首字母缩写,可以理解为数据库的一个特殊用户(或默认用户),一般可以省略。

延伸阅读:一个数据库可以由多个用户访问,多个用户都可以创建“同名”的表,可以在这些表前面加上用户名加以区分。比如Jimmy.Student:用户Jimmy的表Student,和ATai.Student:用户ATai的表Student,这可以是两个不同的表。dbo.Table即用户dbo的表Table,但dbo比较特殊就是了(sysadmin下的所有用户都自动映射到dbo……)

试一试:改动上述CREATE语句,创建一个MAJOR表,包含一个Id和NAME列。

眼尖的同学应注意到了上图中Tab名称是“T-SQL”而不是SQL,啥意思呢?

SQL、SQL Server和T-SQL

前面已经说过了:

SQL Server是数据库,是微软推出的三大主流数据库之一。不要把他和SQL混淆了,虽然微软很希望大家就把SQL当成SQL Server,^_^

SQL是一个公认的语言(语法标准),三大主流数据库厂商都已经确保标准的SQL语言能在他们的数据库上正常运行。所以,我们的课程也以SQL标准语法为主。但是,各个数据库厂商为了提高自身的竞争力,更好的为数据库开发人员服务,还各自推出了他们自己的 SQL语法,但这些语法,不能确保在其他数据库上正常运行。Oracle推出的被称为PL/SQL,mysql还是叫mysql,SQL Server推出的,就叫做:

T-SQL。可以把T-SQL看成是SQL的扩展,即T-SQL包含了全部SQL语法,并且还额外添加了其他一些只适用于SQL Server(或者不保证也能适用于其他数据库的)语法。

最后,同学们可能还有一个疑问:既然我们在Visual Studio中使用GUI(图形界面)就能建库建表,我们

为什么还需要学习SQL语句呢?

这是因为我们最终要学习的是http://ASP.NET开发。再来看看这张图:

600597df74f1f60f0ef9cdcda1568958.png

用户通过HTML/JS/CSS向服务器发起请求(比如进行注册),服务器上就由http://ASP.NET接手进行处理。当它需要向数据库的协助的时候,http://ASP.NET就只能生成SQL语句和数据库进行交互啊:难道http://ASP.NET还能使用鼠标点点点?(^-^)

作业

  1. 新建一个数据库:17bang,能指定/查看该数据库存放位置
  2. 观察“一起帮”的注册和发布求助功能,试着建立表User:包含字段UserName(用户名),Password(密码)……

每日单词

efb12639be0acd5fbaa5b11c40e177b8.png

感谢童鞋们的阅读!^_^

我就是:黑律师/包工头/创业狗/老码农……现在还是教书匠的大飞哥。

再次重申这个系列的目标是:

1)通俗易懂。2)实战为主。3)面向就业。

系列内容的完善需要你的反馈!

欢迎点赞和评论,以及加入我们的QQ交流群:326801052。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值