一、关于mysql
mysql是一种关系型数据库管理系统,关系型可以理解为“表格”的概念,一个关系型数据库由一个或数个表格组成。
二、mysql操作
(一).数据库操作
1、登录:-u用户名 -p密码
eg:-uroot -p123456
2、显示数据库:show databases;
3、创建数据库:
create database database_name charset=utf8;
eg: create database test01 charset=utf8;
4、使用数据库(表示进入此数据库操作)
use database_name;
5、查看当前使用数据库
select database();
6、删除数据库
drop database database_name;
(二).数据表操作
1、显示数据表:show tables;
2、创建数据表:create table table_name();
'''
CREATE TABLE table_name(
column1 datatype contrai,
column2 datatype,
column3 datatype,
.....
columnN datatype,
PRIMARY KEY(one or more columns)
);
'''
eg:
'''
create table classes(
id int unsigned auto_increment primary key not null,
name varchar(10)
);
'''
3、修改数据表
添加字段:alter table 表名 add 列名 类型;
eg:alter table students add birthday datatimes;修改字段:
-重命名:alter table 表名 change 原名 新名 类型及约束;
eg:alter table students change birthday birth datetime not null;
-不重命名:alter table 表名 modify 列名 类型及约束;
eg:alter table students modify birth date not null;删除字段:drop table 表名 drop 列名;
eg:alter table students drop birthday;
4、删除数据表:drop table 表名 drop 列名;
eg:drop table students;
5、显示表结构:dec 表名;
6、查看表的创建语句:show create table 表名;
eg:show create table classes;
(三)字段操作
1、增删改查
'''
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}]
]
'''
(1)增
- 全列插入:insert into 表名 values();
eg:insert into students values(0,’郭靖‘,1,'蒙古','2016-1-2'); - 部分列插入:insert into表名(列1,列2,....) values(值1,值2,....)
eg:insert into students(name,hometown,birthday) values('黄蓉','桃花岛','2016-3-2'); - 全列多插入:insert into 表名 values(...),(...)...;
eg:insert into classes values(0,'python1'),(0,'python2');
(2)改:update 表名 set 列1=值1,列2=值2... where 条件
eg:update students set gender=0,hometown='北京' where id=5;
(3)查:select * from 表名;
- 条件查询:select * from 表名 where 条件
where + 比较运算符/逻辑运算符/模糊查询/范围查询/空判断
比较运算符(=、>、>=、<、<=、 != 或 <>)
逻辑运算符(and、or、not)
模糊查询(like %表示任意多个任意字符,_表示一个任意字符)
范围查询(in 表示在一个非连续的范围内、 between ... and ...表示在一个连续的范围内)
空判断(is null,is not null) - 分页查询:select * from 表名 limit start,count
从start开始,获取count条数据
eg:select * from students where gender=1 limit 0,3; - 连接查询
内连接:inner join
左连接:left join
右连接:right join - 子查询:包含主查询和子查询
select * from Student where gender in (select子查询) - 分组查询:group by
eg:select * from Student
group by gender - 排序查询:order by 列1 desc|asc [列2 desc|asc]
eg:select * from students order by age desc,height desc;
(4)删
delete from 表名 where 条件;
2、聚合函数
(1)总数count()
count(*)表示计算总行数,和 count(1) 的结果是相同的,但是count(列名) 不会统计null值记录
eg:
select count(1) from students;
(2)最大值max()
eg:select max(id) from students where gender=2;
(3)最小值min()
eg:select min(id) from students where is_delete=0;
(4)求和sum()
eg:select sum(age) from students where gender=1;
(5)平均值avg()
eg:select avg(id) from students where is_delete=0 and gender=2;
3、时间函数
(1)获取当前时间
- 获取年月日时分秒
select now();-------在执行开始时值就得到了;
select sysdate();-------在函数执行时得到的动态值 - 获取年月日
select current_date();
select curdate(); - 获取时分秒
select current_time();
select curtime();
(2)时间格式转换
- 字符串转换为日期格式
str_to_date(时间字符串,字符串日期格式)
eg:select str_to_date('08.09.2008', '%m.%d.%Y'); -- 2008-08-09 - 日期转换为特殊字符串形式
date_format(日期,字符串格式)
eg:select date_format(now(),'%Y-%M-%d %H') ; -- 2020-May-23 17
(3)提取时间信息
- 用year、month等函数提取
eg:select day('2018-05-15 10:37:14.123456');-- 获取日:15 - extract函数提取:extract (日期形式 from 日期内容) 函数
eg:select extract(year from '2018-05-15 10:37:14.123456');--获取年:2018
(4)日期的运算
- 对现有日期进行偏移
(1)date_sub(日期,要减少偏移的间隔):date_sub(date,INTERVAL expr type)
eg:select date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second);
--偏移天到秒,1天1小时1分1秒:1997-12-30 22:58:59
(2)date_add(日期,要增加偏移的间隔):date_add(date,INTERVAL expr type)
eg:select date_add('2008-08-08 10:12:33', interval '01:10:30' hour_second);
--偏移时间到秒,1小时10分30秒:2008-08-08 11:23:03 - 两个日期计算天数差 date_diff(time1,time2)
eg:select datediff('2008-08-08','2008-08-01');-- 相差:7 天 - 两个日期计算时间差 timediff(time1,time2)
eg:select timediff('2008-08-08 08:08:08', '2008-08-08 00:00:00'); -- 相差时间:08:08:08 - 两个日期得到指定差 timestampdiff(unit,begin,end)
返回end-begin的结果,其中begin和end是date或datetime格式
eg:select timestampdiff(year,'2002-05-01','2001-01-01');-- -1
4、窗口函数
- rank() over(partition by 分区字段 order by 排序字段 desc/asc)
eg: 12245 - dense_rank() over(partition by 分区字段 order by 排序字段 desc/asc)
eg: 12234556 - row_number() over(partition by 分区字段 order by 排序字段 desc/asc)
eg: 12345
5、case... when...
- 简单函数
CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END - 搜索函数
CASE WHEN [expr] THEN [result1]…ELSE [default] END - 聚合函数:实现行转列
select sum(case [col_name] when...then...else...end) from Student
待续...