数据库及ADO.NET学习(一)


数据库及ADO.NET部分知识主要包括数据库的基本操作、通过.net程序操作数据库、数据库的其它内容三大部分。

数据库基本概念

数据库:数据的仓库,DB,数据库管理员DBA,维护数据库,数据库管理系统DBMS
数据库的特点:海量存储、查找快、并发性问题控制、安全性、数据完整性
数据库管理系统DBMS:MYSQL:速度快,适合对数据要求不严谨的数据,去掉了很多不常用功能;
MSSQLSERVER(与.net结合很好、只能运行在Windows下,大数据量不太好),DB2、Oracle、Access、SQLite(极其轻量型数据库)、Sybase
SQL!=SQL SERVER!=MSSQLSERVER
RDBMS:关系型数据库,表之间是关联起来的
table column row 字段:field
主键:数据行的唯一标识,不能重复不能为空,一般选择不会被修改的列,以保证表中每条记录的唯一性,
1)逻辑主键:使用没有任何业务意义的字段做主键
2)业务主键:使用有业务意义的字段作为主键
推荐使用逻辑主键,
组合(复合)主键:同时选择多列作为一个主键,不建议使用
主键选择:一般不会被修改的列、选择单列即不使用组合主键、选择简单列(整数、自动编号等)
外键:解决数据冗余,分表,在表A中增加一列C引用表B的主键,增加的列C就是外键。表B就是主键表,表A就是外键表,这只是一个相对关系
注:数据库表设计时,bit默认可设置1/0,表示true/false,写程序只能用1/0表示,但是SSMS设计器只能用true、false
才发现,sql有一个image数据类型,存储图像

字符串存储的几种数据类型:
char(10) nchar(10) nvarchar(50) varchar(50) nvarchar(max) varchar(max) text ntext 
区别:
varchar(50)是可变长度,表示最多存储10个字节,如果实际存储不够10个,则会在存储的时候自动计算存储个数而动态改变长度,优点:节省空间,缺点:每次都要算,但是损失不大,最大长度为8000char(10)是固定长度,数据库中存储时占用10个字节空间,超出10个报错,不足补空格,可以存储汉字,一个汉字两个字节,一个英文字符一个字节,所以可以存储十个字符或五个汉字,小括号最大长度可写缺点:浪费空间,最大长度为8000nchar(10):每个字符按照unicode存储,可以存储10个字母或10个汉字,无论中文英文每个字符占2个,长度最大为4000
不推荐使用text ntext,尽量用nvarchar(max) varchar(max),它们都是用来存储长文本信息的

数据库收缩分离脱离
SQL语句入门:
字符串用单引号、单等号,sql关键字大小写不敏感
SQL主要分为DDL(数据定义语言,建表、建库)、DML(数据操作语言,修改、插入、查询、删除等对表中数据操作的语句)、DCL(数据控制语言,比如设置账户权限问题等)

使用sql语句创建数据库、表

--选中执行代码,如果没有选中,则自动执行所有代码
--===================创建数据库=====================
--创建数据库
create database School;
--删除数据库
drop database School;
--创建数据库指定参数,分别是行数据文件和日志文件
create database School
on primary--主数据文件
(
	--逻辑名称、初始大小、文件路径、文件名、自动增长
	name='School',
	size=10mb,
	filename='D:\school.mdf',
	filegrowth=10%,
	maxsize=100mb
)
log on--日志文件
(
	name='School_log',
	size=5mb,
	filename='D:\school.ldf',
	filegrowth=2mb,
	maxsize=50mb
)
--切换数据库
use School;
--===================创建表=====================
create table TblClass
(
	--创建列,列名 数据类型 约束 自动编号 主键 为空?
	ClsId int identity(1,1) primary key,
	ClsName varchar(50) not null,
	ClsDesc varchar(500)
)
drop table TblClass

create table TblStudent
(
	stuId int identity(1,1) primary key,
	stuName nvarchar(50) not null,
	stuGender bit default(1) not null ,
	stuAddress varchar(200),
	stuPhone varchar(50),
	stuAge int,
	stuBirthday datetime,
	stuIdNumber varchar(18) null,
	stuClsId int not null
)
--======通过sql语句插入数据
insert into TblClass(ClsName,ClsDesc) values ('数据结构','计算机相关课程');
--======select查询数据
select * from TblClass;

go不属于sql命令,把上一部分发给sql引擎,只能写在每一行的开头,发出一批sql语句结束的信号,将sql语句分段执行
练习:创建数据库和表

