SQL Server入门

既然要学数据库,肯定要先安装软件

https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads

 新手就用免费的。

 第3步时是打开网页,要去下载数据库的UI管理软件,安装好 SSMS

 

一,怎么连数据库

1登陆页面》服务器类型》数据库引擎

2服务器名称》点下拉 <浏览更多...> 》网络服务器》数据库引擎》选择服务器名》确定

3身份验证》windows 身份验证连接

//这里在对象资源管理器里应该能看见服务器对象,且有绿色运行三角标志(库桶)。

//技巧:有失效的服务器名可以删除,服务器名称下拉框鼠标停放,按Delete键;

二,创建登陆账号

1安全性》登陆名》右键新建登录名》//如sql2017密码sql2017

2你会发现sql2017密码sql2017还是登陆不上。

3你要在对象资源管理器里的服务器》右键 重新启动

4这样断开数据库,你重新用sql2017密码sql2017就能登陆了。

5在服务器名称后面加端口号登陆   ,1433这样是登陆不上的,解决办法是

SQLServer网络配置》协议》tcp/ip》打开,并且重新启动服务(在sqlserver服务,sqlserver里)

三,(新建)用于保存表

.mdf是主数据文件     

.ndf是次要数据文件     

.ldf是日志文件

use master  --使用系统库
go
--执行
if exists(select * from sysdatabases where name='HMI')
drop database HMI
go
--重复的话,删除再重建
create database HMI  --新建 HMI
on primary  
(
         --数据库的逻辑文件名(就是系统用的,必须唯一)
name='HMI_主',
--数据库物理文件名(绝对路径)
filename='D:\DB\HMI_主件.mdf',--主数据文件名
--数据库初始文件大小(一定要根据你的实际生产需求来定)
size=20MB,       --初始大小
--数据文件增值量(也要参考文件本身大小)
filegrowth=1MB   --增长
)
,
(     
name='HMI_副',
filename='D:\DB\HMI_副件.ndf',--次要数据文件名
size=20MB,
filegrowth=1MB
)
log on
(
         name='HMI_日志',
filename='D:\DB\HMI_日志log.ldf',--日志文件名
size=10MB,
filegrowth=1MB
)
go

三,(新建表)

use HMI
go
--使用数据库


if exists(select * from sysobjects where name='tb表1')--搜索 表名:表1
drop table tb表1	--删除 该表1
go
--去重复
create table tb表1	--新建 表1
(
     列0 int identity(1000,2) primary key , --自动增长1000起,每次加2,主键唯一性
	 列1 varchar(50) not null, --自动长度,最大50
	 列2 varchar(18) check(len(列2)>=6 and len(列2)<=18)  not null,  --不能为空
	 列3 varchar(20) not null,
	 列4 char(11) not null,         --固定长度11
	 列5 nvarchar(100) default('地址不详')  --住址  默认值
)
go
--创建  表2
if exists (select * from sysobjects where name='tb表2')
drop table tb表2
go
create table tb表2
(
     编号  int identity(10,1),
     分类  varchar(20)primary key not null
)
go

 约束(新建)

--创建  约束表3 (表3的内容必须包含表12才能创建对象)(外键必须是主键唯一性)
if exists (select * from sysobjects where name='tb表3')
drop table tb表3     --删除 表3
go
create table tb表3
(
     编号  int identity(1000,1)  primary key,
     名字 nvarchar(50) not null ,
	 内容 nvarchar(500) not null,
	 课时 int not null,--课时
	 学分 int check(学分>=1 and 学分<=30) not null, --学分
	 表2约束 varchar(20) references tb表2(分类) not null,  --外键约束
	 表1约束 int references tb表1(列0) --次表唯一约束
)
go
--表3建立后,就不能删除表1和表2了。需要先删表3

增  增对象

--===================================
--指向要操作的数据库
use db盘A
go

--表1	内容--标识列将不能被赋值
--当我们启用标识列的时候,不能显式的插入值
insert into tb表1(列1,列2,列3,列4)--列5 ‘地址不详’
values('学生01','1234567890','赵老师','15800000001'),
('学生02','123456','钱老师','15800000002'),
('学生03','123456','孙老师','15800000003'),
('学生04','123456','李老师','15800000004'),
('学生05','123456','祁老师','15800000005')

insert into tb表1(列1,列2,列3,列4,列5)--
values('学生007','1234567','祁老师','1589502007','江苏')

--==================================
--表3有表2和表1的外键约束
--表3的外键值,需要表2和表1已有的元素
--表3
insert into tb表3(名字,内容,课时,学分,表2约束,表1约束)--次表唯一约束
values('名字很好','内容不知道',400,10,'化学','1044')

   删对象

--===================================
--指向要操作的数据库
use db盘A
go

delete from tb表1 where 列5='地址不详'

  改对象

update tb表1 set 列2 ='1222233',列3='禽老师' where 列0=1044

   查对象

--===================================
--指向要操作的数据库
use db盘A
go

select * from tb表1 --查询这张表


--查询  tb表1  的所有列名
select name from syscolumns where id=(select max(id) from sysobjects where xtype='u' and name='tb表1')

--===============================
--联合查询:查询2张表的所有列值
select * from tb表3 inner join tb表2 on 表2约束=分类

