MySQL的操作命令
登陆MySQL
mysql - u root -p
root 用户名
DDL数据库定义语言 DML数据库管理操作语言 DQL查询
1. DDL 数据库定义语言
操作数据库
- 创建数据库
create database chu charset=utf8;- 删除数据库
drop database chu;- 切换数据库
use chu- 查看当前选择的数据库
select database();- 查看所有数据库
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 日期
–
当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;