MySQL

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值