- 关键字和函数名称通常不区分大小写,但保持一致的编码风格有助于提高代码的可读性和跨系统兼容性
- 字段名通常不需要引号。如果字段名包含空格、特殊字符,或者是 SQL 保留字,需要用反引或双引号包围
选择数据库
- 在进行表操作之前,确保已经切换到了正确的数据库。
- 例如,切换到 数据库:
分割
- 字段之间使用逗号 分隔。
- 多条 SQL 语句之间使用分号 分隔。
注释
创建数据库之前需要在相应盘符建立文件夹
创建educ数据库
逻辑名称,大小,最大容量,每次增长,存储位置及物理名称
on 定义数据文件 primary 指定主文件,若没有关键字 则命令中第一个文件将成为主文件
创建test数据库
filegroup的上一行末尾需要加 “,”
新增文件
如若新增的数据文件需要添加到fg组中,则需先创建fg组
移除文件/文件组
,移除组之前要清空组中的所有文件
修改文件
,只可小改大,不可大改小
修改数据库名
可能出现的报错
“无法用排他锁锁定数据库”
重命名数据库时提示 “无法用排他锁锁定数据库” 右键想要重命名的数据库–属性–选项–限制访问选择–单用户模式
一个汉字占两个字符,即char(2)
在标准的 SQL 语句中,如果字段名在所有涉及的表中都是唯一的,那么可以不用指定表名。 但如果存在同名字段或为了提高可读性,最佳做法是指定字段所属的表名。
约束和属性都是可选的 存在则不创建
约束
- PRIMARY KEY:主键约束。用于唯一标识表中的每一行。一个表只能有一个主键,主键字段的值必须是唯一的,且不能为NULL。
- FOREIGN KEY:外键约束。用于建立两个表之间的关系。外键字段的值必须是另一个表的主键字段的值,或者是NULL。
- UNIQUE:唯一性约束。保证某一列的每行都必须有唯一的值。与主键不同,唯一约束允许有NULL值。
- NOT NULL:非空约束。确保某一列不能有NULL值。
- CHECK:检查约束。用于确保某一列中的值满足特定条件。例如,可以用CHECK约束来确保年龄字段的值不小于18。
- DEFAULT:默认值约束。用于在未指定值的情况下为列提供默认值。
属性
- AUTO_INCREMENT: 用于在插入新记录时自动递增字段的值,用于自动生成唯一的标识符
- COMMENT: 用于为字段或表添加描述性文本,不影响字段的功能或数据库的操作
编码(字符集)
编码或字符集决定了表中存储的字符串数据如何被表示和存储。常见的字符集包括:
- UTF-8:这是最常用的字符集,支持多种语言,包括英语、中文、日文等。它对于国际化的应用是一个很好的选择。
- Latin1:这是MySQL的默认字符集,也称为ISO-8859-1,主要用于西欧语言。
存储引擎
存储引擎决定了MySQL如何存储和处理表中的数据。不同的存储引擎提供不同的功能,如事务处理、全文索引等。常见的存储引擎包括:
- InnoDB:这是MySQL的默认存储引擎,支持事务处理、外键等。适合大多数应用场景。
- MyISAM:这是早期的默认存储引擎,不支持事务处理,读取速度较快,但在并发写入时性能较差。
创建stu表
创建cj表
创建websites表
可能出现的错误
创建表后在最左侧对象资源管理器中看不到
点击有修改更新的数据库后,点击刷新,再展开就可以看到了
无法保存更改后的表设计视图
工具菜单 – 选项 – Designers(设计器) – 阻止保存要求重新创建表的更改 – 取消勾选
更改编辑前n行数据
工具菜单 – 选项 – SQL Server对象资源管理器 – 命令 – “表和视图选项” – 选择前’行命令的值
增加不了约束,发生冲突
可能因为表中对应字段有数据 把相关数据表的数据删除掉,再执行添加约束语句 https://blog.csdn.net/weixin_46218781/article/details/105934703
字段数量和值数量要保持一致,不写字段默认即全部字段
向stu表中添加数据
向websites表中添加数据
添加数据练习
假定有一个cj表格 使用insert向其中指定字段添加内容 再使用insert select将cj中查找到的制定内容插入到新建的bk表中
向 cj 表中添加内容
创建 bk 表格
insert…select 查询查找
不用括号
删除表
以防表格不存在
删除表格中数据
删除test表中一条数据
清空表格所有数据
命令
用于修改表中的现有数据。
- 基本用法:
- 示例:
命令
用于修改表的结构,包括列操作和约束操作。
列操作
- 删除列:
- 添加列:
- 修改列类型:
约束操作
- 添加主键:
- 添加唯一约束:
- 添加默认值:
- 添加检查约束:
- 删除约束:
- :用于代替任意数量的字符,主要用于子句中。
- :在某些数据库系统中,用于代替单个字符,但在标准SQL中使用来匹配单个字符。
table的数据来源可以是select的子查询
有两个结构相同的表stu、jaj stu有数据,而jaj无数据
jaj表结构
拷贝数据到 jaj 表中
查询基本操作
- 投影查询(SELECT子句):选择特定的列。
- 列函数:, , , ,
- 保存查询(INTO子句):将查询结果保存到新表。
- 连接查询(FROM子句):结合多个表的数据。
- 选择查询(WHERe子句):基于条件筛选数据。
- 分组查询(GROUP BY子句):根据指定列对数据进行分组。
- 限定查询(HAVINg子句):对分组后的结果进行条件过滤。
- 排序查询(ORDER BY子句):根据一个或多个列对结果排序。
SQL运算符
- 关系运算符:, , , , , 用于条件比较。
- 逻辑运算符:, , 用于组合条件。
- 范围运算符: 用于指定值的范围。
- 模式匹配运算符: 用于字符串模式匹配。
- 列表运算符: 用于比较一组值。
- 空值判断符: 用于检查空值。
- 非空判断:
注意事项
- 表和字段的引用:使用来引用特定表的字段,字段之间用逗号分隔。
- 零值与空值:在SQL中,不是空值()。
- 函数中的字段引用:在函数中使用字段时,通常不需要指定表名,除非在JOIN操作中引用多个表的同名字段。
select练习
查询全部字段
实际开发中尽量少使用 这样的操作
查询单一字段
从student中查询sex字段
去除重复项
从student中查询sex,去除重复项
显示前n条数据
更改查询结果字段名
使用AS关键字或直接空格来为查询结果的字段指定别名:
通过学分计算出学时,并生成单独的字段并命名为学时
连接查询
两张及以上不同的表进行查询时,需要连接。连接可以使用WHERe或FROM子句实现。
使用where进行连接
使用from进行连接
where 过滤
where子句用于过滤记录,支持逻辑表达式
查询性别为女,专业为计算机的学生
group by 分组
当SELECt中包含多个字段和聚合函数时,且需要使用GROUP BY时,除聚合函数外的所有字段都应放在GROUP BY子句中。
按姓名分组统计人数
order by 排序
- asc 升序 默认
- dese 降序
order必须放在group by后面
可以多依据排序,先根据总分降序再根据学号升序
having 过滤
用于在分组查询中设置条件
- 应用时机不同: 子句在数据分组之前应用,即它过滤的是原始数据。而 子句在数据分组和聚合之后应用,即它过滤的是分组后的聚合结果
- 用途不同: 子句用于过滤原始数据集中的行,而 子句用于过滤基于聚合函数(如 , , 等)的结果
into 生成
使用查询结果生成新表
运算符
between…and
用于选择介于两个值之间的数据范围(包括边界值)
like
in
在 WHERe 子句中指定一个值列表,然后选择列表中任何一个值匹配的行
等价于
is null
在进行空判断或者非空判断的时候要注意,任何和null比较的值返回的都是false,所以使用 和 而不用 或
聚合字段
计数、最大、最小、求和、平均
总人数、最高分、最低分、总分、平均分
count()
用于统计行数或非 NULL 值的数量
- 当用 时,它只计算该字段中非 NULL 的行数。
- 使用 时,它会计算表中的所有行数,无论字段值是否为 NULL。
按专业分组,统计不同专业人数
如果 是主键或者不包含 NULL 值,那么 和 的结果将相同
统计性别为男的总人数
avg()
计算每个专业的平均总分
计算每个学生的平均分数
year()
通过出生日期字段,查询出年龄字段
sum()
统计不同人的总分
其中from与where做的连接 可以替换为只用from做连接,不写where
类型
- 唯一索引:确保索引列的每行数据都是唯一的。主键自动成为唯一索引。
- 聚集索引:物理改变表中数据的存储顺序,以索引的顺序存储。一个表只能有一个聚集索引。
- 非聚集索引:逻辑改变数据的存储顺序,创建一个单独的数据结构来存储索引信息。
建立索引
- 创建非聚集索引:
- 示例 假设有一个stu表,并想加快基于student_id列的搜索速度,可以创建如下索引:
- 建立一个不唯一非聚集的索引
删除索引
- 删除索引:
注意事项
- 主键和唯一索引:主键自动创建唯一索引,但唯一索引不一定是主键。
- 索引选择:选择合适的列进行索引,一般是经常用于查询条件的列。
- 性能和存储:索引虽然提高查询效率,但会增加存储空间需求并可能降低写操作的性能。
- 常量:字符型常量需要使用单引号括起来,例如:‘abc’,‘123’,‘2*6’。`
- 常量: 是小数型常量,例如: 表示999.99。`
- 常量: 表示布尔型或逻辑型常量,只能是0或1。
- 开头: 局部变量或函数的参数
- 开头: 全局变量
- 开头: 临时表或是个存储过程
- 开头: 全局的临时数据库对象
变量创建
定义单个变量:
同时定义多个:
声明变量可以赋初始值
声明变量不可赋值,可以同时定义多个,没有赋值时默认为Null
access中使用dim 定义变量,默认值是0
变量赋值
可以对多个变量赋值,可以对来源于数据表的数据进行赋值
使用select输出是表格形式
使用print输出只输出数据
getDATE 当前日期
DATENAME 显示日期格式
DATADD相加 DATEIFF相减
获取出生日期
直接显示ASIIC码对应的值
查看某一个人的分数
一整句的select可以改成两句
select @n=sname from where sname=‘梁艾琳’ select @s=score from student inner join cj on student.SID=cj.SID where=‘梁艾琳’
一个declare可以直接定义多个变量
declare @s nvarchar(255) declare @n char(6)
数据 数据库中存储的基本对象
数据库(DB) 长期储存在计算机内有组织、可共享的大量数据集合
数据库管理员(DBA) 管理操作数据库人员
数据库管理系统(DBMS) 是管理和维护数据库的软件,如MySQL、MariaDB、PostgreSQL、Oracle、SQL Server 等
数据库系统(DBS) 实现有组织的、动态地存储大量关联数据、方便多用户访问的计算机软件、硬件和数据资源组成的系统,由数据库DB、数据库管理系统DBMS、计算机系统(硬件、软件平台、人DBA)
原文链接:https://blog.csdn.net/a1097304791/article/details/115006567
目前还分不清为什么Mysql体量那么大,目前用的是MariaDB
下载
MariaDB官网下载 版本选最新,有三种选项
- MariaDB Server: 数据库服务器的完整安装包。
- MariaDB Server Repositories: 指向各种Linux发行版的软件仓库
- Connectors: MariaDB的连接器,用于从不同的编程语言和环境连接到现有的MariaDB数据库。
安装 无脑下一步 设置编码格式为UTF-8,管理员密码可以是root或123456
null和任何值比较都为false
好的,下面是删除数据库、查看已有数据库以及导入数据库的命令,以及每个命令执行后的预期结果。
删除数据库
删除数据库
-
登录到 MySQL:
-
删除数据库:
预期结果:如果命令成功执行,会看到以下结果:
查看已有数据库
查看所有数据库
-
登录到 MySQL:
-
显示所有数据库:
预期结果:列出所有数据库,例如:
导入数据库
导入数据库
-
确保数据库已经创建(如果尚未创建,可以先创建数据库):
预期结果:如果命令成功执行,会看到以下结果:
-
退出 MySQL 命令行:
-
在命令行中导入数据库:
预期结果:成功导入后,提示符返回到命令行,并没有错误信息。
结合这些命令的完整操作流程
-
登录到 MySQL:
-
查看已有数据库:
-
删除现有数据库(如果需要):
-
创建新的空数据库:
-
退出 MySQL 命令行:
-
在命令行中导入数据库: