MySQL的学习,由入门到精通

数据库使用排名网站:

https://db-engines.com/en/ranking

MySQL的官网文档说明:(重要!!!)

https://dev.mysql.com/doc/refman/5.7/en/

目录

注意事项:

数据类型

数字类型

INT类型:区别是大小不同(Exact value)

decimal 类型(Exact value有固定小数位的数字类型)

 

bin类型

时间类型

 Date(表示年月日)

time类型(表示时分秒)

YEAR类型

DATETIME &Timestamp

 字符类型

char和Varchar的区别在于长度一个固定一个不固定:

Blob和text

Enum和set 

常用命令:

Null和Not Null

设置字段的默认值

设置字段的唯一性,primary key和unique

设置auto_increment属性

SQL文件快速编辑

常用语句

where语句 

update语句

删除语句

字符串语句函数

concat语句

substring语句

  REPLACE,REVERSE,CHAR_LENGTH三个方法

大小写转换

left、right、length

LTRIM、RTRIM、TRIM 去除空格

模糊搜索 like

distinct 去重操作

Group by 分组,聚合操作

Having与where的区别

其他方法

数值函数

div 除法取整数  MOD求余 

power 幂运算

round四舍五入

日期函数

dateadd 增减日期 

​ 加密函数

逻辑操作符

between等于>=  和<=,表示一个连续范围时使用

in 在断续范围时使用

判断语句

case:增加多个条件比如:

 IFNULL:判断是否为null

IF:判断结果为两个时

表关联

通过外键约束关联字段:foreign key

Inner join(交集)

Left join(以左侧为base进行连接)

多对多表关联


注意事项:

1.在mysql命令行中一定是英文半角状态输入;

2. show warning 查看提示

数据库database是由表组成的;

表是由结构化的数据组成的;

select database();    表示当前使用的是哪个database,如果没有则显示null

SQL中delimiter是;可以通过delimiter $$,将分隔符改变为$$

数据类型

数字类型

INT类型:区别是大小不同(Exact value)

https://dev.mysql.com/doc/refman/5.7/en/integer-types.html

创建unsigned类型时例子: create table test1(id int unsigned); 

decimal 类型(Exact value有固定小数位的数字类型)

适用于存储钱等关键数字数据

decimal(5,2)表示一共是5位(不包括符号),小数点是2位。 

超过固定的小数位,会自动四舍五入,如下: 

bin类型

时间类型

 Date(表示年月日)

time类型(表示时分秒)

YEAR类型

DATETIME &Timestamp

timestamp会根据时区的改变而改变,datetime不会改变,且timestamp会根据字段的修改而改变,如下所示。

timestamp占用4个字节,datetime占用8个字节

设置on update now()时,当表被改动时,timestamp会自动更新当前的时间。 

时间的一些函数:可以查看博客最开始的一个官方链接介绍:

 字符类型

char和Varchar的区别在于长度一个固定一个不固定:

在长度固定时使用char类型速度更快。

Blob和text

因为blob字段可能很长,如果排序的话耗费时间长,可以设置排序长度为2000,那么只对前2000个字符进行排序

Enum和set 

Enum用于特定的字段,比如男性/女性,鞋子的大小型号等。同时插入字段时比varchar快很多。

设置set的值为2的N次方。 

常用命令:

show tables;

show databases;

use table_name;

desc table_name;      显示table的具体信息

drop table table_name;    删除表操作

insert into person(name,age) values('li',25);

insert into person(name,phone,age) value('wang','13516202269',23);

insert into person(name,phone,age) values('li','78979',23),('fanru','1334544',22);     可同时插入多条记录。

Null和Not Null

null表明这个字段可以是unknown的,其默认值为Null,当建立表时可以对其进行设置:

 create table person2(name varchar(20) not null,phone varchar(20),age int);

 字段后面加not null,表明这个字段不能为空,不然报错。

设置字段的默认值

 create table person3(name varchar(20) default 'wjz',phone varchar(20),age int);

设置字段的唯一性,primary key和unique

 create table person4(name varchar(20) ,phone varchar(20) primary key,age int);

create table person5(name varchar(20) ,phone varchar(20) ,age int, primary key (phone)); 

设置auto_increment属性

 create table person5(id int auto_increment primary key, name varchar(20) ,phone varchar(20),age int);

