|
MySQL基础篇
一、MySQL概述
1、数据库:存储数据的仓库。
2、数据库管理系统:操作和管理数据库的大型软件。
3、SQL:操作关系型数据库的编程语言。
\\查看服务-》MySQL8.0
service.mscMySQL数据库命令--cmd
\\启动
net start mysql80
\\停止
net stop mysql80客户端连接
方式一:MySQL提供的客户端命令行工具
MySQL 8.0 Command Line Client ===》输入密码方式二:系统自带的命令行工具执行命令
mysql [-h 127.0.0.1] [-p 3306] -u root -p
\\【】连接哪一个ip 【】连接哪一个端口
\\直接用这个
mysql -u root -p
\\回车填密码 注:使用这个方法,需要配置PATH环境变量
如何配置?
找到MySQL\MySQL Server 8.0\bin\的路径复制
在编辑环境变量出新建(电脑->属性->高级)
二、SQL
1、DDL:数据定义语言,用来定义数据库对象(数据库表、字段)
(1)查询(数据库操作)
\\查询所有数据库
show databases();
\\查询当前数据库
select database();(2)创建(数据库操作)
create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];
【】如果不存在;【】字符集:utf8mb4;
==》“Query OK”创建成功(3)删除(数据库操作)
drop database [if exists] 数据库名;(4)使用(数据库操作)
use 数据库名;!!!!先使用库再查表或创建!!!!
(5)查询(表操作)
查询当前数据库所有表:
show tables;查询表结构:
desc 表名;查询指定表的建表语句:
show create table 表名;(6)创建(表操作)
注:【...】为可选参数,最后一个字段后无逗号。
create table 表名(
字段1 字段1类型 [comment 字段1注释],
字段2 字段2类型 [comment 字段2注释]
)[comment 表注释];
\\举例:id int comment '编号',(7)数据类型(表操作)
主要分为三类:数值类型、字符串类型、日期时间类型
(8)修改(表操作)
添加字段
after table 表名 add 字段名 类型(长度) [comment 注释] [修改字段
after table 表名 modify 字段名 新数据类型(长度);修改字段名和字段类型
after table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];删除字段
after table 表名 drop 字段名;修改表名
alter table 表名 rename to 新表名;(9)删除(表操作)
删除表
drop table [if exists] 表名;删除指定表,并重新建立该表(在删除表时,数据也会被删掉)
truncate table 表名;2、DML:数据操作语言,用来对数据库表中的数据进行增删改
添加数据insert;修改数据update;删除数据delete
(1)DML-添加数据
给指定字段添加数据
insert into 表名(字段名1,字段名2,...) values(值1,值2,...);给全部字段添加数据
insert into 表名 values(值1,值2,...);批量添加数据
insert into 表名(字段1,字段2,...) values(值1,值2,...),(值1,值2,...),(值1,值2,...);或
insert into 表名 values(值1,值2,...),(值1,值2,...),(值1,值2,...);注:
1)插入数据时,指定的字段顺序需要与值的顺序是一一对应的
2)字符串和日期型数据应该包含在引导中
3)插入的数据大小,应该在字段的规定范围内
(2)DML-修改数据
update 表名 set 字段名1=值1,字段名2=值2,...[where 条件];注:修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
举例:
update employee set name ='itheima' where id = 1;
(3)DML-删除数据
delete from 表名 [where 条件];注:detele语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。detele语句不能删除某一个字段的值(可以使用update)
3、DQL:数据查询语言,用来查询数据库中表的记录
(1)DQL语法:
注:编写顺序不等于执行顺序
执行顺序为:from=》where=》select=》order by =》having=》limit
\\基本查询
select 字段列表
from 表名列表
\\条件查询
where 条件列表
\\聚合函数(count、max、min、avg、sum)
\\分组查询(group by)
\\顺序这个算一个
group by 分组列表
having 分组后条件列表
\\排序查询(order by)
Order by 排序字段列表
\\分页查询(limit)
limit 分页参数(2)DQL--基本查询
查询多个字段
select 字段1,字段2,字段3... from 表名;
select * from 表名;设置别名
select 字段1 [as 别名1],字段2[as 别名2]... from 表名;去除重复记录
select distinct 字段列表 from 表名;(3)DQL-条件查询
语法:
select 字段列表 from 表名 where 条件列表;条件:
比较运算符 | 功能 | 逻辑运算符 | 功能 | > | 大于 | and 或&& | 并且(多个条件同时成立) | >= | 大于等于 | or或|| 、in | 获取(多个条件任意一个成立) | < | 小于 | not或! | 非,不是 | <= | 小于等于 | = | 等于 | <>或!= | 不等于 | between...and... | 在某个范围之类(含最小、最大值) | in(...) | 在in之后的列表的值,多选一 | like占位符 | 模糊匹配(_匹配单个字符,%匹配任意个字符),举例:__为两个字符;身份证最后一位是X,like ‘%X’; | is null | 是null | (4)DQL-聚合函数(单表查询)
介绍:将一列数据作为一个整体,进行纵向计算
常见聚合函数:
函数 | 功能 | count | 统计数量 | max | 最大值 | min | 最小值 | avg | 平均值 | sum | 求和 | 语法:
select 聚合函数(字段列表) from 表名;注意:null值不参与所有聚合函数的运算。
举例:查询西安,统计西安年龄和
select * from emp where workaddress = &#39;西安&#39;;
select sum(age) from emp where workaddress = &#39;西安&#39;;(5)DQL-分组查询
语法:
select 字段列表 from 表名 [where 条件] group by 分租字段名 [having 分租后过滤条件];where和having的区别:
1)执行时间不同:where是在分租之前进行过滤,不满足where条件,不参与分组,而having 是分组之后对结果进行过滤。
2)判断条件不同:where不能对聚合函数进行判断,而having可以。
举例:根据性别分组,统计男性员工和女性员工的数量
select gender,count(*) from emp group by gender;注:
1)执行顺序:where>聚合函数>having
2) 分组之后,查询的字段一般为聚合函数和分组函数,查询其他字段无任何意义
(6)DQL-排序查询
语法:
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;排序方式:asc(升序,默认值);desc(降序)
注:如果是多字段排序,当第一字段相同时,才会根据第二个字段进行排序。
(7)DQL-分页查询
语法:
select 字段列表 from 表名 limit 起始索引,查询记录数;注:
1)起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数
2)分页查询是数据库的方言,不同数据库有不同的实现,MySQL中是LIMIT
3)如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10
4、DCL:数据控制语言,用来创建数据库用户,控制数据库的访问权限
(1)DCL-管理用户
查询用户:
use mysql;
select * from user;创建用户
create user &#39;用户名&#39;@&#39;主机名&#39; idertified by &#39;密码&#39;;修改用户密码
alter user &#39;用户名&#39;@&#39;主机名&#39; identified with mysql_native_password by &#39;新密码&#39;;删除用户
drop user &#39;用户名&#39;@&#39;主机名&#39;;注:
1)主机名可以使用%通配
2)这类sql开发人员操作的比较少,主要是DBA(Database Administrator 数据库管理员)使用。
(2)DCL-权限控制
MySQL中定义了很多权限,但是常用的就以下几种
权限 | 说明 | all,all privileges | 所有权限 | select | 查询数据 | insert | 插入数据 | update | 修改数据 | detele | 删除数据 | alter | 修改表 | drop | 删除数据库/表/视图 | create | 创建数据库/表 | 查询权限
show grants for ‘用户名’@‘主机名’授予权限
grant 权限列表 on 数据库名.表名 to ‘用户名’@‘主机名’;撤销权限
revoke 权限列表 on 数据库名.表名 from ‘用户名’@‘主机名’;举例:
show grant for ‘xxx’@‘%’;
grant all on xxx.* to &#39;xxx&#39;@&#39;%&#39;;
revoke all on xxx.* from &#39;xxx&#39;@&#39;%&#39;;注:
1)多个权限之间,使用逗号分隔
2)授权时,数据库名和表名可以使用*进行通配,代表所有
三、函数
函数是指一段可以直接被另一段程序调用的程序或代码
语法:
select函数(参数)1、字符串函数
MySQL中内置了很多字符串函数,常用的几个如下:
函数 | 功能 | concat(‘s1’,‘s2’,...,‘sn’) | 字符串拼接,将s1,s2,...,sn拼接成一个字符串 | lower(str) | 将字符串str全部转为小写 | upper(str) | 将字符串str全部转为大写 | lpad(str,n,pad) | 左填充,用字符串pad对str的左边进行填充,达到n个字符串长度 | rpad(str,n,pad) | 右填充,用字符串pad对str的右边进行填充,达到n个字符串长度 | trim(str) | 去掉字符串头部和尾部的空格 | substring(str,start,len) | 返回字符串str从start位置起的len个长度的字符串 |
举例:
select concat(‘hello’,‘Mysql’);
select lpad(‘01’,5,‘_’);
select substring(‘hello Mysql’,1,5);更新emp中workup,使其成为5位,不足5位在前补0:
update emp set workno = lpad(workno,5,‘0’);注:如果workno为int则不显示‘0’,改为varchar
2、数值函数(常见)
函数 | 功能 | ceil(x) | 向上取整 | floor(x) | 向下取整 | mod(x,y) | 返回x/y的模(取余) | rand() | 返回0-1内的随机数 | round(x,y) | 求参数x的四舍五入的值,保留y位小数 | 举例:生成6位随机验证码
select lpad(round(rand()*1000000,0),6,‘0’);
3、日期函数(常见)
函数 | 功能 | curdate() | 返回当前日期 | curtime() | 返回当前时间 | now() | 返回当前日期+时间 | year(date) | 获取指定date的年份 | month(date) | 获取指定date的月份 | day(date) | 获取指定date的日期 | Date_add(date,interval expr type) | 返回一个日期/时间值加上一个时间间隔expr后时间值 | datediff(date1,date2) | 返回起始时间date1和结束时间date2之间的天数 | 举例:
select year(now());
select date_add(now(),interval 70 year);
select datediff(‘2021-12-01’,‘2021-11-01’);查询所有员工的入职天数,并根据入职天数倒序排序
select name,datediff((curdate1),entrydate)from emp;
select name,datediff((curdate1),entrydate) as ‘entrydays’from emp entrydays desc;
4、流程函数
可以在SQL语句中实现条件筛选,从而提高语句的效率。
函数 | 功能 | if(value,t,f) | 如果value为true,则返回t,否则返回f | ifnull(value1,value2) | 如果value1不为空,返回value1,否则返回value2 | case when [val1] then [res1]...else[default] end | 如果val1为true,返回res1,...否则返回default默认值 | case [expr] when [val1] then [real] ... else[default] end | 如果expr的值等于val1,返回res1,...否则返回default默认值 | 举例:
select if(true/false,‘OK’,‘Error’);
select ifnull(&#39;&#39;,&#39;Default); ===>default
select ifnull(null,&#39;Default&#39;); ==Default
select
name,
(case workaddress when &#39;北京&#39; then &#39;一线城市&#39; when &#39;上海&#39; then &#39;一线城市&#39; else &#39;二线城市&#39; end) as &#39;工作地址&#39;
form emp;
四、约束
(1)概述
约束是作用于表中字段上的规则,用于限制存储在表中的数据。
目的:保证数据库中数据的正确性、有效性和完整性
分类:
非空约束 | 限制该字段的数据不能为null | not null | 唯一约束 | 保证该字段的所有数据都是唯一、不重复的 | unique | 主键约束 | 主键是一行数据的唯一标识,要求非空且唯一(主键自增:auto_increment) | primary key | 默认约束 | 保存数据时,如果未指定该字段的值,则采用默认值 | default | 检查约束 | 保证字段值满足某一个条件 | check | 外键约束 | 用来让两张表的数据之间建立连接,保证数据的一致性和完整性 | foreign key | 注:约束是作用于表中字段上的,可以在创建表\修改表的时候添加约束
(2)外键约束
语法:
添加外键
create table 表名(
字段名 数据类型
...
[constraint] [外键名称] foreign key (外键字段名) references 主表(主表列名)
);
alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主表列名);删除外键
alter table 表名 drop foreign key 外键名称;删除(更新行为)
。。。。。待更新。。。。 |
|