操作数据库(DDL)
Cmder是一个软件包,它被创建出来用于Windows上替代模拟器的,cmder官网:https://cmder.net/,安装完成后把安装目录下的bin文件夹添加到环境变量里才能正常使用(跟安装python类似)。
- 连接数据库
mysql -u用户名 -p
enter password:密码
此时把密码单独以密文的形式输入,进入mysql的操作环境。
- 显示数据库,
show databases;
,从1可以看出mysql语句的结尾用分号(;)或者(\g),显示出来的数据库跟SQLyong里的一样。
语句的书写不区分大小写,show DataBases;
,得到的结果也一样,用键盘上的上箭头调出上一条语句,如果语句结尾没有分号或者\g,程序会一直等待用户继续输入,直到遇见分号或者\g。 - 显示数据库的版本号
select version();
- 查看当前的时间,
select now();
- 退出数据库,
exit;quit;
- 创建数据库
在SQLyong的图形界面,我们是点右键进行数据库和表的创建。
在mysql中用语句进行创建,注意’-'在mysql语句中是个特殊的字符,一般不使用,如果要用的话,在英文状态下,用tab和1之间的上波浪线把数据库名字括起来。charset=utf8为指定编码集,防止中文出现乱码。
create database + 数据库名;
create database + 数据库名 charset=utf8;
- 显示创建的数据库
show create database + 数据库名(`mytest-01`);
- 查看当前使用的是哪个数据库
select database();
当前没有使用任何数据库,所以得到的结果为NULL。
这些命令都是针对数据库的操作,没有数据库就无法对数据表操作,没有数据表就无法对数据进行操作。 - 使用数据库
use 数据库名;
- 删除数据库
drop database 数据库名;
数据库在删除后,再用 show databases();,删除的数据库就不再显示了。
注意:SQL语句不区分大小写;每行必须以英文状态下的分号作为结束;当数据库名有特殊字符的时候,使用``进行包括。
练习
创建数据库:my_test;查看已创建的数据库;查看当前使用的数据库是否是my_test;若不是,则切换至my_test数据库;删除my_test数据库。
操作数据表
- 查看当前数据库中的所有表
show tables;
- 创建表
create table 数据表名(字段,类型,约束);
需求:创建表名为mytable1,字段id为int并且字段name为varchar(30);创建表名为mytable2,指定id为主键并且字段name为varchar(30)
- 查看表的创建语句
show create table 数据表名;
- 查看表描述信息
desc 数据表名;
练习
创建students表(id、name、age、high、gender、cls_id);创建classes表(id、name)
创建student表时,设置id为int型、主键、非空、自增;age默认为18;性别默认为保密。
- 添加表字段
alter table add 字段 类型;
- 修改表字段
alter table 数据表名 modify 字段 类型; -- 不重命名
alter table 数据表名 change 原字段名 新字段名 类型及约束; -- 将字段重命名
- 删除表字段
alter table 数据表名 drop 字段;
在cmder中运行和SQLyong中运行的结果一样的,SQLyong中运行的代码可以进行保存。
注意:代码需要选中,再运行,也可以点击F9运行,运行结果需要在表数据中刷新一下才能显示。
操作数据
增删改数据
- 整行插入
insert into 数据表名 values(值1,值2,值3...);
- 指定列中插入数据
insert into tabname(字段1,字段2...) values(值1,值2...);
- 指定列中插入多条数据
insert into 数据表名(字段1,字段2,...) values(值1,值2...),(值1,值2...);
- 修改数据
update 数据表名 set 字段1=新值,字段2=新值 [where 条件];
如果后面不加条件,会全部更新 - 删除数据
delete from 数据表名 [where 条件]
,如果不加条件,会删除全部数据。
查询数据
查询数据直接在结果中显示,就不用再切换到表数据中去刷新查看了。
- 查询整个表数据
select * from 数据表名;
- 查询指定字段数据
select 字段1,字段2 from 数据表名;
查询2个以上的字段时,不能加括号,会报错 - 查询指定字段数据,并给字段起别名
select 字段1 as 别名,字段2 as 别名 from 数据表名;
- 查询指定字段并去重
select distinct 字段1 from 数据表名;
逻辑运算符
运算符 | 描述 |
---|---|
a and b | 当同时满足a,b时,则为True |
a or b | 当满足a或b其中一个时,则为True |
not a | 否定 |
模糊查询
用 like 关键字来进行模糊查询,并结合’%‘以及’_'使用
- % 表示任意多个任意字符
- _ 表示一个任意字符
范围查询
关键字 | 描述 |
---|---|
in | 表示在一个非连续的范围内 |
between…and… | 表示在一个连续的范围内 |
空判断
关键字 | 描述 |
---|---|
is null | 判断空 |
is not null | 判断非空 |
常用的聚合函数
- count 总数
- max() 最大值
- min() 最小值
- sum 求和
- avg 平均值
分组
在数据库中,通过group by 将查询结果按照1个或多个字段进行分组,字段值相同的为一组。
select 查询内容 from 表名 group by 分组字段;
group_concat(); 查看每组的详细信息
with rollup; 计算分组后的总数
分组后的筛选
原始数据集 where 条件 group by 分组 having 子句,group by 分组后再进行筛选的时候用having
排序
order by 字段; 默认升序,从小到大排列
order by asc 字段; 指定字段升序
order by desc 字段; 指定字段降序
限制
limit可以限制网页的数据都是分页、分条显示。
limit start,count;
,start 为偏移量,从哪一条开始,默认起始为0;count为条数,一页显示的条数。
limit 不能写数学公式,只能写在末尾。
表连接
当查询结果的列来源于多张表时,需要将多张表连接程一个大的数据集,再选择合适的列返回mysql,这时就要使用表连接。
内连接
仅选出两张表中互相匹配的记录。如果不指定匹配列,将对两个表进行拼接。
select * from 表1 inner join 表2 on 表1.列 = 表2.列;
外连接
- 左连接,以左表为主
查询的结果为两个表匹配的数据,左表持有的数据,对于右表中不存在的数据,使用null填充。
select * from 表1 left join 表2 on 表1.列 = 表2.列;
- 右连接,以右表为主,使用和左连接相同
查询结果为两个表匹配到的数据,右表持有的数据,对于左表中不存在的数据使,用null填充。
select * from 表1 right join 表2 on 表1.列 = 表2.列;
子查询
某些情况下,当进行查询的时候,需要的条件是另外一个select语句的结果,这时就要用到子查询。
更改引擎
不同的引擎支持不同的功能,查看引擎 show engines,默认使用的引擎为MyISAM,这个引擎是不支持外键的,要更改为INNODB,找到MySQL的安装路径,找到my.ini文件,更改default-storage-engine=INNODB,然后到data文件夹里删除ib_logfile0 和 ib_logfile1 这两个文件,重启MySQL就可以更换引擎了。
自关联
可以简单的理解为自己与自己进行连接查询。如一张areas表里有省市区,我们需要通过这一张表查询某省对应的所有市。select * from areas as p inner join areas as c on p.id = c.pid having p.name='省份';
比如省市区三级联动选择表中,选择省份,在城市里就会显示相应省份的城市,在地区里也会显示相应城市的地区。
在数据库的provinces表中湖南省的provinceid 为430000,在cities表中长沙市到湘西土家 的城市provinceid 也为430000,做查询的时候首先找到provinces表中湖南省的provinceid,然后根据provinceid 到cities表中去查询。
外键(foreign key)
多表关联,保持数据的完整和一致性。
MySQL的外键约束是表的一个特殊字段,对于两个具有关联关系的表而言,相关联字段中的主键所在表就是主表(父表),外键所在的表就是从表(子表)。
注意:主键不能包含空值,但允许在外键中出现空值,也就是说只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
student表cls_id和classes表中id看似内容一致,如果没有做任何设置,更改classes表中id的值,student表中的cls_id不会发生变化,需要利用外键建立两个表之间的联系,classes表中的主键id,为student表的外键(cls_id)。一旦两张表建立了联系,可以直接删除子表,但是不能直接删除主表。
创建外键方式 constraint 约束名 foreign key 子表的字段 references 主表名 主键
修改 alter,删除为drop