MySQL介绍
-
数据库(DataBase,简称DB):据库是存放数据的仓库,它的存储空间很大,可以存放百万条、千万条、上亿条数据。因此,开发中只要涉及到数据,就一定会用到数据库;
-
数据库管理系统(Data Base Manage System,简称DBMS):数据库管理系统是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。在很多地方,数据库管理系统被简称为数据库,实际上是两个不同的概念,不要混淆。因此,使用缩写会更好。
-
关系型DBMS的分类
- 市面上使用的DBMS主要分为两类:关系型(SQL)、非关系型(NoSQL),关系型数据库的市场份额远大于非关系型;
- Oracle:Oracle是一种企业级的关系型数据库管理系统,具有强大的数据处理能力和高可靠性,适用于大型企业和关键业务系统;
- MySQL:MySQL是由瑞典MySQL AB公司开发(后来被Oracle公司收购)的一种开源SQL数据库管理系统,它提供了丰富的功能和良好的性能,并且支持大量的操作系统和编程语言,因此广受开发者的欢迎;
- Microsoft SQL Server:Microsoft SQL Server是微软公司出品的一款关系型数据库管理系统,它集成了高效的数据处理引擎和强大的商业智能功能,广泛应用于各种规模的企业级应用中;
- PostgreSQL:PostgreSQL是一款开源的对象-关系型数据库管理系统,它具有高度的可扩展性和灵活性,并且支持复杂的查询语言和存储过程;
- DB2:DB2则是一种面向企业级应用的关系型数据库管理系统,它拥有强大的数据安全性和稳定性,常被用于处理大量的关键业务数据;
- 目前,个人及中小型企业大部分使用MySQL(免费、功能强大)。
-
MySQL结构:MySQL和其他关系型数据库一样,由二维表格模型组成,每张数据表都由若干行和列组成,一行成为一个记录,一列称为一个字段(或者属性)

