1_数据库的概念
(1)数据库的特点:
-
海量存储数据、数据检索非常方便。
-
保持数据信息的一致、完整,并实现数据的共享和安全。
-
通过组合分析,产生新的有用信息。
(2)DBMS与DBA
DBMS:数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过DBMS访问数据库中的数据,数据库管理员也通过DBMS进行数据库的维护工作。 详细:https://baike.baidu.com/item/数据库管理系统/1239101
DBA:数据库管理员(Database Administrator,简称DBA),是从事管理和维护数据库管理系统(DBMS)的相关工作人员的统称,属于运维工程师的一个分支,主要负责业务数据库从设计、测试到部署交付的全生命周期管理。 详细:https://baike.baidu.com/item/数据库管理员/1216449
(3)常见数据库与数据库分类
当前主流的数据库有MySQL,Oracle,SQL Server,MongoDB、SQLite、Redis、PostgreSQL、DB2
数据库的主要分类
-
关系型数据库,如:MySQL、Oracle、SQL Server,以表格的形式存储数据,表格有行和列组成,每一行对应的列数相同。
-
非关系型数据库:如:MongoDB、Redis , 不是以表格的形式存储数据的, MongoDB以文档的形式存储数据,Redis在键值对形式存储数据
-
数据库分类: 数据库的七大类别及其特点-百度开发者中心
2_数据库中重要对象
(1)常见的数据库对象包括表、视图、索引、存储过程、触发器、序列(主键)、同义词和用户定义函数等。
数据库语句:SQL语句
详细:https://www.fanruan.com/blog/article/247748/,常见的数据库对象包括什么 • Worktile社区
(2)表:表是数据库中最基本且最重要的对象,用于存储数据。每个表由行和列组成,行代表记录,列代表字段。表的设计直接影响数据的存储效率、查询性能及数据完整性
(2)视图:是数据库中的一种虚拟表,通过查询语句动态生成数据。视图不存储数据,而是基于表的数据创建的,提供了一种灵活的方式来查看和管理数据。
(3)索引:是数据库中用于加速查询操作的数据结构。索引通过对表中的一列或多列的值进行排序,能够大大提高数据查询的速度。
(4)存储过程:是一组预编译的SQL语句,用于完成特定任务。存储过程提高了代码的重用性和执行效率,并可以简化复杂的数据库操作。
3_连接数据库
(1)服务器名称的多种用法: . 表示本机 计算机名称:此电脑右键属性---》系统信息---》设备名称 如:ZC
必须更改SQL Server 的网络配置,才能使用如下三种服务器名称,重启电脑。
IP地址 (Internet Protocol Address)是指互联网协议地址,又译为网际协议地址,用来唯一标识互联网中的一个网络或一台主机。
特殊IP:localhost 表示本地主机 特殊IP:127.0.0.1 表示本地主机
(2)端口号:所谓的端口,就好像是房间号一样,客户端可以通过ip地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号,通过类似房间号的端口号,客户端才能真正的访问到该服务器。为了对端口进行区分,将每个端口进行了编号,这就是端口号
(3) 身份验证
Windows身份验证:使用系统的账号登录,只要登录系统,就不需要再填写密码 SQL Server身份验证:账号:sa 密码:123456
SQL Server Administator管理员 Super Administator
4_数据类型
4.1_文本类型
文本类型:字符数据包含任意字母、符号或数字字符的组合
-
char:固定长度的非 Unicode 字符数据,最大长度为8000个字符,例如定义性别 Gender char(2),一个汉字占2个字符,所以定义 char(2)就行避免造成空间浪费(当然定义成 nchar(1)也行)
-
varchar:可变长度的非 Unicode 数据,最大长度为8000个字符,例如定义姓名 Name varchar(20),因为姓名的长度不固定,可能2个汉字也可能4个汉字甚至更多,所以我们定义为可变长度。占的空间少,可以节约出来一部分空间,占多了顶多也就20个字符(这里名字最多10个汉字)。
-
text:存储长文本信息,最大长度为2^31-1 (2147483647)个字符,存储的字符范围就比较多。如果定义的字符超过 char的8000个字符,就需要定义为 text 长文本类型的。
-
nchar:固定长度的 Unicode 数据,最大长度为4000个字符
-
nvarchar:可变长度的 Unicode 数据,最大长度为4000个字符
-
ntext:存储可变长度的长文本,2^30-1 (1073741823)个字符
Unicode:是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案 注意:带n的数据类型长度是不带n的两倍。比如nchar(1)和char(2)长度相同(1个字节 nchar 等于 声明2个字节的char,所以带 n 的最大长度就降低了)
4.2_整数类型
整数类型:
-
bigint:占用8个字节,可表示范围:-2^63 ~ 2^63-1之间的整数
-
int:占用4个字节,可表示范围:-2^31 ~ 2^31-1之间的整数
-
smallint:占用2个字节,可表示范围:-2^15 ~ 2^15-1之间的整数
-
tinyint:占用1个字节,可表示范围:0 ~ 255之间的整数
4.3_精确数字类型
精确数字类型:
-
decimal:-10^38 ~ 10^38-1之间的固定精度和小数位的数字
-
numeric:功能等同于decimal
-
写法:decimal(整数,小数)和numeric(整数,小数)
-
默认:如果不指定位数,默认18位整数,0位小数,比如身份证号:numeric(18,0),当然身份证号一般不用 numeric,而是用 char,因为身份证号有的还含有 X 字符
4.4_近似数字(浮点)类型
近似数字(浮点)类型:
-
float[(n)]:表示范围:-1.79E+308 ~ 1.79E+308 (1.79乘以10的308次幂)
-
n表示精度,在1-53之间取值,当n在1-24之间时,精度为7位有效数字,占用4个字节;当n在25-53之间时,精度为15位有效数字,占用8个字节
-
real:表示范围: -3.40E+38 ~ 3.40E+38占用4个字节存储空间,相当于float(24)
4.5_日期类型
日期类型:
-
datetime:允许的范围1753-1-1至9999-1-1
-
smalldatetime:允许的范围1900-1-1至2079-6-6
-
时间精度不同:datetime精确到3/100秒;smalldatetime精确到1分钟
-
格式说明:
-
分隔符数字方式:2023-04-24或04/24/2023
-
纯数字方式:04242023
-
英文数字方式:Apr 24,2023
-
-
注意问题:日期在使用的时候需要使用单引号''括起来
4.6_货币类型
货币类型:
-
money:货币数值介于 -2^63 ~ 2^63-1之间,精确到货币单位的千分之一。
-
smallmoney:货币数据介于 -214748.3648 ~ -214748.3648之间,精确到货币单位的千分之十。
4.7_位类型
位类型:
-
bit:表示“是/否”类型的数据。(0、1 / true、false)
4.8_二进制类型
二进制类型:
-
binary:固定长度的二进制数据,最大长度为8000个字节。
-
vbinary:可变长度的二进制数据,其最大长度为8000个字节。
-
image:可变长度的二进制数据,其最大长度为2^31个字节。应用场合:可存储图片。
5_SQL语句
(1)注释:
-- 单行注释
/**/ 多行注释
(2)创建数据库:create database 数据库名
-- create database 数据库名
create database db_first;
(3)删除数据库:drop database 数据库名
-- drop database 数据库名
drop database db_first;
(3)创建表:creat table 表明(列名,数据类型)
-
not null:设定该列非空,
-
primary key,设定该列为主键,
-
identity(1,1) 设定该列自增,从1开始自增,增幅为1
create table Teachers(
Id int not null primary key identity(1,1),
TeacherName varchar(30) not null,
Age int not null default(20),
Sex int
)
(4)表的插入 :insert into 表名(列名) values (值),
插入的时候 表名后面填写列名,values 后面填写值 值和列名要--对应
当主键设置了标识规范的时候,不让插入,只有吧IDENTITY_INSERT设置为ON才能插入
数据库对大小写不敏感,IDENTITY_INSERT与identity_insert一样
-GETDATE() 是SQL_server 中得函数 用来获取当前日期
--插入
insert into Teachers (TeacherName,Age) values ('孙老师',30)
insert into Teachers (TeacherName,Age,Sex) values ('孙老师',20,0)
SET IDENTITY_INSERT Teachers ON;
insert into Teachers (Id,TeacherName,Age,Sex) values (6,'王老师',20,0)
SET IDENTITY_INSERT Teachers OFF;
insert into Students(StuName,StuAge,Birthday) values ('张三',20,'2025-02-01 14:13:45');
insert into Students(StuName,StuAge,Birthday) values ('韩李四',20,GETDATE());
--插入多条数据
insert into Teachers(TeacherName,Age)
--自定义结果集 开发者用多条数据合并而来
select '王老师1',30
union all
select '王老师2',30
union all
select '王老师3',30
(5)修改数据:update 表名 set 修改的列名='值' where 条件
or 或者,满足一项就可以,相当于C#中的||
and 并且 满足所有的条件 相当于&&
不加修改条件的时候会修改所有的数据,切记加条件
update Students set StuName='张三' where Id=7;
update Students set StuName='王大陆3',StuAge=10 where Id=6 or Id=5; -- or ===> ||
update Students
set StuName='4563'
where Id=6 and StuAge=100; ---> and ===> &&
(6)删除数据:
delete from 表名:删除数据 ,标识符不重置,可以使用where添加删除条件
truncate table 表名:删除清空数据 保留表结构 标识规范重置,不能添加where 谨慎使用
delete from Teachers;
delete from Teachers where Id=2;
delete from Teachers where TeacherName ='孙老师';
truncate table Teachers ;
(7)查询语句 会查到一个结果集 把结果集返回出来
select * from 表明: * all 全部列
-- * all 全部列
select * from Students;
--查询部分列
select StuName,StuAge from Students;
-- 查询替换列名
select TeacherName as 老师姓名,Age as 年龄 from Teachers
--加 where 筛选
select * from Students where Id =1;--查询id等于1的全部数据
select StuName from Students where Id =4; --查询id等于4的学生姓名
select StuName from Students where Id =4 and StuAge=10;
select StuName from Students where Id =4 or StuAge=10;
-- between 之间
select StuName from Students where Id between 5 and 8;
-建议不要比较字符串
-- select * from Students where StuName >= '吴亦凡' and StuName<='王大陆'
(8)IN操作符用于指定某列的值必须在指定的列表中。
NOT IN操作符用于指定某列的值不能在指定的列表中。
--IN操作符用于指定某列的值必须在指定的列表中。
select * from Students where StuName in ('张三','李四');
-- NOT IN操作符用于指定某列的值不能在指定的列表中。
select * from Students where StuName not in ('张三','李四');
(9)%在后面,以某个字符开头,在前面,以某个字符结尾,两边都有 包含某个字符
select * from Students where StuName like '王%';-- 以 '王' 开头
select * from Students where StuName like '%2';-- 以 '2' 结尾
select * from Students where StuName like '%2%';-- 包含 '2' 2 在结尾 中间 开头 都可以匹配
(10)声明变量 declare
-- Sql 声明变量
declare @a int;
-- sel中赋值 : 两种语法 set| select
select @a=100;
select @a-=100;
set @a+=100;
set @a=@a+100;
-- 打印
print @a;
--字符串 拼接
select 'abc'+'defg' as newString