MySQL的基本操作

时间:2022-09-16 19:47:10

MySQL的操作命令

登陆MySQL
mysql - u root -p
root 用户名

DDL数据库定义语言 DML数据库管理操作语言 DQL查询

1. DDL 数据库定义语言

操作数据库

  1. 创建数据库
    create database chu charset=utf8;
  2. 删除数据库
    drop database chu;
  3. 切换数据库
    use chu
  4. 查看当前选择的数据库
    select database();
  5. 查看所有数据库
    show databases;

表操作

操作表格:
1. 查看当前数据库中所有表
show tables;
2. 创建表
create table chu(name text, id int primary key auto_increment);
id 一般是int类型,2的32次方,很大,一般肯定够了
字段格式,每个字段都是字段名加字段类型,中间用空格隔开,
每个表中都必须包含一个 主键
主键是唯一的,主键通常使用数字类型int
在被当做主键的字段后面添加primary key,代表它是主键
主键通常是自增长 auto_increment id加1,跟序号一样
3. 删除表
drop table student;
4. 查看表结构
desc student;
5. 查看建表语句
show create table student;
6. 重命名表名
rename table old to new;
7. 修改表
格式:alter table 表名 add|change|drop 列名 类型;
示例:alter table new add isDelete bit default 0
8. 修改列名
alter table 表名 change 旧列名 新列名 类型;

DML 数据库管理操作语言

1. 插入数据

values一定要和创建表时的字段完全吻合,按id顺序插入 
column和value要一一对应,没有声明出来的column,必须有默认值.
insert into student(name,age) values(‘python’,'18');

a. 全列插入
格式:insert into 表名 values(…);
说明:主键列是自动增长,但是在全列插入时需要占位,通常使用0,插入成功以后以实际数据为准
示例:insert into student values(value1,value2…);
b. 缺省插入
格式:insert into 表名(列1,列2,……) values(值1,值2,……);
示例:insert into student(column1,column2…) values(values1,values2…);
c、同时插入多条数据
格式:insert into 表名 values(…),(…),……
示例:insert into student values(values1,values2…),(values1,values2…),(values1,values2…);

2, 查找

指定表中获取所有字段(column)
select * from chu;
指定表中获取指定列
select column1,column2... from chu;

3, 更新

原则上,在开发中,更新一定要基于查询
暴力更新,将表中字段所有值都变为我们指定的值
数据库把默认支持暴力更新,工具上默认拥有保护模式,不允许更新,
需要自己去偏好设置中修改
updata chu set column = 新值

4, 删除

原则上也要基于查询
暴力删除,将指定表中所有数据删除
delete from chu;

DQL查询

1, where 条件 column操作符(运算符)

= < > <= >= 
like模糊查询 %代表一个或者多个任意字符 _代表一个任意字符
between 在某两个值之间
多条件查询
and or in 支持结合率(可以添加括号)
需求:查询id值大于8的所有数据
示例:select * from student where id>8;
需求:查询编号为8、10、12的学生
示例:select * from student where id in (8,10,12);
需求:查询编号为6到8的学生
示例:select * from student where id between 6 and 8;
空判断
insert into student(name,age) values(“特朗普”,70);
注意:null与”“是不同
判断空:is null
判断非空: is not null
需求:查询没有地址的同学
示例:select * from student where address is null;
需求:查询有地址的同学
示例:select * from student where address is not null;

分页
在其他数据库里叫top
查询三条数据,通常用这个功能做分页加载
select * from user limit 3;
数据查询限制条数并作偏移, offset 3 表示跳过前三个值
select * from user limit 3 offset 3;
语法:select * from 表名 limit start,count;
说明:start索引从0开始
示例:
select * from student limit 0,3;
select * from student limit 3,3;
select * from student where gender=1 limit 0,3;

2, 截取

limit   x,y 从x开始 取y条数据   如果从0取y条数据  那么x可以省略
select * from user limit 0,5
limit limit 4 限制结果集最多为指定数量
limit 4 offset number 限制结果集数量,并偏移(跳过的数据)一定数量
limit 用的最多的地方就是优化数据加载流程, 分页