或者

 create table person5(id int auto_increment , name varchar(20) ,phone varchar(20),age int,primary key(id,name));

第二种primary key的定义方法可以定义联合字段的唯一性,适用于实际中用户唯一性购买商品等场景

 primary key和unique的区别是,设置的字段是否可以为null

 create table person7(id int primary key, age int unique);

SQL文件快速编辑

使用visual Studio Code编辑

source 命令执行.sql文件 

常用语句

where语句 

 select * from employee where not salary>=6000;

可以加and or not,进行联合筛选

update语句

update  employee set salary=10000 where not salary>=6000;

update  employee set salary=10000, notes='wjz'  where id=4;      更新两个字段

删除语句

delete语句

 delete from  employee where id=4;

truncate语句:

truncate table_name;      清空表的所有内容

字符串语句函数

concat语句

select concat(first_name,' ' ,last_name)as fullname from employee;

 select concat_ws('-',first_name ,last_name,'is',title)as fullname from employee;                #默认设置字段的连接符

substring语句

select substring(title,1,5)fullname from employee;             #substr是其缩写

select concat_ws(' ',first_name,last_name,'was hired on',substr(hire_date,1,4))infor from employee;

  REPLACE,REVERSE,CHAR_LENGTH三个方法

大小写转换

UPPER 和LOWER进行大小写转换

left、right、length

LTRIM、RTRIM、TRIM 去除空格

排序

select * from employee order by salary ;         --默认为升序,结尾加desc 为降序

select first_name ,last_name,title from employee order by 2;    --order by 2表示按照第二个字段进行排序

limit

select first_name ,last_name,title from employee limit 2,4;    --表示显示第3到4个字段

select first_name ,last_name,title from employee limit 2,很大的数;    --表示显示第3到结尾个字段

模糊搜索 like

 select * from employee where last_name like "C%";   --%表示任意字符

select * from employee where last_name like "__an";      --知道长度是4,可以用_代替进行模糊搜索

 

搜索%时,加转义字符

distinct 去重操作

Group by 分组,聚合操作

group by是字段都分组好了,比如上图中相应的title中first_name有的数量是2,3,1等。而distinct只是进行去重,没有聚合的功能。 

Having与where的区别

在使用group by之后无法使用where进行条件的过滤,会报错如下:

只能先进行条件的筛选再进行group by操作,如下

那么如果想对group by后的结果进行筛选,需要使用having ,如下

 

其他方法

max   最大

min    最小

sum   求和

avg    求平均

convert:转换函数

数值函数

div 除法取整数  MOD求余 

 

power 幂运算

 

round四舍五入

日期函数

dateadd 增减日期 

 加密函数

MD5() 

逻辑操作符

=与!=   not 表达式  例如

select * from employee where salary=8000 

select * from employee where salary!=8000 

select * from employee where NOT salary=8000 

and or 的使用

between等于>=  和<=,表示一个连续范围时使用

select * from movie where title_year between 1990 and 2000;

select * from movie where title_year >=1990 adn title_year<=2000;

in 在断续范围时使用

select * from employee where salary in (5000,7000,8000);

判断语句

case:增加多个条件比如:

case

       when  then 

        when  then

       else  

end 

 IFNULL:判断是否为null

ifnull(xx,0):判断XX为null值,则将其设置为0

IF:判断结果为两个时

if(xxx,A,B):判断XXX为真,则A否则为B

例子:

例子2 :

表关联

select * from orders where customer_id=(select id from customers where email='roj@gmail.com'); 

通过外键约束关联字段:foreign key

限制customer_id必须是customer表中id这个字段中的值。 

设置外键约束时,也造成无法删除外键的字段,加上on delete cascade后可以关联删除两个表中相应的字段

Inner join(交集)

 select * from customers inner join orders where customers.id=orders.customer_id;

Left join(以左侧为base进行连接)

例子: 

select first_name,last_name,sum(amount) from customers left join orders on customers.id=orders.customer_id group by customers.id;

IFNULL(xx,0):判断XX如果是null则设置其为0

 

多对多表关联

 

允许用户连接到MySQL服务器的设置

https://www.cnblogs.com/junlin40243/p/9691257.html

制作千万的测试数据:

https://www.cnblogs.com/qmfsun/p/4881919.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大宇进阶之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值