create database TestSchool;
use TestSchool;
create table TblStudent
(
	tSId int identity(1,1) primary key,
	tSName varchar(50) not null,
	tSGender bit not null,
	tSAddress  varchar(50) not null,
	tSPhone  varchar(11) not null,
	tSAge  int not null,
	tSBirthday  datetime not null,
	tSCardId  varchar(18) not null,
	tSClassId  int not null,
)
create table TblScore
(
	tScoreId int identity(1,1) primary key,
	tSId int not null,
	tEnglish float,
	tMath float
)
create table TblTeacher
(
	tTId int identity(1,1) primary key,
	tTName varchar(50),
	tTGender bit default(1),
	tTAge int not null,
	tTSalary money,
	tTBirthday datetime
)
--=====跨数据库访问:数据库..表名,前提要有权限
select * into School..TblTeacher from TestSchool..TblTeacher
当表目标表存在时:insert into 目的数据库..select * from 源数据库..表  
当目标表不存在时:select * into 目的数据库..from 源数据库..

插入语句

--查看数据库中所有的表信息
sp_tables
select * from TblTeacher
delete from TblTeacher
--基本插入,tTGender也可以写成'true',会自动转换为bit
--向除了自动编号列之外的列都插入时,列名可省略
--字符串前加N避免乱码,unicode编码
--注意:日期插入要加引号,不然插入的日期不是写的日期
insert into TblTeacher(tTName,tTGender,tTAge,tTSalary,tTBirthday)
values(N'李明',1,18,20000,'2000-01-01')
--向某些列插入数据
insert into TblTeacher(tTName,tTBirthday)
values('张三','2022-01-01')
insert into TblTeacher(tTName,tTGender,tTAge,tTSalary,tTBirthday)
values('李四',2,33,30000,'2021-01-01')
--自动编号不能插入值,只能自动生成
insert into TblTeacher(tTId,tTName,tTSalary)
values(100,'王五',30000)
--报错为:当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'TblTeacher' 中的标识列插入显式值。
set IDENTITY_INSERT TblTeacher on
insert into TblTeacher(tTId,tTName,tTSalary)
values(100,'王五',30000)
--设置为off,自动增长
set IDENTITY_INSERT TblTeacher off
insert into TblTeacher(tTName,tTSalary)
values('王五',30000)
--向数据库插入多条数据
--需要注意unio本身就有去掉重复的含义
insert into TblTeacher 
select 'Alice',2,20,30000,'2002-01-01' union
select 'Bob',1,22,60000,'2003-01-01' union
select 'Crice',2,30,50000,'2004-01-01'
--union all就没有
insert into TblTeacher 
select 'Dady',2,20,30000,'2002-01-01' union all
select 'Dady',2,20,30000,'2002-01-01' union all
select 'Dady',2,20,30000,'2002-01-01' 
--============将一个表中的数据备份到另一个表中============
--将TblTeacher中数据插入到NewTblTeacher中,前提:NewTblTeacher表不存在,否则会报错
select * into NewTblTeacher from TblTeacher
select * from NewTblTeacher
--表的删除和修改
create table t1
(
	autoId int identity(1,1) primary key,
	userName varchar(30)
)
--修改表中的列
alter table t1 alter column userName nvarchar(100)

drop table t1
----在NewTblTeacher已经存在的情况下,将TblTeacher中数据插入到NewTblTeacher中
insert into NewTblTeacher(tTName,tTAge)
select tTName,tTAge from TblTeacher
select * from NewTblTeacher
select * from TblTeacher

更新语句

--将所有年龄<20的人年龄改为19,不加where修改所有数据
update TblTeacher set tTAge=19 where tTAge<20
--将年龄为20的加一,尽量使用通用的而不是+=
update TblTeacher set tTAge=tTAge+1 where tTAge=20
update TblTeacher set tTSalary=50000
--将年龄为21的姓名两边加★
update TblTeacher set tTName='★'+tTName+'★' where tTAge=21
--替换
update TblTeacher set tTName= replace(tTName,'★','☆')
--逻辑运算符
--not and or not>and>or(优先级)

删除语句

--删除所有数据
delete from TblTeacher
truncate table TblTeacher
--区别:1、delete删除时,自动编号没有回到默认值,但是truncate重新设置了自动编号
--2、通过truncate删除时,只能一次性都清空,但是delete可以用根据条件删除
--3、truncate清空表中数据的速度比delete快的多
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值