3,去重

distinct  可以指定某一字段的去重,也可以指定多个字段的去重
select distinct gender from student;

4, 排序 order by 正序 -order by 反序

selsct * from grades order by id

5, 约束

数据类型
数据类型是一种限制,保证我们数据的规范性
更合理的分配内存空间,所以我们要用到约束

MySQL中的数据类型
主要分为三大类 文本/数字/日期
常用的
文本 varchar() 数字 int, float 日期
MySQL的基本操作

MySQL的基本操作
当varchar数据超过255的时候,会自动转换成 text
文本中 varchar()比较受欢迎,它支持绝大多数的约束
文本比较相同的规则,首先比较长度,之后才是按位比较
unique 唯一约束,只能插入一个,相同的插入不进去
主键和unique都有唯一约束的功能,
区别是每张表只能有一个主键,且必须有一个主键,
unique 可以作用在多个字段上
主键不能包含空值 null, 不是python中的None
1. unsigned 无符号 正数
2. zerofill 零填充
3. auto_increment 自增
4. default 默认值
5. not null 不为空
6. primary key 主键
7. unique 唯一索引
8. index 常规索引

约束的时候,我们修饰的字段,最好是有固定的长度
create table grades(id int primary key auto_increment, g_name varchar(16),g_position varchar(16));

6, 主外键关联

Forign Key   referenes 外键指向   一对多
foreign key student01(g_id) references grades(id));

原始写法,从表中查询数据,数据获取条件式两个表中的关联字段,满足一定条件
select * from student,grades where student.g_id=grade.id;

select * from student join grades on student.g_id=grades.id;
select * from student right join grades on student.g_id=grades.id;
分类:
1、表A inner join 表B:
表A与表B匹配的行会出现在结果集中
2、表A left join 表B:
表A与表B匹配的行会出现在结果集中,外加表A中独有的数据,未对应的数据使用null填充
3、表A right join 表B:
表A与表B匹配的行会出现在结果集中,外加表B中独有的数据,未对应的数据使用null填充

7, 动态调整表结构

添加
alter table student add column s_age int default 18;
删除
alter table student drop column s_age;

8, 数据库事务

事务:保证事情的完美运行.
比如:银行转账,第一步,从你的账户扣钱,第二步,从他的账户加钱,如果中间缺失了,那么钱扣了,双方的钱都没了,而事务,就是保证这两步的完美执行.把这两步捆绑到一起,用回滚函数.

1, 开启事务
begin;
updata student set age =28 where id = 1;
2, 提交事务
ommit;
3, 回滚事务
rollback;

函数

(1)聚合函数: 就是内置函数的一部分,聚合函数作用在列(column)上

为了快速等到统计数据,提供了5个聚合函数
a、count() 表示计算总行数,括号中可以写和列名
b、max(列) 表示求此列的最大值
c、min(列) 表示求此列的最小值
d、sum(列) 表示求此列的和
e、avg(列) 表示求此列的平均值

需求:查询学生总数
示例:select count(*) from student;
需求:查询女生的编号最大值
示例:select max(id) from student where gender=0;
需求:查询女生的编号最小值
示例:select min(id) from student where gender=0;
需求:查询所有学生的年龄和
示例:select sum(age) from student;
需求:查询所有学生的年龄平均值
示例:select avg(age) from student;

(2)分组

按照字段分组,表示此字段相同的数据会被放到一个集合中。
分组后,只能查询出相同的数据列,对于有差异的数据列无法显示在结果集中
可以对分组后的数据进行统计,做聚合运算
select name,gender from student group by gender,age;

分组条件过滤
where与having的区别:
where是对from后面指定的表进行筛选,属于对原始数据的筛选
having是对group by的结果进行筛选
是where的加强版,补充
示例:
select g_id,avg(age) from student group by g_id having avg(age)>40;