1.数据库简介
2. SQL简介
3. 数据库的操作
3.0 启动和停止服务
=>打开cmd
=>windows 开启 MySQL : net start mysql57
=>登录账户: mysql -u root -p
=>输入密码: ****
=>windows 关闭 MySQL : net stop mysql57
3.1 DDL【数据定义语言】
3.1.1 创建与查看【create,show,use,select】
a. 创建数据库
mysql> create database 数据库名 charset = utf8;
b. 创建表
mysql> create table 表名(
字段1 字段类型[列级别约束条件][默认值],
字段2 字段类型[列级别约束条件][默认值],
….
字段n 字段类型[列级别约束条件][默认值]
[表级别约束条件]
);
c. 查询当前数据库服务器中的所有数据库:
show databases; #记住是databases而不是database
'''
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydb1 |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.01 sec)
'''
d. 查看当前正在使用的数据库
select database();
'''
+------------+
| database() |
+------------+
| mydb1 |
+------------+
1 row in set (0.00 sec)
'''
e. 切换数据库
use 数据库名;
'''
Database changed
'''
f. 退出数据库
方式一:mysql> exit
'''
Bye
'''
方式一:mysql> quit
'''
Bye
'''
3.1.2 操作【alter】
a. 修改表名 【rename to】
alter table old_table_name RENAME TO new_table_name
'''旧表名 ,新表名'''
b. 修改字段的数据类型【modify】
ALTER TABLE table_name MODIFY 字段名 数据类型
'''修改完成之后可以查看DESC table_name检验结果'''
c. 修改字段名【change】
ALTER TABLE table_name CHANGE 旧字段名 新字段名 数据类型
d. 添加和删除字段【add】【drop】
'''添加字段'''
ALTER TABLE table_name ADD 新字段名 数据类型 [约束条件] [FIRST|AFTER 已经存在的字段名]
'''删除字段'''
ALTER TABLE table_name DROP 字段名
e. 修改字段的排列位置【 MODIFY】
ALTER TABLE table_name MODIFY 字段1 数据类型 FIRST|AFTER 字段2
first: 设置成第一个
after 字段2: 在指定字段2的后面
f. 删除表的外键约束【DROP FOREIGN KEY】
ALTER TABLE table_name DROP FOREIGN KEY 外键约束名
g. 删除数据表
'''删除没有被关联的表'''
语法规则:DROP TABLE [IF EXISTS] 表1,表2...
'''删除被其他表关联的的表'''
直接删除会出现错误的,操作: 先解除关联 再进行删除
3.1.3 删除【drop】
a. 删除数据库
mysql> drop database 数据库名;
b. 删除表
mysql> drop table 表名;
3.1.4 数据类型***
3.2 DML【数据操作语言】
3.2.1 插入 【insert】
a. 单行插入
INSERT INTO table_name (field1, field2,...fieldN) VALUES(value1, value2,...valueN);
b. 多行插入
INSERT INTO table_name (field1, field2,...fieldN)
VALUES
(value1, value2,...valueN),
(value12, value22,...valueNN)...;
'''其实就比单行插入多一个逗号隔开'''
3.2.2 更新 【update…set】
a. 用法
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
'''
注意:
a.完全可以更新一个字段或者多个字段
b.where相当于Python中的if语句
c.可以指定任何条件到where子句中
d.如果没有where子句,则默认所有的行都被同时更新为指定的操作[慎用!一般要结合where使用]
'''
b. where 语句
where语句就是一个操作符,类似于Python中的if语句,可以做数据筛选
操作符 | 说明 |
---|---|
= | 相等 |
<> / != | 不相等 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
IN(A,B) | A 和 B 之间 |
between A and B | 位于两值之间 |
AND | 连接多个表达式 并且的关系 |
3.2.3 删除 【delete】【truncate】
a.【delete】
delete from table_name [where cause]
'''
注意:
a.如果where子句没有指定,则默认将表中的数据全部删除【慎用!】
b.可以指定任何条件在where子句中
'''
b.【truncate】
truncate table 表名
'''
删除表的方法有delete, truncate, drop
truncate table 用于一次性删除所有的行,与没有where语句的delete类似;但是用的资源更少,速度更快
delete:删除表中的指定数据,表结构还在,删除之后的数据可以找回,对自动增加的字段无影响
truncate:清空表中的数据,删除的数据是不能找回的,执行速度比delete快,自动增加的字段会重新计数
drop: 删除表,数据和表结构都删除
'''
3.3 DQL【数据查询语言】
数据库执行DQL语言不会对数据库中的数据发生任何改变,而是让数据库发送查询结果到客户端
查询返回的结果其实是一张虚拟表
3.3.1 语言顺序
a. 查询语句书写顺序
select----》from---》where---》group by-----》having-----》order by----->limit
'''
select (这里是要打印的字符,选取哪些列进行打印)
from (表)
where (进行数据筛选)
group by (根据某个字符进行分组)
having (进行聚合函数筛选,必须在group by的后面)
order by (将多次筛选,分组出来得数据进行排序)
limit (只打印所选的范围)
'''
b. 查询语句执行顺序
from----》where-----》group by----》having----》order by ----》select-----》limit
'''
先从表里调出数据
进行where---group by---having 的筛选和分组过程,然后筛选的数据进行排序
最后进行打印阶段:select选择要打印哪些行,而limit选择打印多少列
'''
3.3.2 基础查询
a. 查询所有列
select * from 表名;
b. 查询指定列
select field1, field2 field3... from 表名;
3.3.3 条件查询【结合where】
操作符 | 说明 |
---|---|
= | 相等 |
<> / != | 不相等 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
IN(A,B) | A 和 B 之间 |
between A and B | 位于两值之间 |
AND | 连接多个表达式 并且的关系 |
between…and: 介于…和…之间
and:逻辑与
or:逻辑或
in / not in:类似于Python中的成员运算符
is / is not: 类似于Python中的身份运算符 , 常用语判断null值, 如:name is null
3.3.4 模糊查询【结合where…like】
where 子句中=表示精准查询
like:一般情况下结合where子句使用
通配符:
_: 匹配任意一个字符
%:匹配0~n个字符【n大于等于1】
'''打四个下划线,由几个字符组成就几个下划线,字符中如果某一固定位置有固定字符,那就类似__x__'''
select * from 表名 where field like '____';
例子
#1.查询姓名由4个字符组成的记录
mysql> select * from student where name like '____';
#2.查询姓名由3个字符组成的记录,并且最后一个字母为c的记录
mysql> select * from student where name like '__c';
#3.查询以a开头的记录
mysql> select * from student where name like 'a%';
#4.查询姓名中包含b的记录
mysql> select * from student where name like '%b%';
#5.查询姓名中第2个字母为c的记录
mysql> select * from student where name like '_c%';
3.3.5 字段控制查询【as, distinct】
as: 起别名
distinct: 去除重复记录
'''as: 起别名'''
select 字段1 as 别名1, 字段2 as 别名2...
'''distinct: 去除重复记录'''
select distinct field from field;
3.3.6 排序【order by】
order by: 指定数据返回的顺序
asc:ascending,升序
desc: descending,降序
select field1... from 表 order by field1 asc/desc
3.3.7 分组查询【group by,having】
group by:分组查询
having:有…,表示条件,类似于where的用法
聚合函数:聚合函数主要用来做纵向运算
count(), 统计指定列不为null的记录行数
sum(), 计算指定列的数值和
max(), min(), 求指定列中的最大值和最小值
avg(), 平均数
select field1... from 表 group by field1 having...
'''
having和where的区别
a.二者都表示对数据执行条件
b.having是在分组之后对数据进行过滤
where是在分组之前对数据进行过滤
c.having后面可以使用聚合函数
where后面不可以使用聚合函数
'''
3.3.8 分页查询【limit】
limit:用来限定查询的起始行,以及总行数
''' 1.查询x行记录,起始行从y开始'''
select * from emp limit x,y;