Mysql基础1
Mysql
一、创建数据库
creat database menagerize;
二、使用数据库
use menagerize
三、创建表
create table pet (name varchar(20),owner varchar(20),species varchar(20),sex char(1),birth date,death date);
四、验证表是否按照预期创建
describe pet
这可能很有趣,表中的名字为最低限度,但是最好不要写年龄age,因为年龄会变化,需要你更新数据,所以设置出生日期最好
在业务数据库上下文可能遇到的问题,在生日当前一周发送祝福。
Mysql的期望日期格式是'YYYY-MM-DD'
名字 | 所有者 | 物种 | 性 | 出生 | 死亡 |
---|---|---|---|---|---|
蓬松 | 哈罗德 | 猫 | f | 1993-02-04 | |
爪子 | 格温 | 猫 | m | 1994-03-17 | |
芭菲 | 哈罗德 | 狗 | f | 1989-05-13 | |
坊 | 班尼 | 狗 | m | 1990-08-27 | |
鲍泽 | 黛 安 娜 | 狗 | m | 1979-08-31 | 1995-07-29 |
叽 | 格温 | 鸟 | f | 1998-09-11 | |
惠斯勒 | 格温 | 鸟 | 1997-12-09 | ||
苗条 | 班尼 | 蛇 | m | 1996-04-29 |
五、缺省值
表中的字段可能为空
新建txt文件 pet.txt 数据 空值: \N
将文本文件加载到表中
load data local infile '/path/pet.txt' into table pet;
但是最常用最简单的方法还是insert语句
insert into pet values('Puffball','Diane','hamster','f','1999-03-30',NULL)
六、mysql语句
1、查询
select *from pet
2、修改
update pet set birth='1989-08-09' where name='Bowser'
3、使用and和or作为限定条件
尽管and的优先级高于or,但是同时使用两个运算符,最好使用括号来显式指示应对条件进行分组
select *from pet where (species='cat' and sex='m')
or (species='dog' and sex='f');
4、去重distinct
select distinct owner from prt
5.1、对生日、按照日期进行排序
select name,birth from pet order by birth
5.2、mysql中,排序和其他操作一样不区分大小写,对于除了大小写一样的列,可以强制区分大小写
order by binary col_name
binary强制将后面的字符串转化为二进制字符串
5.3、降序
select name,birth from pet order by birth desc
5.4可以限定第一个条件顺序,第二个条件降序
select name,species,birth from pet order by species,birth desc;
关键字仅适用于紧挨着其前面的列名(),不会影响排序顺序
七、日期
1、mysql封装了当前日期current_date(),或者curdate()然后用时间戳函数可以计算出年龄
select name,birth,current_date(),timestampdiff(year,birth,curdate()) as age from pet
2、MySql 数据库中CURDATE(),CURRENT_DATE(),CURRENT_DATE()+0 三者有什么区别?
CURRDATE() | CURRENT_DATE | CURRENT_DATE()+0 |
---|---|---|
1999-10-17 | 1999-10-17 | 19991017 |
3、is not null
select name,birth,death,timestampdiff(year,birth,death) as age from pet where death is not null order by age;
4、将月份提取出来
select name,birth,month(birth) from pet
name | birth | month(birth) |
---|---|---|
张三 | 1999-10-17 | 10 |
5、查询某一个月的事件
select name,birth from pet where month(birth)=5
6.1、查询下一个月的事件
select name,birth from pet where month(birth)=month(date_add(curdate(),interval 1 month));
6.2也可以使用模函数
select name,birth from pet where month(birth)=mod(month(curdate()),12)+1;
6.3产生错误的无效日期会警告
select '2018-10-32' + INTERVAL 1 day;
show message;
八、空值NULL
在你习惯之前,可能会惊讶,因为这意味着缺少未知值
select 1 is null,1 is not null
1 is null | 1 is not null |
---|---|
0 | 1 |
<>,!=不等于
<=>严格比较两个NULL值是否相等
九、模式匹配
mysql提供SQL模式匹配,以及一种基于扩展正则表达式模式的匹配模式,类似于Unix实用程序(vi,grep,sed)
1、模糊查询
select *from pet where name like 'b%';
2、_表示单个字符name占了两个字符的数据
select *from pet where name like '__'
3、正则表达式RegExp
3.1查找name中st开头的
select name from pet where name regexp '^st'
3.2查找以ok结尾的
select name from pet where name regexp 'ok$'
3.3查找name中包含'mar'字符串的所有数据
select name from pet where name regexp 'mar'
3.4查找name中以元音字符开头或者ok结尾的
select name from pet where name regexp '[aeiou]|ok$'
3.5
+:前面的字符至少出现一次,
*:前面的字符可以出现0次,1次,多次
?:前面的字符可以出现0次或1次
[]:匹配[]内的所有,[A-Z]:匹配A-Z
[^]:匹配除了[]内的所有
.:匹配除了\n,\r之外的任何单个字符
[\s\S]:匹配所有,\s匹配空白符,包括换行,\S匹配非空白符,不包括换行
\w:匹配字母数字下划线
{n,m}:匹配最少n个,最多m个
*和+是贪婪的,它们会尽可能的匹配多的字符串,后面加?实现非贪婪
例子:匹配
11111111111111111sasfs
里面的所有数据<.*>
<.*?>匹配的就是
十、计算行数
1、count
select count(*) from pet
这里也可以看出*是匹配所有
count(*)无需匹配整张表
select species,sex,count(*) from pet where species='dog' or species='cat' group by species,sex;
所以想匹配两个以上需要group by
select owner,count(*) from pet group by owner;
使用一下会报错
select owner,count(*) from pet;
2、only full group by模式
set sql_mode='ONLY_FULL_GROUP_BY';
ERROR 1140 (42000): In aggregated query without GROUP BY, expression
#1 of SELECT list contains nonaggregated column 'menagerie.pet.owner';
this is incompatible with sql_mode=only_full_group_by
如果不启用only full group by模式,
SELECT owner, COUNT(*) FROM pet;
不会报错,但是,服务器会自由的从任何值中选择值,查找不准确
十一、使用多个表
1、inner join ,inner可以省略
假如数据库有两张表table1,table2. join找两张表的共同点
select *from table1
author | count |
---|---|
拼多多 | 12 |
京东 | 13 |
淘宝 | 14 |
select *from table2
id | title | author | price |
---|---|---|---|
1 | PHP教材 | 拼多多 | 11 |
2 | java教材 | 京东 | 21 |
3 | C#教材 | 淘宝 | 32 |
4 | Python教材 | 淘宝 | 43 |
select table2.id,table2.author,table1.count from table2 inner join table1 on table2.author=table1.author;
2、left join读取左边的数据,即使右边表没有对应数据
3、right join 同理
本文作者:孤沉
本文链接:https://www.cnblogs.com/guchen33/articles/16808465.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!