1、MySQL数据库的特点:
持久化存储
读写速度极高
保证数据的有效性
对程序支持性非常好,容易扩展。
MySQL是一个关系型数据库,核心元素是
数据行(记录)
数据列(字段)
数据表(数据行的集合)
数据库(数据表的集合)
RDBMS
主要有两种类型的数据库:关系型数据库、非关系型数据库
2、SQL
SQL是结构化查询语言,是一种用来操作RDBMS的数据库语言,不区分大小写。
SQL语句主要分为:
DQL:数据查询语言,用于对数据进行查询。
DML:数据操作语言,对数据进行增加、修改、删除
TPL:事务处理语言,对事务进行处理
DCL:数据控制语言,进行授权与权限回收
DDL:数据定义语言,进行数据库、表的管理
CCL:指针控制语言,通过控制指针完成表的操作
3、MySQL
MySQL是一个关系型数据库管理系统。
数据类型
使用数据类型的原则是:够用就行,尽量使用取值范围小的,而不用大的,这样可以更多的节省存储空间。
常用数据型有:
整数:int、bit
小数:decimal
字符串:varchar、charr
日期时间:date,time,datetime
枚举类型enum
decimal表示浮点数,如decimal(5,2)表示共存5位数,小数占2位
char表示固定长度的字符串,如char(3),如果填充'ab'时会补一个空格为'ab '
varchar表示可变长度的字符串,如varchar(3),填充'ab'时就会存储'ab'
字符串text表示存储大文本,当字符大于4000时推荐使用
对于图片、音频、视频等文件,不存储在数据库中,而是上传到某个服务器上,然后在表中存储这个文件的保存路径
1、约束
主键primary key:物理上存储的顺序
非空not null:此字段不允许填写空值
唯一unique:此字段的值不允许重复
默认default:当不填写此值时会使用默认值,如果填写时以填写为准
外键foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联表中查询此值是否存在,如果存在则填写成功,如果不存在则抛出异常
2、命令行连接
运行 MySQL -uroot -p密码
退出登录 quit、exit、Ctrl+d
查询版本:select version();
显示当前时间:select now();
修改输入提示符:prompt python> \D完整日期 \U使用用户
3、数据库
查看所有数据库:show databases;
使用数据库:use 数据库名;
查看当前使用的数据库:select database();
创建数据库:create database 数据库名 charset=utf8;
删除数据库:drop database 数据库名;
4、数据表
查看当前数据库中所有表:show tables;
查看表结构:desc 表名;
创建表:create table 表名字(......)
create table students(
id int unsigned primary key auto_increment not null,
name varchar(20) default '',
age tinyint unsigned default 0,
height decimal(5,2),
gender enum('男','女','人妖','保密'),
cls_id int unsigned default 0 )
auto_inncrement表示自动增长
修改表-添加字段
alter table 表名 add 列名 类型;
修改表-修改字段:重命名
alter table 表名 change 原名 新名 类型及约束;
修改表-修改字段:不重命名
alter table 表名 modify 列名 类型及约束;
修改表-删除字段
alter table 表名 drop 列名;
清屏:system clear
删除表:drop table 表名
查看表的创建语句:show create table 表名
4、增删改查(curd)
创建create 、更新update、读取retrieve、删除delete
查询所有列:select * from 表名
查询指定列:select 列1,列2... from 表名
1、增加
主键列是自动增长,但是在全列插入时需要占位,通常使用0或者 default 或者 null 来占位,插入成功后以实际数据为准
全列插入:值的顺序与表中字段的顺序对应
Insert into 表名 values(...)
部分列插入:值得顺序与给出的列顺序对应
Insert into 表名(列1,....) values(值1, .....)
全列多行插入:值得顺序与给出的列顺序对应
insert into 表名 values(...),(...)...;
例:insert into classes values(0,'python1'),(0,'python2');
insert into 表名(列1,...) values(值1,...),(值1,...)...;
例:insert into students(name) values('杨康'),('杨过'),('小龙女');
2、修改
update 表名 set 列1=值1,列2=值2... where 条件
3、删除
Delete from 表名 where 条件
逻辑删除,就是修改操作
update students set isdelete=1 where id=1;
MySql建立Table时设置编码为utf8
设置数据库编码
create database dbname default charset utf8 (collate utf8_general_ci);
设置数据表编码
CREATE TABLE 'author' (.......
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
mysql中两种数据库引擎
ENGINE=MyISAM
ENGINE=InnoDB
5、条件
使用where子句对表中的数据筛选
select * from 表名 where 条件;
where后面支持多种运算符,进行条件的处理
比较运算符、逻辑运算符、模糊查询、范围查询、空查询
模糊查询:like
%表示任意多个字符、_表示一个任意字符
select * from students where name like '黄%';
范围查询:in
In表示在一个非连续的范围内
select * from students where id in(1,3,8);
Between....and...表示在一个连续的范围内
select * from students where (id between 3 and 8) and gender=1;
空判断
判空:is null
select * from students where height is null;
判非空:is not null
select * from students where height is not null;
6、排序
select * from 表名 order by 列1 asc|desc [,列2 asc|desc,...]
默认按照列值从小到大排序(asc)2
asc从小到大排序,即升序
desc从大到小排序,即降序
select * from students where gender=1 and is_delete=0 order by id desc;
select * from students order by age desc,height desc;
1、聚合函数
总数
count(*)表示计算总行数,括号中写星与列名,结果是相同的
聚合函数不能在where中使用
select count(*) from students;
最大值max
最小值min
求和sum
平均值avg
2、分组
Group by含义:将查询的结果按照1个或多个字段进行分组,字段值相同的为一组
Group by可用于单个字段分组,也可用于多个字段分组
select gender from students group by gender;
Group by + group_concat()
Group_concat(字段名)可以作为一个输出字段来使用
表示分组之后,根据分组结果,使用group_concat()来放置每一组的某字段的值得集合
select gender,group_concat(name) from students group by gender;
Group by +集合函数
select gender,avg(age) from students group by gender;
Group by + having
having条件表达式:用来分组查询 后指定一些条件 来输出查询结果
having作用和where一样,但having只能用于group by
select gender,count(*) from students group by gender having count(*)>2;
Group by + with rollup
With rollup 的作用是:在最后新增一行,来记录当前列里所有记录的总和
select gender,count(*) from students group by gender with rollup;
3、获取部分行
select * from 表名 limit start,count 从start获取count条数据
select * from students where gender=1 limit 0,3;
select * from students where is_delete=0 limit (n-1)*m,m
4、连接查询
select * from 表1 inner或left或right join 表2 on 表1.列 = 表2.列
inner join内连接
left、right join左右连接
7、as起别名
select * from students as s left join classes as c on s.cls_id = c.id;
自关联
从sql文件中导入数据
source areas.sql;
8、子查询
在一个select语句中,嵌入了另外一个select语句,被嵌入的select语句称为子查询语句
主查询和子查询的关系
1、子查询是嵌入到查询中
2、子查询是辅助主查询的,要么充当条件,要么充当数据源
3、子查询是可以独立存在的语句,是一条完整的select语句
子查询的分类:标量子查询,子查询返回的结果是一个数据(一行,一列)
列子查询:返回的结果是一列(一列多行)
行子查询:返回的结果是一行(一行多列)
标量子查询
select * from students where age > (select avg(age) from students);
列级子查询
select name from classes where id in (select cls_id from students);
行级子查询
select * from students where (height,age) = (select max(height),max(age) from students);
子查询中特定关键字使用
in 范围
格式: 主查询 where 条件 in (列子查询)
查询的完整格式
select select_expr [,select_expr,...] [
from tb_name
[where 条件判断]
[GROUP BY {col_name | postion} [ASC | DESC], ...]
[HAVING WHERE 条件判断]
[ORDER BY {col_name|expr|postion} [ASC | DESC], ...]
[ LIMIT {[offset,]rowcount | row_count OFFSET offset}]
]
完整的select语句
select distinct *
from 表名
where ....
group by ... having ...
order by ...
limit start,count
执行顺序为:
from 表名,where ....,group by ...,select distinct *,having ...,order by ...,limit start,count
实际使用中,只是语句中某些部分的组合,而不是全部
As起别名在字段中:select x as y from xxx;
给表起别名:select * from xxx as yyy;
求平均数保留2位小数:select round(avg(price),2) as avg_price from goods;
将分组结果写入到goods_cates数据表
insert into goods_cates (name) select cate_name from goods group by cate_name;
同步表数据
通过goods_cates数据表来更新goods表
update goods as g inner join goods_cates as c on g.cate_name=c.name set g.cate_name=c.id;
来源:https://www.cnblogs.com/flyPENG/p/9830646.html