文章目录
1.1数据库简介
1.1.1 关系型数据库
- 基于E-R模型(entity relationship model):
- 使用sql语言进行操作
1.1.2 分类
- 文档型(sqlite) 程序直接访问文件
- 服务型 应用程序----->应用程序(服务)----->文件
1.1.1 设计
-
三范式:列不可拆分 唯一标识 引用主键
-
关系及存储:
1对1: 一个对象A对应一个对象B,一个对象B对应一个对象A。比如一个学生一个班级,一个班级一个学生
1对多: 一个对象A对应n个对象B,一个对象B对应一个对象A。比如一个学生一个班级,一个班级多个学生
多对多:一个对象A对应n个对象B,一个对象B对应n个对象A。比如一个学生多个班级,一个班级多个学生
1对1双方都可以存关系,1对多是多的存储关系,多对多是单独建立一个表来存储关系
1.2 数据库基本操作
1.2 数据库连接
服务器名称:
- 如果你安装的时候没有改实例名
那么你的服务名就是localhost或127.0.0.1或计算机名或直接写个.(英文状态下) 都可以
如果改了实例名 那么就是 计算机名\服务名
身份验证:
- windows身份验证——》就是你用登录操作系统本身的权限登录
SQL 身份验证——》就是你单独设置的权限
注意:
- sa用户名用不了
解决方法:
(1) 首先以window身份登录
(2) 依次点击 安全性-登录名-sa(双击或右击)属性-修改密码(将旧密码和强制密码前的√取消)
(3) sa(双击或右击)属性-状态设置为授予 启用
(4) 在安全性的上一级右击属性选择安全性选择服务器身份验证SQL server和windows
(5) 断开连接
数据库被局域网中其他电脑连接失败
答:
- 1 SQL server配置管理器中选择网络配置—协议—TCP/IP启用
- 2 关闭防火墙
1.3 界面操作
(1)数据库:创建 删除 分离 附加 生成脚本(架构、数据)
注:
- 在创建数据时,想要将数据库移动到其他地方,需要分离,想要添加到数据库软件中需要附加—在创建数据库后,右击选择任务-分离,接着把删除和更新的两个√去掉
生成脚本:快速的备份数据,在右击数据库点击任务–生成脚本,在最后点击高级往下拉找到编写脚本的数据的类型选择架构和数据,这样就可以生成一个快速的备份文件以.sql文件结尾。
(2)表:创建 修改 删除
- 创建的表中列名就相当于属性
- 字段类型:int bit datetime decimal
char varchar nvarchar
decimal(x,y) x表示总共多少位,y表示几个小数
其中 char varchar 是unicode编码英占一个字节,中文占两个字节
而 uvarchar是unicode编码中英文都是占一个字
注:
- 字、字节、位之间的关系
- 字 word 字节 byte 位 bit
- 字长是指字的长度
- 1字=2字节(1 word = 2 byte)
- 1字节=8位(1 byte = 8bit)
- 一个字的字长为16
- 一个字节的字长是8
(3)约束:数据的有效性检查
主键 非空 唯一 默认 检查 外键
- 主键 primary key:其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键
- 唯一 unique:某一列的值不能重复。找一个列名,单击右键–牵引/键–添加–类型— 唯一键
- 外键foreign key:让表于表产生关系,从而保证数据的正确性。对关系的合理性做检查
注意:
主键 | 外键 | |
---|---|---|
定义 | 唯一标识一条记录,不能重复,不允许为空 | 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 |
作用 | 用来保证数据完整性 | 用来和其他表建立联系用的 |
个数 | 主键只有一个 | 一个表可以有多个外键 |
(4)操作
1.4 脚本操作
- 不区分大小写、字符串使用单引号、末尾不需要加分号
1.4.1 按照功能分类:
- DDL:数据定义语言 -----create(创建)、alter(修改)、drop(删除)
- DML:数据管理语言-----insert(增加)、update(修改)、delete(删除)、select(查询)
- DCL:数据控制语言
1.4.2 注释
- – (两个-)单行注释
- /**/ 多行注释
1.4.3 数据库的创建
通过查看master数据库中的sysdatabases表了解当前存在的数据库数量 如下图:
在创建数据库脚本的时候,如果命名不记得,可以通过ReportServer右击选着数据库脚本为-CREATE©-新查询编辑器窗口
数据库建立的脚本程序例子:
--创建数据库
create database test1
on primary
(
name = 'test1',
filename = N'E:\relationship\sql\4-14\test1\test1.mdf',
--filename = 'C:\Users\19248\Desktop\pro\database\test1\DATA\test1.mdf',
size = 3mb,
maxsize = 10mb,
filegrowth = 1mb
)
log on
(
name = 'test1_log',
filename = N'E:\relationship\sql\4-14\test1\tesCt1_log.ldf',
--filename = 'C:\Users\19248\Desktop\pro\database\test1\DATA\test1_log.ldf',
size = 1mb,
maxsize = 5mb,
filegrowth = 5%
)
删除数据库
drop database 数据库名
1.4.4 表格的创建
下面演示两个表格的创建:
这里要注意要在test1数据库下进行,
通过select * from sysobjects where xtype = 'U'
在这里插入代码片可以查询所有存在的表,要查询多个表,使用逗号分隔开
主键:primary key
非空:not null
唯一:unique
默认:default
检查:check()
外键:foreign key (列名) references 表名(列名)
1.5 表数据的操作
1.5.1 简单查询
select * from 表名
1.5.2 增加数据
insert into 表名(列名) values (值)
说明:
- into 可以省略不行
- 值的列名与值要求位置对应
- 所有列都插入值,可以省略列名部分
- 如果列名设置为标识则不能作为列名来插入数据,插入的数据在表中最后的位置
- 在插入数据时,如果有多个列名,除非有的列名允许了可以null,否则都要出入数据
扩张:
一次增加多行数据,直接在value后接多个数据之间用逗号隔开—(xx),(xx)…
--创建表
create table UserInfo
(
UserId int not null primary key identity(1,1),
UserName nvarchar(10) not null,
UserPwd char(32)
)
--查询表中数据
select * from UserInfo
insert UserInfo(UserName,UserPwd) values('小笼包','21232f297a57a5a743894a0e4a801fc3')
-- 为所有的列赋值,可以简写如下,
insert UserInfo values('大头贴','21232f297a57a5a743894a0e4a801fc3')
-- 为某些列赋值,不是全部列,这里如果在表创建时,UserPwd设置为not null,就会报错
insert UserInfo(UserName) values('尹志平')
-- 一次性写多个数据
insert UserInfo(UserName) values('张三'),('李四'),('王二')
这里UserId 是设置标识的,不能给它赋值,标识是唯一的。
1.5.3 修改数据
updata 表名 set 列名=值1,列名2=值2...where ...
说明:
where后面的表示满足条件的行,做修改
-- 修改数据
-- 为所有行的指定列修改
update UserInfo set UserPwd = 'adamin'
-- 为指定行进行修改列
update UserInfo set UserPwd='0000' where UserId>2
1.5.4 删除数据:
delete from 表名 where...
-- 删除数据
delete from UserInfo where UserId>5
如果在这里继续添加数据,那么这里数据UserId不是从6开始而是从7开始的,也就是说删除操作,只是将数据删除了,而标识还是,这样注意一下,对比下面的truncate清空操作的区别。
清空操作
truncate table 表名
truncate是即将数据删除了,也将标识重置了,与delete的区别。
truncate table UserInfo
1.5.4 常用辅助命令及快键键
set statistis time on/off:在消息栏显示详细执行时间
ctrl+e 执行
ctrl+r 隐藏消息栏
ctrl+l 计划任务