前言:
本文介绍了笔者的Mysql数据库SQL语句学习过程,笔者学习尚浅,若有不足希望各方大佬多多指正。
一、浅谈数据库
什么是数据库?简单来说数据库是一个文件系统,是以文件存储在服务器的电脑上的。而如何对数据库进行操作?所有关系型数据库都可以用SQL语句进行管理。而本文介绍的是Mysql数据库,Mysql是开源的小型关系型数据库,功能强大且不收费(适合白嫖 下面正式进入SQL语句的学习
二、何为SQL?
SQL(Structured Query Language)结构化查询语言。SQL是所有关系型数据库的查询规范,不同数据库都支持,但不同数据库略有所区别。
SQL的分类:
Data Definition Language(DDL 数据定义语言)
Data Manipulation Language(DML 数据操纵语言)
Data Query Language(DQL 数据查询语言)
Data Control Language(DCL 数据控制语言)
注:本文在于介绍前三种类型,最后一种使用较少本次不做介绍
三、如何登陆数据库
数据库安装后我们如何登陆数据库呢?很简单通过控制台 mysql -u用户名 -p密码;就可以顺利登陆数据库。不过黑糊糊的控制台非常不方便我们阅读,此时数据库可视化工具九起到了很好的作用不仅赏心悦目而且简单易用,最重要的是可以不用写SQL语句,直接鼠标点点点(笔者强烈推荐使用可视化工具也使用SQL语句 而可视化工具有哪些呢navicat、SQLyog、MySQL-Front,至于使用哪个就看你自己喽,仁者见仁智者见智我不做出评价说谁最好,有人说navicat好用,也有其他选择,而笔者选用的是SQLyog。
四、DDL
(1)操作数据库:CRUD
C(ctreate)创建
创建数据库
create database 数据库名称;
注:如果创建的数据库已经存在使用该条语句便会报错为避免该情况发生可进行如下操作
create database if not exists 数据库名称:
根据数据库安装设定创建的数据库字符集默认为为utf-8若要创建其他字符集数据库可做出如下改变
create database 数据库名称 set 字符集名称;
当然创建数据库后各位小伙伴免不了要使用数据库来看看数据库到底怎么用下面介绍简单的使用语句
use 数据库名称; //使用数据库
select database(); //查看正在使用的数据库
R(retrieve)查询
查询所有数据库名称
show databases;
查询某个数据库的定义信息
show create database 数据库名称;
U(update)修改
修改数据字符集
alter database 数据库名称 character set 新字符集名称;
D(delete)删除
删除数据库
drop database 数据库名称;
若要避免因删除不存在的数据库引发错误可在删除前增加判断语句
drop database if exists 数据库名称;
(2)操作表
C(create)
创建表
create table 表名称(
列名1 数据类型1,
列名2 数据类型2,
列名3 数据类型3
);
快速创建一个相同类型的表
create table 新表名称 like 旧表名称;
注:为了增强语句可读性可以将较长语句分行书写
常用数据类型介绍
int 整数
double 小数
date 日期(只包含年月日 格式为:yyyy-MM-ddd)
datetime 日期(包含年月日时分秒 格式为:yyyy-MM-dd-HH:mm:ss)
timestamp 时间戳类型 不需要自己赋值,默认时间是系统当前操作时间
varchar(m) 使用时需指定m长度的,指定会报错
R(retrieve)
查看数据库中的所有表
show tables;
查看表的结构
desc 表名称;
查看创建表的SQL语句
show create table 表名称;
D(delete)
删除表
drop table 表名称;
若要避免删除不存在的表引起错误删除前可先判断
drop table if exists 表名称;
U(update)
修改表名
alter table 表名称 rename to 新表名称;
修改表的字符集
alter table 表名称 character set 字符集名称;
添加一列
alter table 表名称 add 列名称 数据类型;
修改列名称
alter table 表名称 change 旧列名 新列名 数据类型;
修改列类型
alter table 表名称 modify 列名 新数据类型
五、DML(对表中的数据进行增删改等操作)
(1)添加数据
insert into 表名(
列名1,
列名2,
...
列名n
)
values(
值1,
值2,
...
值n
);
注:列名与值一一对应,若不写默认给表中所有列赋值
若插入部分数据,就写出插入列与值的对应
(2)修改数据
相关复制语句
将表1中的所有数据复制到表2
insert into 表名1 select *from 表名2;
只复制部分列
insert into 表名1(
列名1,
列名2
)
select
列1
列2
from 表名2;
更新表中的记录
update 表名称 set 列名=值; //修改表中的所有列
带条件修改
update 表名称 set 列名 = 值 where 列名1 = 值1; //修改列名1为值1的一行
(3)删除数据
delete from 表名称 [where 条件];
注:[]内内容可选可按条件删除数据
如:delete from student where id=1; //删除学生表中id为1的记录
六、DQL(查询表中的记录)
(1)基础查询
查询表中所有数据
select *from 表名称;
按条件查询指定列
select 字段1,字段2...,字段n from 表名称;
对指定列起别名
select 字段名1 as 别名1; //可用别名1表示字段名1,常用于对名称较长列的操作
查询表中某字段的记录(不含重复值)
select distinct 字段名 from 表名;
表中数据列与列的运算
select 列名1+列名2 from 表名;
同时可以为运算后获得数据取名
select 列名1+列名2 名称 from 表名;
(2)条件查询
语法:
select 字段名 from 表名 where 条件;
注:
(1)字段名可包含多个字段
(2)条件可使用> < <= >= =等
(3)条件也可使用and or not等逻辑运算符
例子:
select *from student where math>80; //查询学生表中数学成绩大于80的
select *from student where math>70 and math<80; //查询学生表中数学成绩大于70小于80的
select *from student where name like '%云%'; //查询学生表中名字带有云的人
(3)排序
select 字段名 from 表名 order by 字段名[ASC or DESC];
注:
排序方式有两种
ASC 升序(默认使用)
DESC 降序
例子:
select *from student order by math ASC , english ASC;
//将学生表中的数据按数学成绩升序排列,若数学成绩相同按英语成绩升序排列
(4)聚合函数(将数据作为一个整体纵向计算)
count:计算个数
max:计算最大值
min:计算最小值
sum:计算和
avg:计算平均值
语法:
select 函数名(字段名) from 表名称;
例子:
select max(math) as 数学最高分 from student;
//将学生表中数学成绩最高分显示在 相互学最高分一列
(5)分组查询
语法:
select [分组字段,聚合函数] from 表名称 [分组条件限定] group by 分组字段;
where 和 having 的区别?
①where在分组前限定,having在分组后限定
②where后不可跟聚合函数判断,having可以
例子:
select sex,avg(math) from student where math>80 group by sex;
//将学生表中数学成绩大于80分的人按性别算出平均分
(6)分页查询
语法:limit 开始索引,每页查询条数;
select *from 表名 limit 0,3; //从0开始每页3条
(7)表的约束(对表中数据进行约束)
1、主键约束:primary key
含义:非空且唯一,表中记录的唯一标识
添加方式
(1)创建表时添加
create table 表名(
列名1 数据类型 primary key,
...
);
(2)创建后添加
alter table 表名 modify 列名 数据类型 primary key;
删除主键方式
alter table 表名 drop primary key;
例子:
create table student(
id int primary key
);
2、自动增长:quto_increment
3、非空约束:not null
添加方式
(1)创建表时添加与主键类似
(2)创建后添加
alter table 表名 modify 列名 数据类型 not null;
4、唯一约束:unique
添加方式
与非空约束相似
删除方式
alter table 表名 drop index 列名;
5、外键约束:foregin key
添加方式
(1)创建时添加
create table 表名(
...
外键列
constraint 外键名 foreign key 外键列名称 reference 主表名称
);
(2)表已存在
alter table 外键所在表 constraint 外键名 foreign key 外键名称 reference 主表名称(主表列名称);
删除外键
alter table 外键所在表名称 drop foregin key 外键名;
例子:
//创建一个班级表
create table class(
id int primary key auto_increment,
class name not null
);
//创建一个学生表
create table student(
student_id int primary key auto_increment,
classs_id int,
constrant class_id_fk foreign key(class_id) references class(id); //添加主键约束
);
6、级联操作
为避免通过外键约束将两个表连接在一起后修改其中一个表能同时影响另外一个表可用级联更新操作
级联更新
增加外键语句+on update cascade;
级联删除
增加外键语句+on delete cascade;
7、数据库备份
语法:
mysqldump -u用户名 -p密码 数据库名称>保存路径;
还原操作
(1)登录数据库
mysql -u用户名 -p密码;
(2)创建数据库
create database 数据库名;
(3)使用数据库
use database 数据库名;
(4)执行文件
sorce 文件路径;
8、多表查询操作
(1)内连接查询
①隐式内连接查询
select *from 表名1 表名2 where 外键约束;
注:用*表示查询所有字段的笛卡尔集。
②显式内连接
select 字段列表 from 表名 inner join 表名1 表名2 on 条件;
例子:
select *from student,class where student.class_id = class.id; // 隐式内连接
(2)外连接查询
①左外连接
select 字段列表 from 表1 left outer join 表2 on 条件;
②右外连接
select 字段列表 from 表1 right outer join 表2 on 条件;
例子:
select *from student left outer join class on student.class_id = class.id; //左外连接
select *from student right outer join class on student.class_id = class.id; //右外连接
原创不易若有帮助请多点赞与收藏,谢谢读者观看。