-
MySQL安装
-
下载MySQL社区版安装程序(https://dev.mysql.com/downloads/installer/)


-
选择安装类型

-
选择安装路径

-
默认选择所有组件(点击Execute,稍等片刻)


-
配置信息,直接next

-
网络配置,直接next

-
选择默认的,直接next

-
为默认用户root创建密码,输入之后check成功,点击next

-
在windows上注册MySQL服务

-
直接next

-
直接Execute

-
点击Cancel

-
在命令行中,启动和停止MySQL服务
- 启动:net start mysql80 - 停止:net stop mysql80 -
在命令行中,连接上MySQL
- mysql -u root -p - 回车之后输入root用户的密码
-
-
MySQL规范
- MySQL不区分大小写,但是关键字建议使用大写;
- MySQL语句以分号结尾
基础
- SQL语言是一种结构化查询语言,用于存取数据以及查询、更新和管理关系数据库系统 。SQL语言包括数据定义语言(DDL)、数据操作语言(DML)、数据查询语言(DQL)、数据控制语言(DCL)等部分。
- use db_name; 进入db_name数据库(在操作表/数据之前,必须进入数据库)
- MySQL的数据类型与其他编程语言类似有很多,最常用的有两个:整型(int )、字符型(varchar(length))
- 注释:单行注释(# 或者 --空格),多行注释(/**/)
- 点号:A数据库中的B数据表中的C字段,可表示为 A.B.C
DDL
Data Defination Language,数据定义语言。主要用于数据库结构和表结构的定义,有四个关键字:create、drop、alter、truncate。
查询
show databases; #查询MySQL管理的所有数据库
show tables; #查询当前数据库中的所有表
select database(); #查询当前使用的数据库
desc tb_name; #查询当前表的表结构
show create table tb_name; #查询当前表的建表语句
CREATE
-
作用:用于创建结构(创建一个数据库、创建一张表);
-
语法
- 创建数据库 create database [if not exists] db_name; 如果不存在,则创建数据库 - 创建表结构 create table [if not exists] tb_name(字段1 类型 [约束], 字段2 类型 [约束], ..., 字段n 类型 [约束]); -
演示
# 创建一个数据库,名称为 School create database if not exists School; # 创建一张表,名称为 Students,字段为id, name, age, sex create table if not exists Students(id int, name varchar(20), age int, sex varchar(1)); /* if not exists 的作用在于,如果这个东西(数据库/表)已经存在,再次创建不会报错,只会警告;如果省略了if not exists语句,就会报错,因此使用create创建结构时,推荐加上 if not exists */ # 再次创建Students表,感受 if not exists作用 create table if not exists Students; #不会报错 create table Students; #报错


DROP
-
作用:删除数据库或表
-
语法
/* DB: Users Table: infos Column: id, name, age, sex */ # 删除表 drop table [if not exists] tb_name; drop table if not exists infos; # 删除数据库 drop database [if not exists] db_nmae; drop database if not exists users;
TRUNCATE
-
作用:清空表中的所有数据(只作用于表)
-
语法
truncate table tb_name;
ALTER
-
作用:修改表结构
-
语法
/* DB: Users Table: infos Column: id, name, age, sex */ #重命名表 alter table tb_name rename to new_tb_name; alter table infos rename to informations; #添加一个新的字段 alter table tb_name add column_name type [comment] [约束条件]; alter table informations add salaries int [comment"工资"]; #删除字段 alter table tb_name drop column_name; alter table informations drop salaries; #修改字段类型 alter table tb_name modify column_name type; alter table informations modify name varchar(15); #修改字段的名称及类型 alter table tb_name change old_column_name new_column_name type; alter table informations change sex gender varchar(1);
DML
-
Data Manipulation Language,数据操纵语言。对表中的数据进行增删改的操作。
-
语法
/* DB: Users Table: infos Column: id, name, age, sex */ #增加:value后面的一个括号表示一个记录 insert into tb_name(字段1,字段2, ..., 字段n) value (value1,value2, ..., valuen), (value1,value2, ..., valuen), ..., (value1,value2, ..., valuen); insert into infos(name,age,sex) value ("BrankYeen",20,"男"),("尹少欣",21,"男"),("李雪",22,"女");#添加了三个记录 #删除 delete from tb_name where条件 delete from infos where name="尹少欣"; #删除name="尹少欣"这行记录 #修改 update infos set column_name=value [where条件]; update infos set age=18 where name="李雪";
DQL
-
Data Query Language,数据查询语言。用于查询表中的数据。
-
语法
select column_name from table_name [where条件] [group by分组 having条件] [order by排序] [limit分页]
条件查询
-
select column_name from tb_name where条件:从表中搜索数据,且要满足条件
-
比较运算符:>、>=、<、<=、<>/!=、between...and...、in、like、is null。如果为真,返回1;如果为假,返回0。
-
逻辑运算符:and/&&、or/||、not/!。如果为真,返回1;如果为假,返回0。
-
演示
select 1>2; select 3<>4; select id between 4 and 10 from students; #查询[4,10]的id字段 select name from students where id in (1,2,3,5,7); #在students表中,从id为1或2或3或5或7的记录中,查询name字段 select name from students where name like '%e%'; #在students表中,搜索name字段中含有字母"e"的记录,其中%表示任意多个字符
别名
-
如果在一个SQL语句中,多次使用表名或,且名称较长,此时可以使用别名进行简化;
-
注意,起别名之后,只能使用该别名,不能再使用原来的名字;
-
语法
/* DB: Users Table: infos Column: id, name, age, sex */ select column_name from tb_name [as] xx where xx.id=1; select name from infos as i where i.sex='女';
分组
-
配合聚合函数,利用分组信息进行统计,后面可以通过having条件进行筛选过滤;
-
聚合函数
/* DB: Users Table: infos Column: id, name, age, sex */ #sum():求和 select sum(id) from infos; #avg():求平均 select avg(id) from infos; #max():最大值 select max(id) from infos; #min():最小值 select min(id) from infos; #count():求个数 select count(id) from infos;
排序
-
对表中的某一字段进行升序或降序后,搜索数据数据;
-
语法
/* DB: Users Table: infos Column: id, name, age, sex */ #升序 select column_name from tb_name order by x [asc]; select name from infos order by age asc; #降序 select column_name from tb_name order by x desc; select nmae from infos order by id desc;
分页
-
如果查询到的结果很多,可以进行分页展示,一次只展示某几个数据;
-
语法
/* DB: Users Table: infos Column: id, name, age, sex */ select column_name from tb_name from limit start,length #范围是[start,start+length),索引从0开始 select name from infos limit 0,3; select name from infos limit 3,3;
DCL
-
Data Control Language,数据控制语言。用于管理数据库的用户,DBA(数据库管理员)用的较多;
-
语法
#查询用户 select * from mysql.users; #创建用户 create user '用户名'@'主机名' identified by '密码'; create user 'brankyeen'@'localhost' identified by '123.com'; #修改密码 alter user '用户名'@'主机名' identified with '旧密码' by '新密码'; alter user 'brankyeen'@'lccalhost' identified with '123.com' by 'administrator'; #删除用户 drop user '用户名'@'主机名'; drop user 'brankyeen'@'localhost'; -
权限控制
all/all privileges #所有权限 select #查询权限 insert #添加数据权限 update #修改数据权限 delete #删除数据权限 alter #修改结构权限 drop #删除结构权限 create #创建结构权限 #查询用户的权限信息 show grants for '用户名'@'主机名'; show grants for 'brankyeen'@'localhost'; #授予权限 grant 权限列表 on 数据库.表 to '用户名'@'主机名'; grant select,insert on *.* to 'brankyeen'@'localhost'; #撤销权限 revoke 权限列表 on 数据库.表 from '用户名'@'主机名'; revoke all on *.* from 'brankyeen'@'localhost';
函数
字符串函数
# concat(str1, str2, ..., strn) 将多个字符串拼接成一个字符串
select concat('Hello', 'MySQL', 'DataBase');
#lower(str)将字符串全部转为小写,upper(str)将字符串全部转为大写
select lower('HElL0');
select upper('MySQL');
#lpad(str,n,character)左填充character字符,rpad(str,n,character)又填充character
select lapd('BrankYeen', 10, '@');
select rpad('尹少欣', 10, '#');
#trim(str)去除字符串前后的空格
select strim(' Hello Mysql ');
#substring(str,start,len) 从start位置开始往后截取len个字符
select substring("I Love BrankYeen", 3, 5);
数值函数
#ceil()向上取整 floor()向下取整
select ceil(1.2);
select floor(2.1);
#mod(x,y) x%y
select mod(11,2);
#rand() 0~1之间的随机数
select floor(rand()*2);
#round() 四舍五入并保留小数位数
select round(3.1415926,3);
日期函数
#curdate()当前日期 curtime()当前时间 noe()当前日期及时间
select curdate();
select curtime();
select now();
#year()年份 month()月份 day()天数
select year(curdate());
select month(curdate());
select day(curdate());
#date_add()
select date_add(curdate(),interval 30 day);
#datediff() 间隔时间
select datediff(curdate(),'1945-10-1');
流程函数
#if(exp, v1, v2) 如果exp的值为真,返回v1,否则返回v2
select if(1+1=2, '真', '假');
#ifnull(exp, v) 如果exp的值为null,返回v,否则返回exp
select ifnull(id, "有空值") from students;
#case [exp] when v1 then r1 else r2 end; 如果exp的值为v1,返回r1,否则返回r2
select case name when "BrankYeen" then "好帅" else "还行" end from students;