数据库
数据库是一个系统,用来存储、管理和组织大量有结构的数据。它可以帮助用户高效地存取和操作信息,比如用户资料、订单信息、商品详情等。
简单来说,数据库就像是一个电子化的“档案柜”,里面有很多“文件夹”和“文件”,方便你查找和维护数据。
表
存储在表中的数据是一种类型的数据,不同类型的数据应放到不同的表中,否则会使以后的检索和访问很困难。
数据库中的每个表都有一个名字,用来标识自己。此名字是唯一的,这表示数据库中没有其他表具有相同的名字。
表由一个或多个列组成。每一列存储一列特定的信息,列称为字段,每个列都有相应的数据类型。数据类型定义列可以存储的数据种类。例如,某一列中需要存储数字,该列的数据类型应该定义为数值类型。
基本语句
SQL语法不区分大小写。由于博主个人习惯,所以全篇用小写了(抱拳)。
每个语句后面是否有结束符号,主要看你运行几条语句,1条语句就不用加结束符号,而大于1条语句 就要加上结束符号了。
like为模糊查询,**=**为准确查找
like"%王" //为王字结尾的名字 前面有多少字符无所谓
like"_王"//为王字结尾的名字 但是前面只能有一个字符
like"王%"//为王字开始的名字 后面多少字符无所谓
like"王_"//为王字开始的名字 后面只能有一个字符
当然也可以连续使用单字符
比如:
"王__" //表示王后面有两个字符
"_王%"//王字前面有一个字符
………………
等等 有很多 就不一一列举了。
创建数据库
create database [if not exists]数据库名
// if notexists 是进行判断 所 创建\删除 的 库\表 是否存在
使用数据库
use 数据库名
删除数据库
drop database[if exists]数据库名;
查询当前数据库信息
# 查询当前连接的数据库
select database();
#查询当前的数据库版本
select version();
#查询当前的日期
select now();
#查询当前的用户
select user();
创建表
create table[if not exists] 表名(
字段1 字段类型[列级约束条件],
字段2 字段类型[列级约束条件],
.......
[表级约束条件]
)
显示数据库中的表
show tables;
导入数据库脚本
(结尾不加分号,读取外部SQL脚本,SQL脚本里的语句是以分号结尾的)
- 注意:
- 导入的时候没有分号,路径中不能含有中文
- 需要先创建数据库,然后use使用才能导入
source 脚本文件路径
例:source D:\pointer\lessson\MYSQL\comment.sql
查看表的基本结构
desc 表名;
例:desc emp;
查看数据库/表的创建语句
show create database 数据库名;
show create table 表名;
查询
简单查询
查询指定字段
select 字段1,字段2,......
例:select ename,sal from emp;
select ename from emp;
查询全部字段
select * from 表名;
select * from emp;
条件查询
使用where语句,放在from后面。
select * from emp where 条件;
select * from emp where empno>7500;
高级查询
排序
- order by句子:对查询结果按指定字段进行排序。也可以指定select列表中列的序号进行排序。
order by 字段1[,字段2][asc|desc](正序|倒序)
select *from emp order by sal desc;
限制数量
- limit子句:select语句返回所有匹配的行,他们可能是指定表中的每个行,为了前几行或中间几行,可以使用limit子句。使用limit可以解决分页问题。
limit 行数(从第一行开始)
limit 开始行(从0开始),行数
select* from emp order by sal limit 1;//排序后,取第一行(即最小的薪水的员工)。
select * from emp order by sal limit 3,5;//排序后,从第4行开始(偏移3,从0开始算),取连续的5行。
例:
select * from emp order by sal limit 1;
//返回第一行:薪水最小的员工(张三)。
select * from emp order by sal limit 3,5;
//从偏移3(第4个位置,也就是赵六)开始,取连续5行:
//结果会是:赵六、孙七、周八(如果表中还存在更多行的话,会继续取,否则取到最后一行)。
去重
- distinct关键字:用于返回唯一不同的值
#列出所有岗位,先查询在去重
select distinct job from emp;
#同时作用两列,不能查询目标列以外的列
select distinct job,mgr from emp;
组合查询
- union操作符:执行多个查询(多条selete语句),将结果合并为单个结果集返回
select 字段1[,字段2,。。] from 表1
union
select 字段1[,字段2,。。] from 表2;
例:
select empno,ename from emp where empno>7700
union
select empno,ename from emp where ename not like'%c';//like模糊查询
select empno,ename from emp
union
select deptno,dname from dept;
注意:
- 每个查询必须包含相同数量的列
- 列必须拥有相似的数据类型
- union自动去除了重复的行,如果允许重复行,请使用union all
DDL(数据定义语言)
Data Definition Language,用于定义和管理数据库中的对象和结构,如表,列,索引等。
创建表
create table[if not exists] 表名(
字段1 字段类型[列级约束条件],
字段2 字段类型[列级约束条件]
.......
[表级约束条件]
)
修改表
理想状态下,当表中储存数据以后,该表就不应该被更新。在表的设计过程中需要花大量时间来考虑,以便后期不对该表进行大的改动。
- 添加字段
alter table 表名// alter表示修改表
add column 新列名 数据类型[约束条件][first|after列名];// column表示列
- 修改字段类型
alter table 表名
modify column 列名 数据类型[约束条件];//modify表示修改已存在列的定义(数据类型、长度、约束等)
- 修改字段位置
alter table 表名
modify column 列名 数据类型 first|after 列名;//这里面frist|after表示位置放在第一列或者最后一列
- 修改字段名
alter table 表名
change column 旧列名 新列名 数据类型;
- 删除字段
alter table 表名
drop column 列名;
重命名表
alter table 旧表名
rename to 新表名;
删除表
drop table [if exists]表1[,表2,表3......];
DML(数据操作语言)
Data Manipulation Language,用于操作数据库中的实际数据,如插入,更新,删除和查询数据。
插入数据
- 插入完整的行,所有字段。每一个字段都必须提供一个值,如果某个字段没有值应该使用NULL,每个字段必须以他们在表中定义的顺序给出。这种语法很简单,但是不安全,应该避免使用。
insert into 表名
values(
字段1的值,
字段2的值,
。。。。。
);
- 更安全的方法是,在表名后括号中给出字段名,values中的值的顺序与前面给出的字段的顺序相同,一一对应。不需要与表中定义的顺序相同,没有值的字段可以不提供。
insert into 表名(
字段1,
字段2
。。。
)`
values(
字段1的值,
字段2的值,
。。。
);
values后面可以跟多个括号,括号间用逗号分离,每个括号代表要插入的一条数据。单个insert语句插入多条数据比多条insert语句快。
更新数据
update 表名
set 字段1=字段1的值,
字段2=字段2的值,
。。。
where 限制条件;
记得加where限制条件,否则更新整个表中的每一条数据。
删除数据
delete from 表名
where 限制条件;
同样,不加限制条件会删除整个表中每一条数据
物理删除,无法恢复
注意:在对update或delete使用where前,应该先用selete语句进行测试,保证它的过滤结果是正确的(谨记)