select tb表3.编号,名字,内容,课时,学分,表2约束,表1约束 
from tb表3 
inner join  tb表2 on tb表3.表2约束=tb表2.分类

再核对一下效果

四,连接数据库

1 using System.Data.SqlClient; //鼠标点下SqlClient然后按F1键,可以查看所有成员

2 System.Data.SqlClient.SqlConnection conn库连接;   //这个对象用于连接数据库

3  SqlCommand cmd = new SqlCommand(textBox6.Text, conn库连接);//sql命令,库连接

4 增,删,改,流程如下:

conn库连接.Open();

textBox7.Text = cmd.ExecuteNonQuery().ToString();//执行

conn库连接.Close();

5如果是查询的话,cmd对象需要用另一个方法。(cmd包含conn且需要打开状态。)

//object obj1 = cmd.ExecuteScalar();//返回第一行第一列
//sql数据.sql第1行1列 = obj1.ToString();

SqlDataReader reader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);//带关闭的读取

/
 SqlDataReader reader = (SqlDataReader)obj;            
            while (reader.Read())
            {
                list1.Add(new tb课类()
                {
                    id = Convert.ToInt32(reader[0]),//第1列
                  //id = Convert.ToInt32(reader['列1']),//第1列
                    name = reader[1].ToString(),//第2列
                });
            }
            reader.Close();// 必需关闭
            return list1;  // 返回集合

标识列(自动增长列) 从1000开始,每次加2

 1表》右键,设计》在需要的列位置》右键,插入列
2 设置列名为标识列,数据类型设置int
3 在列属性处,找标识规范》展开》标识增量 2 》标识种子  1000

外键(外键约束)作用是 外表的属性内包含这个值,主表才能插入这个对象。

1表》右键设计》右键,插入列》取名:w外键课类
2  w外键课类》右键,关系》添加》然后点击“表和列规范”后面的小按钮
3 弹出另外一个窗体让我们选择主键表和列,记住要选择相同的,选好之后点击确定。
4 展开INSERT和UPDATE规范,在更新规则和删除规则有四个选项,分别是“不执行任何操作”、“级联”、“设置为NULL”、“设置默认值”。
外键约束:就好比2个表之间的关系。
工资条一张表格,员工信息一张表格。
这2表格横向是员工对象,比如100个员工,就有100行。
这2表的列向,肯定有员工姓名这一栏。那姓名就可以设置主外键关系了。
员工信息表里(姓名设置主键),工资条表格里(姓名设置外键)。这样造工资的时候,工资表添加姓名如张三。这时,员工信息表里(姓名)没有张三这一行。那工资表里就添加不了这一行。因为没有这个员工,发什么工资!

在《数据库关系图》新建,把需要的表添加进去,这样就能看见他们的关系了。也可以修改他们的关系:鼠标在列名处,左键拖动到另一个表的列名处,会弹出对话框,设置主外键。
表,右键,表视图,修改自定义,添加说明,这样就方便查看了。

补充说明

表3关联外键表1和表2,此时表1和表2就不能被删除了。需要先删除表3
表3添加对象时,外键列数据必须是表1和表2已有的元素,否则添加失败
对于列主键有null出错,先删除列,再添加新列并且设置 default 默认值

SQL语句的用法

 最重要的语句莫过于查询了。 select   

查数据我们肯定是想获取工资条这样的表格对吧。

比如3个员工一起去查工资,财务只愿意给出这3个人名字的工资表。

工资表有很多列,比如名字,天数,夜班天数,白班天数,基本工资,加班工资,医保,补贴,扣税,应发工资,和实发工资。
这3个人去查工资,肯定只要显示需要的信息:名字,实发工资

select  名字,实发工资  from  工资表

// select 表示查询。后面跟 你需要获取出来的列。
// from   后面填数据源。比如 工资表
//想查所有的列,可以用星号 * 表示  如 select * from 工资表
//如果列名是英文的。你想翻译出显示。可以用as   
// 实发工资as到手工资。(这样读取的列名就变成到手工资)select 名字,实发工资 as 到手工资 from 工资表
// 还有一种也可以改列名 select 名字,到手工资=实发工资  from 工资表 
//注意=的左右顺序
//不管是=还是as都不会修改原数据,只是显示出来的被改变了。

多表查询 inner  join 。。。on 。。。 (用于提供数据源)

where用于筛选条件

在3个人查工资时,他们想提涨工资的事。那是不是需要查看这3个人工作的工龄。
可是工资表里没有工龄这个列。在另一张表招工信息表有工龄。

抛开数据库,我们正常理解:财务是不是需要拿出2张表,用名字来比对。
那数据库也一样,用inner join再提供一个数据源,招工信息表

select  姓名,工龄 from 工资表
inner join 招工信息表  这里填主外键
where 这里填筛选条件  

结果排序 order  by 。。。 desc

在查出结果后,想将对象排序,比如用成绩排序
order by 成绩 desc
//desc是降序,成绩从高到低排序。
//asc 是升序

模糊查询   like

link ‘常州%’

%表示通配符,满足常州,后面不管是什么,都是true

多条件筛选

where Age between 80 and 90
where Age in(21,22,28)

//筛选出年龄80到90岁的
//筛选出只有年龄21和22和28的对象

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值