mysql学习笔记(一)

一、关于mysql

mysql是一种关系型数据库管理系统,关系型可以理解为“表格”的概念,一个关系型数据库由一个或数个表格组成。

二、mysql操作

image.png

(一).数据库操作

image.png

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;

(二).数据表操作

image.png

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;

(三)字段操作

image.png

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、时间函数

image.png
(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

待续...

你可能感兴趣的:(mysql学习笔记(一))