MySQL入门

本文是一篇MySQL入门教程,详细介绍了SQL语言的基础概念,包括DDL(数据定义语言)、DML(数据操作语言)、DQL(数据查询语言)和DCL(数据控制语言)。同时,讲解了数据库和表的操作,如创建、查看、修改和删除。此外,还涵盖了MySQL中的数据类型,如整数、浮点数、定点数、位和日期时间类型。最后,讨论了运算符、函数的使用,并提供了实例展示。
摘要由CSDN通过智能技术生成

改编于以下文章
1、138 张图带你 MySQL 入门 --> cxuan哥

MySQL 和 SQL的区别

MySQL 是一种关系型数据库,说到关系,那么就离不开表与表之间的关系,而最能体现这种关系的其实就是我们接下来需要介绍的主角 SQL,SQL 的全称是 Structure Query Language ,结构化的查询语言,它是一种针对表关联关系所设计的一门语言,也就是说,学好 MySQL,SQL 是基础和重中之重。SQL 不只是 MySQL 中特有的一门语言,大多数关系型数据库都支持这门语言。
在这里插入图片描述

SQL语言分类

  • 数据定义语言:简称 DDL (Data Definition Language),用来定义数据库对象:数据库、表、列等;
  • 数据操作语言:简称 DML (Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert、update、delete等
  • 数据控制语言:简称 DCL(Data Control Language),用来定义数据库访问权限和安全级别,创建用户等。关键字:grant等
  • 数据查询语言:简称 DQL(Data Query Language),用来查询数据库中表的记录,关键字:select from where等

DDL 语句

数据库操作命令备注
连接数据库mysql -h主机地址 -p端口 -u用户名 -p用户密码
修改密码mysqladmin -uroot -p123456 password 12345678;
创建数据库create database dbname;
查看已有的数据库show databases
选择数据库use dbname
删除数据库drop database dbname;
表操作命令备注
显示库下的所有表show tables;必须先use,在show
创建表create table job(name varchar(20));
查看创建语句sqlshow create table job \G;
删除表drop table job通过日志可以恢复
删除表truncate table job不可恢复
修改字段类型alter table job modify name varchar(25);以下都可以通过 Navicat来生成修改SQL
增加字段alter table job add home varchar(30);
删除字段alter table job drop column home;
修改字段名称alter table job change wage salary decimal(10,2);
修改字段顺序alter table job add birthday after hiredate;

在这里插入图片描述

  1. unsigned: 设置为无符号化
  2. NOT NULL: 不为空
  3. AUTO_INCREMENT: 自增长 必须给主键设置
  4. COLLATE:跳转
  5. primary key :主键唯一标示(自带唯一属性,not null属性)一个表中必须有的,一般都是数字自增
  6. unique key:唯一 设置 某个列 的值都是唯一的,也就是没用重复,如 身份证号,一般是唯一的
  7. default:默认值
  8. DEFAULT CURRENT_TIMESTAMP:表示当插入数据的时候,该字段默认值为当前时间
  9. ON UPDATE CURRENT_TIMESTAMP:表示每次更新这条数据的时候,该字段都会更新成当前时间
  10. zerofill:不够使用0进行填充

DML 语句

操作命令备注
插入INSERT INTO tablename (field1,field2) VALUES(value1,value2);针对批量操作减少了网络开销
修改UPDATE tablename SET field1 = value1, field2 = value2 ;不加where条件,会对整个表进行更新
删除DELETE FROM tablename [WHERE CONDITION];不加where条件,清除整个表

DQL 语句

SELECT * FROM tablename;
select name,sex,age,hiredate,birthday,salary from job; --这种效率更高
操作命令备注
查看版本号select version();
去重select distinct age from job;
条件查询select * from job where age = 24;「>、<、>=、<=、!=」
排序select * from job order by A desc,B ase;A值相同按照B值排序,A字段多个相同的记录将会无序排列
限制select * from job order by salary limit 3;默认从第0条抓取
求和select sum(salary) from job;汇总函数
统计数量select count(1) from job;
最大值select max(salary) from job;
最小值select min(salary) from job;
分组select age,count(1) from job group by age;
select age,count(1) from job group by age with rollup;统计各年龄段的人数并统计总人数
select age,count(1) from job group by age with rollup having count(1) > 1;分组,统计数量大于 1 的记录
表连接select job.name,job_type.name from job,job_type where job.type = job_type.type;内连接:选出两张表中互相匹配的记录;
左连接select job.name,job_type.name from job left join job_type on job.type = job_type.type;外连接:不仅选出匹配的记录,也会选出不匹配的记录;
右连接select job.name,job_type.name from job right join job_type on job.type = job_type.type;
子查询select job.* from job where type in (select type from job_type);
select * from job where type = (select type from job_type);如果子查询数量唯一的话,还可以用 = 来替换 in
联合查询select type from job union all select type from job_type;
select type from job union select type from job_type;union 会对合并的数据进行去重处理

DCL 语句

遗留问题

-- 1. 创建了用户zhangsan,密码是zhangsan。在mysql.user表里可以查看到新增用户的信息:
-- 2. host 为 "%",表示所有主机都可登录,省略代表所有主机
create user zhangsan@'192.%.%.%' identified by 'zhangsan';
-- 将zhangsanDb数据库的查询权限授权给了用户 zhangsan。
grant select on zhangsanDb.* to zhangsan;
-- 刷新权限
flush  privileges;
-- 收回用户权限
REVOKE insert,update ON *.* FROM 'local_user'@'%';

MySQL数据类型

整数类型字节最小值最大值运用场景
tinyint1有符号 -128
无符号 0
有符号 127
无符号 255
smallint2有符号 -2^16
无符号 0
有符号 2^15-1
无符号 2^16-1
mediumint3有符号 -2^24
无符号 0
有符号 2^23-1
无符号 2^24-1
int,integer4有符号 -2^32
无符号 0
有符号 2^31-1
无符号 2^32-1
bigint8有符号 -2^64
无符号 0
有符号 2^63-1
无符号 2^64-1
  • int(7)表示int类型的最大长度为7,如果不指定默认是int(11)
  • alter table test1 modify aId int zerofill;
    zerofill表示数字位数不够用0填充,如果一个列为 zerofill ,会自动为该列添加 UNSIGNED (无符号)属性。
浮点数类型字节最小值最大值运用场景
float4
double8
定点数类型字节描述运用场景
dec(M,d)
decimal(M,d)
M+2最大取值范围与double相同,给定decimal的有效取值范围由M和D决定
  • 定点数只有一种 decimal。定点数在 MySQL 内部中以字符串的形式存在,比浮点数更为准确,适合用来表示精度特别高的数据。
  • 浮点数和定点数都可以使用 (M,D) 的方式来表示,M 表示的就是 「整数位 + 小数位」 的数字,D 表示位于 . 后面的小数。M 也被称为精度 ,D 被称为标度。
  • 浮点数如果不写精度和标度,会按照实际的精度值进行显示
  • 定点数如果不写精度和标度,会按照 decimal(10,0) 来进行操作,如果数据超过了精度和标题,MySQL 会报错
位类型字节最小值最大值运用场景
bit(M)1~8bit(1)bit(64)
日期时间类型日期格式日期范围占用空间
yearYYYY1901~21551字节
timeHH:MM:SS-838:59:59 ~ 838:59:593字节
dateYYYY-MM-DD1000-01-01 ~ 9999-12-33字节
datetimeYYYY-MM-DD hh:mm:ss1000-01-01 00:00:00 ~ 9999-12-31 23:59:598字节
timestampYYYY-MM-DD hh:mm:ss1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC4字节

DATE 的表示一般很多种,如下所示 DATE 的所有形式

  • ‘YYYY-MM-DD’
  • ‘YYYYMMDD’
  • YYYYMMDD
  • ‘YY-MM-DD’
  • ‘YYMMDD’
  • YYMMDD

各个时间类型的使用场景

  • 一般表示年月日,通常用 DATE 类型;
  • 用来表示时分秒,通常用 TIME 表示;
  • 年月日时分秒 ,通常用 DATETIME 来表示;
  • TIMESTAMP 不建议使用,日期范围马上到期,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回
  • 如果只表示年份、则应该使用 YEAR,它比 DATE 类型需要更小的空间。

MySQL运算符

算数运算符作用
+加法
-减法
*乘法
/除法
%除法取余
div除法取整(只能用整数)
mod除法取余(只能用整数)
  • 在除法和取余需要注意一点,如果除数是 0 ,将是非法除数,返回结果为 NULL。
比较运算符作用
=等于
<> 或者是 !=
<=>NULL 安全的等于,也就是NULL-safe
<小于
<=小于等于
>大于
>=大于等于
between在指定范围内
is null是否为NULL
is not null是否为NULL
in存在于指定集合
like通配符匹配
regexp 或 rlike正则表达式匹配
逻辑运算符作用
not 或 !逻辑非
and 或 &&逻辑与
or 或 ||逻辑或
xor逻辑异或
位运算符作用
&位与
|位或
^位异或
~位取反
>>位右移
<<位左移

MySQL常用函数

字符串函数功能
lower将字符串所有字符变成小写
upper将字符串所有字符变成大写
concat进行字符串拼接
left返回字符串最左边的字符
right返回字符串最右边的字符
insert字符串替换
ltrim去掉字符串左边的空格
rtrim去掉字符串右边的空格
repeat返回重复的结果
trim去掉字符串行尾和行头的空格
substring返回指定的字符串
lpad用字符串对最左边进行填充
rpad用字符串对最右边进行填充
rpad将字符串所有字符变成小写
strcmp比较字符串S1 和 S2
replace进行字符串替换
数值函数功能
abs返回绝对值
ceil返回大于某个值的最大整数值
mod返回模
round四舍五入
floor返回小于某个值的最大整数值
truncate返回数字截断小数的结果
rand返回0-1的随机数
日期和时间函数功能
now返回当前的日期和时间
week返回一年中的第几周
year返回日期的年份
hour返回小数值
minute返回分钟值
monthname返回月份名
curdate返回当前日期
curtime返回当前时间
unix_timestamp返回日期unix时间戳
date_format返回按照字符串格式化的日期
from_unixtime返回unix时间错的日期值
date_add返回日期时间+上一个时间间隔
datediff返回起始时间和结束时间之间的天数
流程函数功能
IF(value,t f)如果 value 是真,返回 t;否则返回 f
IFNULL(value1,value2)如果 value1 不为 NULL,返回 value1,否则返回 value2。
CASE WHEN[value1] THEN[result1] …ELSE[default] END如果 value1 是真,返回 result1,否则返回 default
CASE[expr] WHEN[value1] THEN [result1]… ELSE[default] END如果 expr 等于 value1, 返回 result1, 否则返回 default
其他函数功能
version返回当前数据库的版本
database返回当前数据库名
user返回当前登录用户名
password返回字符串的加密版本
MD5返回MD5值
inet_aton(ip)返回IP地址的数字表示
inet_ntoa(num)返回数字代表的ip地址
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值