MySQL数据库基础

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8" />

<title>SQL语句基础</title>

</head>

<body>

<!-- 下载

在官网下载免费的社区版,账号密码一般设置为123456

-->

<!-- 数据库相关概念

数据库:存储数据的仓库,数据是有组织的进行存储,简称DB

数据库管理系统:操纵和管理数据库的大型软件,简称DBMS

SQL:操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准,简称SQL

-->

<!-- mysql的启动于暂停

注意:mysql在开机时默认是启动的

步骤:

1.以管理员命令运行cmd 或输入 -u root -p

2.输入

停止mysql:net stop mysql80

启动mysql:net start mysql80

80指的是注册到windows的系统服务的服务名称

-->

<!-- mysql的客户端连接

方法一:Mysql提供的客户端命令行工具,在开始菜单里找

方法二:系统自带的命令行工具执行指令:mysql [-h 127.0.0.1] [-P 3306] -u root -p

但方法用方法二时,需要配置PATH环境变量,新增C:\Program Files\MySQL\MySQL Server 8.0\bin

-->

<!-- 数据模型

客户端 ------------> DBMS ------------> 数据库 ------------> 表

-->

<!-- 关系型数据库(RDBMS)

概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库

特点:

1.使用表存储数据,格式统一,便于维护

2.使用SQL语言操作,标准统一,使用方便

-->

<!-- SQL语句通用语法

1.SQL语句可以单行或多行书写,以分号结尾

2.SQL语句可以使用空格/缩进来增强语句的可读性

3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写

4.注释:

单行注释:-- 注释内容或#注释内容(MySQL特有)

多行注释:/*注释内容*/

-->

<!-- SQL分类

DDL:Data Definition Language :数据定义语言,用来定义数据库对象(数据库,表,字段)

DML:Date Manipulation Language :数据操作语言,用来对数据库表中的数据进行增删改

DQL:Data Query Language :数据查询语言,用来查询数据库中表的记录

DCL:Data Control Language :数据控制语言,用来创建数据库用户,控制数据库的访问权限

-->

<!-- DDL-数据库操作

查询:

1.查询所有数据库:SHOW DATABASES;

2.查询当前数据库:SELLECT DATABASE();

创建:CREATE DATABASE [IF NOT EXISTS] 数据库名 [DFFAULT CHARSET] 字符集 [COLLATE 排序规则];

IF NOT EXISTS 如果存在则不创建,不存在才创建

[]是可选的

删除:DROP DATABASE [IF EXISTS]数据库名;

使用:USE 数据库名;

不区分大小写

-->

<!-- DDL-表操作

查询

查询当前数据库所有表:SHOW TABLES;

查询表结构:DESC 表名;

SHOW CREATE TABLE 表名;

创建

create table 表名(

字段1 字段1类型[comment 字段1注释],

字段2 字段2类型[comment 字段2注释]

)[COMMENT 表注释];

[]为可选参数,最后一个字段后面没有逗号

-->

<!-- 数据类型

1.数值类型

tinyint:小整数值

smallint:大整数值

mediumint:大整数值

bigint:极大整数值

float:单精度浮点数值

double:双精度浮点数值

decimal:小数值(精度确定点数)

2.字符串类型

char:定长字符串

varchar:变长字符串

tinyblob:不超过255个字符的二进制数据

tinytext:短文本字符串

blob:二进制形式的长文本数据

text:长文本数据

mediumblob:二进制形式的中等长度文本数据

mediumtext:中等长度文本数据

longblob:二进制形式的极大文本数据

longtext:极大文本数据

3.日期类型

date:日期值,格式:YYYY-MM-DD

time:时间值或持续时间,格式:HH:MM:SS

year:年份值,格式:YYYY

datetime:混合日期和时间值,格式:YYYY-MM-DD HH:MM:SS

timestamp:混合日期和时间值,时间戳,格式:YYYY-MM-DD HH:MM:SS

-->

<!-- 案例 创建一个员工表

要求:

1.编号(数字)

2.员工工号(字符串类型,长度不超过10位)

3.员工姓名(字符串类型,长度不超过10位)

4.性别(男/女,存储一个汉字)

5.年龄:(正常人年龄,不可以存储负数)

6.身份证号:(二代身份证号均为18位,身份证可能有X字符)

7.入职时间:取值年月日

create table yg(

id int comment'编号',

worknum varchar(10) comment'工号',

name varchar(10) comment'姓名',

gender char(1) comment'性别',

age tinyint unsigned comment'年龄',

unsugned表示不能负数

idcard char(18) comment'身份证',

entertime date comment '入职时间'

)comment'员工表';

-->

<!-- DDL-表操作

添加字段:altertable 表名 add 字段名 类型(长度)[comment注释] [约束];

修改数据类型:altertable 表名 modify字段名 新数据类型(长度);

修改字段名和字段类型:altertable 表名 change旧字段名 新字段名 类型(长度)[comment注释][约束];

删除字段名:alter table 表名 drop字段名;

修改表名:altertable 表名 rename to新表名;

删除表:drop table [if exists]表名;

删除指定表,并重新创建该表:truncate table表名;

-->

<!-- MYSQL的图形化操作

建议下载 navicat和datagrip

步骤:1.连接数据库mysql,输入用户名和密码

-->

<!-- DML-对表中数据进行增删改

添加数据

1.给指定字段添加数据:insert into 表名(字段名1,字段名2,...) values(值1,值2,...);

2.给全部字段添加数据:insert into 表名 values(值1,值2...);

3.批量添加数据:

