1.数据库的简介
数据库定义
持续化存储
读写速度极高
保持数据的有效性
对程序支持非常好,容易扩展
2.分类
关系型数据库 mysql oracle sqlite
非关系型数据库 MongodDB
sql 结构化查询语言 操作关系性数据库 不区分大小写
DQL 查询 select
DML 增、删、改 insert delete update
mysql 关系型数据库管理系统 属于Oracle公司的
特点 开源 免费 使用范围广 支持多平台 给多种语言提供API接口
2.数据库的安装
详细请看 https://www.cnblogs.com/winton-nfs/p/11524007.html
3.创建一个数据库
连接mysql
mysql -u root -ptest
退出mysql
quit exit ctrl+d
查询命令
select version(); 查看数据库版本号
select now(); 查看当前时间
查看数据库
show databases;
创建数据库
create database 1906c charset=utf8;
使用数据库
use 1906c;
查看当前使用的数据库
select database();
删除数据库的
drop database 库名;
4.表
查看数据库里的所有表
show tables;
查看表结构
desc 表名;
创建表
create table 表名()
给表添加字段
alter table 表名 add 字段名 类型
重命名表里的字段名
alter table 表名 change 旧名 新民 类型 约束
修改表里的字段类型及约束(不需要重命名)
alter table 表名 modify 字段名 新类型 约束
删除字段
alter table 表名 drop 字段名
删除表
drop table 表名
查看创建表的语句
show create table 表名
修改表名
alter table 旧表名 rename to 新表名
表的数据类型
使用数据类型的原则
够用就行,尽量使用范围小的 为了节省存储空间
数值 int decimal(4,1) 987.6
字符串 char(3) 'ab ' varchar(3) 'ab' text 当字符数大于4000的时候使用
日期 date 年月日 time 时分秒 datetime 年月日时分秒
需求
创建一个英雄联盟LOL表
id int primary key auto_increment not null
name varchar(20)
age int
attack decimal(5,3)
sex enum("男","女","妖")
date datetime
约束
primary key 主键
auto_increment 自增
not null 非空
foreign key 外键
unique 唯一
default 默认
unsigned 无符号约束
5.表的增删改查
1、查
查询表的所有数据
select * from 表名;
查询指定的列
select 列名1,列名2 from 表名;
增
全列插入
insert into 表名 values(id int primary key auto_increment )
指定列插入
插入的数据和列名对应
insert into 表名(列名1,列名2) values ( )
指定列一行一行插入
insert into 表名( 列名) values ( ..........)
改
修改表里的数据
update 表名 set 列名=新的值 where id = **;
删
delete from 表名 where id = ** ;
起别名
select 列名 as 新列名, 列名1 as 新列名1 from 表名
去重 单列
select distinct 列名 from 表名
数据条件查询
where
1、比较语句
> = < >= <= !=
> 2、逻辑运算符
> and or not
> 3、模糊查询
> like
> % 匹配任意多个字符
> _ 匹配任意一个字符
> 4、范围查询
> in 表示在一个不连续的范围内
> between ......and ... 表示在一个连续的范围内
> null
> is null 判断是空
> is not null 判断不是空
优先级:
由高到低的顺序
小括号>not>比较运算符>逻辑运算符
在逻辑运算符里 and > or
如果想要先执行or 就得加括号
排序
order by
asc 升序
desc 降序
分组
group by 在查询结果后面进行分组
select gender from students group by gender;
1、group by + group_concat(字段名) 可以查出该字段的信息
select gender,group_concat(name) from students group by gender;
2、group by + 聚合函数 avg() sum() count(*)
select gender,count(*) from students group by gender;
3、group by + having
having 条件表达式 用来分组查询后再根据条件进行查询
having和where的用法是一样的 只不过having只能在group by 后使用
mysql> select gender,count(*) from students group by gender having count(*)>2;
4、group by + with rollup
作用就是在最后一行 记录当前列里所有记录的总和
6.聚合函数
1、count(*) 获取总行数
select count(*) from students;
2、max 查询最大值
3、min 查询最大值
4、sum 求和
5、avg 求平均值
5、round(avg(列名),2) 求平均值保留两位小数
一个汉字占多少长度与编码有关:
UTF-8:一个汉字=3个字节
GBK:一个汉字=2个字节
分页
1、limit start(开始,从第几行开始查) ,count(从开始行下一行,往后查几行数据)
select * from 表名 limit start,count;
select * from 表名 limit 9,5;
7.外键
定义、连接两个表的
1、先建主表 插入数据
2、再建子表
注意 一定要先创建与与主表关联的列
foreign key(列名) references 主表(id)
3、插入数据
两张表创建之后添加外键
alter table 表名 add foreign key 列名 references 主表名(id)
查看外键
show create table 表名
删除外键
首先要知道外键的名称
show create table 表名
删除外键约束的命令
alter table 子表名 drop foreign key 外键名称
8.修改mysql密码
一、在windows 下修改密码
1、进入mysql
2、use mysql
3、update user set password = password('1234') where user='root'
4、关闭mysql
5、重启电脑
二、在linux下修改密码 密码一定要记住
1、进入mysql
2、use mysql
3、update user set authentication_string = password('1234') where user='root'
4、关闭mysql
5、重启虚拟机
9.连接查询
1、内连接 就是两张表的交集
select * from 表1 inner join 表2 on 表1.列名=表2.列名
2、左连接
select * from 表1 left join 表2 on 表1.列名=表2.列名
3、右连接
select * from 表1 right join 表2 on 表1.列名=表2.列名
自关联
一个表自己查询自己
inner join on
子查询
定义:一个select语句里面嵌入另一个select语句
主查询和子查询的关系
1、子查询是嵌入在主查询里
2、子查询是辅助主查询 充当条件或者数据源的
3、子查询是一个完整的select语句,可以被单独拿出来使用
子查询分类
1、标量子查询 返回的是数据(一行一列)
2、列级子查询 返回的是一列(一列多行)
3、行级子查询 返回的是一行(一行多列)
10.视图
1、定义 select 语句的结果集,是一张虚拟的表
2、创建视图语句
create view 视图名 as select语句
3、查看视图
show tables;
4、使用视图
select * from 视图名
5、删除视图
drop view 视图名
视图的作用
方便操作 减少复杂的SQL语句,增强可读性
11.事务
应用场景:
银行的订单系统
定义:
是一个操作序列,这些操作要么都执行,要么都不执行,是一个不可分割的工作单位
四大特性:
原子性
一致性
隔离性
持久性
1、开启
begin
2、插入数据
3、提交
commit
1、rollback 回滚
索引
定义:数据库的索引好比就是一本书的目录
作用:优化查询速度
查看索引
show index from 表名
创建索引
create index 索引名 on 表名(字段名(长度))
删除索引
drop index 索引名 on 表名
import pymysql
conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
password = '1234',
db = 'jing_dong',
charset = 'utf8',
)
'''
Connection对象
? 用于建立与数据库的连接
? 创建对象:调用connect()方法
conn=pymysql.connect(参数列表)
? 参数host:连接的mysql主机,如果本机是'localhost'
? 参数port:连接的mysql主机的端口,默认是3306,可以不写?
? 参数db:数据库的名称
? 参数user:连接的用户名
? 参数password:连接的密码
? 参数charset:通信采用的编码方式,建议是'utf8',要求与数据库创建时指定的编码一致。
conn对象的方法
? ?当连接成功后可以做如下操作:
? close()关闭连接
? commit()事务,所以需要提交才会生效;
? rollback()事务,放弃之前的操作
? cursor()返回Cursor对象,用于执行sql语句并获得结果
Cursor对象
? 创建对象:调用 Connection对象的cursor()方法 cursor=conn.cursor()
? 执行sql语句
Cursor对象的方法
? close()关闭
? execute(operation [, parameters ])执行语句,返回受影响的行数。
? fetchone()执行查询语句时,获取查询结果集的第一个行数据,返回一个元组。
? next()执行查询语句时,获取当前行的下一行
? fetchall()执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回
———————————————