MySQL
1、数据库的概念:
- 按照一定的数据结构进行存储和管理的仓库
- 计算机是如何吹数据的?
- 主要存放在磁盘和内存中
2、分类:
- 关系型(sql):存储方式固定,安全
- 菲关系型数据库:灵活
3、进入数据库:mysql -uroot -pqwe123
4、退出:exit
#简单的命令
SELECT host,user FROM mysql.user;
库级操作语句
1、显示所有的库:
show databases;
2、创建库:
create database db_name;
3、删除库:
drop database db_name;或者 drop databases if exists db_name
4、进入数据库:
use db_name
表级操作语句
1、显示所有的表:
show tables;
2、创建表:
create table t_name(
id int primary key,
name varchar(20) not null
);
3、显示创建表信息:
show create table t_name;
show create table t_name \G
5、删除表:
drop table t_name;
表的增删改查
1、增
1、指定字段增加:
insert into t_name(id) value(1);
2、全字段插入:
insert into t_name value(1,'k');
3、多行插入
insert into t_name values(1,'k'),(2,'w');
2、查询
1、指定字段查询:
select field_names from t_name;(字段名后面跟as new_name)
2、全字段查询
select * from t_name;
3、带条件查询:
select field_names from t_name where conditions;
4、修改数据
1、修改所有的数据:
update t_name set field_1=value_1;
2、修改多个数据:
update t_name set field_1=value_1,field_2=value_2.....;
3、修改满足条件的数据:
update t_name set field_1=value_1 where conditions;
5、删除数据:
1、删除表中所有的数据:
delete from t_name;
2、删除满足条件的数据:
delete from t_name where conditions;
###注意这里要写where条件,不然会删除表中的所有的数据。
二、筛选条件
1、比较运算符:
- 等于:=
- 不等于:!=或者<>
- 大于:>
- 大于等于:>=
- 小于:<
- 小于等于:<=
- is null
- is not null
2、逻辑运算符:
- 与:and
- 或:or
- 非:not
eng: select * from t_name where age <>18; #年龄不是18的全字段查询
- between…and…(是一个区间)
- select * from t_name where age between 18 and 20;
- in (这里的in像是python中的in)
- select * from t_name where age in (18,20)
其他操作
排序(默认是正序(从小到大))(order by)
select * from t_name order by field [asc/desc];
正序:asc
逆序:desc
#####限制(limit):
1、简单的只是限制n条数据:
select * from t_name limit 3;
2、从3的位置开始显示4条数据
select * from t_name limit 3,4;
去重(distinct)
select distinct * from t_name;
模糊查询:
like '%'
1、任意多个字符:%
2、任意一个字符:_
三、聚合与分组
1、常用的聚合函数:
- 统计个数:count()
- 最大值:max()
- 最小值:min()
- 求和:sum()
- 平均值:avg()
- 列出字段全部值:group_concat() #指定字段的值以一行的形式显示出来
select count(*) from t_name;
select avg(age) from t_name;
2、分组(group by):分组只能写分组的field,除非用聚合函数。
select number ,max(ob) from t_name group by number;
##添加条件:这里的条件只能写被分组的field,除非用聚合函数。
select number ,max(ob) from t_name group by number having count(*)>9;
3、聚合删选:如果说是一条语句中同是出现了where,on ,having ,首先执行where,再执行on ,最后执行having
子查询
select * from student where age>(select avg(age) from student);
内连接(inner join):
#两个表里面的没条数据一一对应进行显示(会有重复)。
select * from t1 join t2;
#添加条件:
select * from t1 join t2 on id=2;
外连接({left|right} join)
约束条件
1、主键约束 = 唯一 + 非空
create table t_name(
id int primary key,
name varchar(20)
);
2、唯一约束
create table t_name(
id int unique key,
name varchar(20)
);
3、非空约束
creata table t_name(
id int not null,
name varchar(20)
);
4、默认约束
create table t_name(
id int default 'a',
name varchar(20)
);
5、自增长约束
create table t_name(
id int primary key auto_increment,
name varchar(20)
);
或者
create table t_name(
id int auto_increment,
name varchar(20),
primary key(id)
);
6、外键约束
create table t_name(
id_a int primary key,
name varchar(20)
);
create table b(
id_b int primary key,
name varchar(20),
foreign key(id_b) references a(id_a)
);
表结构修改
#修改表名
alter table t_name rename to new_name;
#修改字段名:
alter table t_name change [column] old_name new_name;
#修改字段类型:
alter table t_name modify field_name
表关系
一对一(两个表的主键关联)
通过外键和唯一键来实现
create table t_name(
id_a int primary key,
name varchar(20)
);
create table b(
id_b int primary key,
name varchar(20),
foreign key(id_b) references a(id_a)
);
一对多关系:
通过外键关联来实现
##创建一个学院表
create table department(
d_id int primary key auto_increment,
d_name varchar(20) not null
);
##创建一个学生表
create table student(
s_id int primary key auto_increment,
s_name varchar(20) not null,
dept_id int not null, #所属学院id
foreign key(dept_id) references department(d_id) #外键
)
多对多关系
##创建一个学生表
create table student(
s_id int primary key auto_increment,
s_name varchar(20) not null,
dept_id int not null, #所属学院id
foreign key(dept_id) references department(d_id) #外键
)
## 创建课程表
create table cours(
cours_id int primary key auto_increment,
cours_name varchar(20) not null
);
##创建选课表(中间表)
create table select_cours(
s_id int #用来记录学生id
cours_id int #用来记录课程id
primary key(s_id,cours_id) #联合主键
foreign key(s_id) references student(s_id),
foreign key(cours_id) references cours(cours_id)
);
事务
性质:
- 原子性 :要么全部OK,要么全不OK
- 一致性 : 实现我们让它做的事
- 隔离性 : 某时刻只能有一个操作。
- 持久性 :删除了不会还原。
#开始事务
begin;
............
insert into t_name value();
#提交
commit;
#回滚:
rollback;
python 和mysql交互
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PhslpudB-1669989126713)(C:\Users\17542\AppData\Local\Temp\1559051789091.png)]
使用步骤:
- 导入模块:import pymysql
- 建立连接:pymysql.connect(数据库名)
- 创建游标:connection.cursor()
- 执行sql语句:cursor.execute(sql语句)
s_id)
);
# 事务
性质:
- 原子性 :要么全部OK,要么全不OK
- 一致性 : 实现我们让它做的事
- 隔离性 : 某时刻只能有一个操作。
- 持久性 :删除了不会还原。
```mysql
#开始事务
begin;
............
insert into t_name value();
#提交
commit;
#回滚:
rollback;
python 和mysql交互
[外链图片转存中…(img-PhslpudB-1669989126713)]
使用步骤:
- 导入模块:import pymysql
- 建立连接:pymysql.connect(数据库名)
- 创建游标:connection.cursor()
- 执行sql语句:cursor.execute(sql语句)
- 获取结果: cur.fetchall()