insert into 表名(字段名1,字段名2,...) values(值1,值2,...),(值1,值2,...),(值1,值2,...);

insert into 表名 values(值1,值2...),(值1,值2...),(值1,值2...);

注意:插入数据时,指定的字段顺序要与值的顺序是一一对应的,字符串和日期型数据应包含在引号中,插入数据的大小,应该在字段规定范围内

修改数据

update 表名 set 字段名1=值1,字段名2=值2,....[where 条件]

注意:修改语句的条件可以由,也可以没有,如果没有条件,则会修改整张表的所有数据

删除数据

delete from 表名 [where 条件]

注意:delete语句条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据

delete语句不能删除某一字段的值(可以使用update)

-->

<!-- DQL-数据库查询语言,用来查询数据库中表的记录

查询关键字:select

语法:

select

字段列表

from

表名列表

where

条件列表

group by

分组字段列表

having

分组后条件列表

order by

排序字段列表

limit

分页参数

-->

<!-- 基本查询

1.查询多个字段

select 字段1,字段2....from 表名;

select*from 表名;(查询所有字段)

2.设置别名

select 字段1[AS 别名1],字段2[as别名2]...from 表名;(AS可以省略)

3.去除重复记录

select distinct 字段列表 from 表名;

-->

<!-- 条件查询

语法:select 字段列表 from 表名 where 条件列表

例子:

1.查询年龄小于20的员工信息

select * from yg where age < 20;

2.查询没有身份证号的员工信息

select * from yg where idcard is null;

3.查询有身份证号的员工信息

select * from yg where idcard is not null;

4.查询年龄在15到20之间

select * from yg where age > = 15 and age <= 20

select* from yg where age between 15 and 20

5.查询姓名为两个字的员工信息(like占位符:模糊查询_匹配单个字符,%匹配任意字符)

select * from yg where name like'__'

6.查询身份证号最后一位是x的员工信息

select * from yg where idcard like '%X'

-->

<!-- 聚合函数

将一列数据作为应该整体,进行纵向计算

常见的聚合函数:

count:统计数量

max:最大值

min:最小值

avg:平均值

sum:求和

注意:null值不参与聚合函数运算

语法:select 聚合函数(字段列表)from 表名;

-->

<!-- 分组查询(group by)

语法:select 字段列表 from 表名 [where 条件] group by 分组字段名[having 分组后过滤条件];

where与having区别

执行时机不同:

where是分组之前进行过滤,不满足where条件,不参与分组

having是分组之后对结果进行过滤

判断条件不同:

where不能对聚合函数进行判断,而having可以

例子

1.根据性别分组,统计男和女员工数量

select gender,count(*)from yg group by gender

2.查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址

select workadress count(*) from yg where age < 45 group by workadress having count(*) >= 3;

注意:

1.执行顺序:where > 聚合函数 > having

2.分组之后,查询的字段一般位聚合函数和分组字段,查询其他字段无任何意义

-->

<!-- 排序查询

语法:select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;

排序方式:

ASC:升序(默认值)

desc:降序

注意:如果多个字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。

例子:

1.根据年龄进行升序排序

select * from yg order by age asc;

asc是默认的不写也行

2.根据年龄升序排序,年龄相同,再按照入职时间降序排序

select * from yg order by age asc,enterdata desc;

-->

<!--分页查询

语法:select 字段列表 from 表名 limit 起始索引,查询记录数;

注意:

1.起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数。

2.分页查询是数据库的方言,不同的数据库有不同的实现,MySQL是limit

3.如果查询的是第一页,起始索引可以省略,直接写为limit10

例子:

1.查询第一页的员工数据,每页展示10条记录

select * from yg limit 0,10;

2.查询第三页员工数据,每页展示10条记录

select * from yg limit 20,10;

-->

<!-- DQL语句的执行顺序

from where group by having select,order by limit

-->

<!-- DCL,用来管理数据库用户,控制数据库的访问权限

管理用户

1.查询用户:

USE mysql;

select * from user;

2.创建用户

create user '用户名'@'主机名' identified by '密码';

3.修改用户密码

alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';

4.删除用户

drop user '用户名'@'主机名';

例子:

1.创建用户 text ,只能在当前主机localhost访问,密码123456

create user 'text' @ 'localhost' identified by '123456'

2.创建用户 text1 ,可以在任意主机访问该数据库,密码123456

create user 'text1' @ '%' identified by '123456';

-->

<!--权限控制

all,allprivileges:所有权限

select:查询数据

insert:插入数据

update:修改数据

delete:删除数据

alter:修改表

drop:删除数据表/库/视图

create:创建数据库/表

1.查询权限

show grants for '用户名'@'主机名';

2.授予权限

grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';

3.撤销权限

revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';

注意:多个权限之间适应逗号进行分隔,授权时,数据库名和表名可以使用*进行通配,代表所有

-->

</body>

</html>

相关推荐
White_Mountain13 分钟前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship14 分钟前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站17 分钟前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle
老王笔记18 分钟前
GTID下复制问题和解决
mysql
装不满的克莱因瓶20 分钟前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
Lojarro2 小时前
【Spring】Spring框架之-AOP
java·mysql·spring
梦想平凡2 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle
TianyaOAO2 小时前
mysql的事务控制和数据库的备份和恢复
数据库·mysql
Ewen Seong2 小时前
mysql系列5—Innodb的缓存
数据库·mysql·缓存
码农老起3 小时前
企业如何通过TDSQL实现高效数据库迁移与性能优化
数据库·性能优化