MYSQL数据库 (1)基础与安装教程
2021/7/4 19:26:51
本文主要是介绍MYSQL数据库 (1)基础与安装教程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
一、简介与安装
1、简介
2、常见的关系型数据库
3、三大范式(三大规范)
4、安装
5、卸载数据库
二、SQL语言
1、概述
2、SQL语句分类
3、DDL操作数据库
4、DDL操作表
5、DML操作
6、DCL
三、DQL查询语句
1、简单查询
2、条件查询
3、模糊查询
4、字段控制查询
5、排序
6、聚合函数
7、分组查询
7.1 group by
7.2 having子句
8、LIMIT
一、简介与安装
1、简介
数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种
用户或应用共享的数据集合。
数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软
件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。
用户通过数据库管理系统访问数据库中的数据。
数据库软件应该为数据库管理系统,数据库是通过数据库管理系统创建和操作的。
数据库:存储、维护和管理数据的集合
2、常见的关系型数据库
Oracle、MySQL、DB2、SQL Server等
3、三大范式(三大规范)
什么是三大范式:
第一范式:无重复的列。当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。
第二范式:属性完全依赖于主键 [ 消除部分子函数依赖 ]。如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。这个唯一属性列被称为主关键字或主键、主码。
第三范式:属性不依赖于其它非主属性 [ 消除传递依赖 ]。设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF. 满足第三范式(3NF)必须先满足第二范式(2NF)。第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
注:关系实质上是一张二维表,其中每一行是一个元组,每一列是一个属性
总结:列不能重复,每一行都要有主键,两张不要同时存一个除主键外的字段信息,比如学生基本信息表存了姓名,学生成绩表就只能存学生信息表的主键,通过主键获取姓名,不能直接存姓名
4、安装
1、下载压缩包 for windows,解压到电脑
https://dev.mysql.com/downloads/mysql/
2、配置环境变量
3、创建或修改my.ini文件。内容如下,文件路径改成自己的,没有data文件夹就自己创建
[mysqld] # 设置3306端口 port=3306 # 设置mysql的安装目录 basedir=E:\WorkData\DevelopmentKit\mysql-8.0.22-winx64 # 设置mysql数据库的数据的存放目录 datadir=E:\WorkData\DevelopmentKit\mysql-8.0.22-winx64\data # 允许最大连接数 max_connections=200 # 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统 max_connect_errors=10 # 服务端使用的字符集默认为UTF8 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 默认使用“mysql_native_password”插件认证 default_authentication_plugin=mysql_native_password [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [client] # 设置mysql客户端连接服务端时默认使用的端口 port=3306 default-character-set=utf8
4、安装mysql
在mysql的安装目录中,打开bin文件夹,在地址栏输入cmd,回车打开控制台,然后执行初始化数据库的指令:
mysqld --initialize --console
执行成功最后一句话就是生成的root的默认密码。没有空格
+pwyVCu/8v<s
如果不小心关掉了,,那也没事,删掉初始化的 datadir 目录,再执行一遍初始化命令,又会重新生成的
5、安装服务
在MySQL安装目录的 bin 目录下CMD执行命令:
mysqld --install mysql8 后面的mysql指的是服务名,可以自定义
如果提示上述错误,需要关闭cmd,重新打开,使用管理员身份执行
6、启动服务
安装完成之后
通过命令net start mysql8启动MySQL的服务了。
通过命令net stop mysql8停止服务。
也可以在系统 服务 手动打开关闭
7、连接数据库
打开cmd 输入mysql -u root -p
然后输入刚刚生成的默认密码
8、连接上以后,修改默认密码。这里修改为123456,执行的每段命令,结束都要加分号
alter user 'root'@'localhost' identified with mysql_native_password BY '123456';
9、输入quit,退出数据库
5、卸载数据库
步骤1:使用管理员身份运行cmd,关闭mysql服务
net stop mysql8
步骤2:删除mysql服务
命令:sc delete mysql8 或者 mysqld remove mysql8
步骤3:刪除mysqlDB目录文件( 安裝mysql时my.ini指定的目录)
二、SQL语言
1、概述
SQL:Structure Query Language(结构化查询语言),SQL被美国国家标准局(ANSI)确定为关
系型数据库语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。
各数据库厂商都支持ISO的SQL标准,普通话
各数据库厂商在标准的基础上做了自己的扩展,方言
SQL 是一种标准化的语言,它允许你在数据库上执行操作,如创建项目,查询内容,更新内容,
并删除条目等操作。
Create, Read, Update, and Delete 通常称为CRUD操作
2、SQL语句分类
- DDL(Data Defifinition Language):数据定义语言,用来定义数据库对象:库、表、列等。
- DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)增删改。
- DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别。
- DQL(Data Query Language):数据查询语言,用来查询记录(数据)查询
注意:sql语句以;结尾
mysql中的关键字不区分大小写
3、DDL操作数据库
1、创建
CREATE DATABASE语句用于创建新的数据库:
编码方式:gb2312,utf-8,gbk,iso-8859-1
//create database 数据库名 CREATE DATABASE mydb1; //create database 数据库名 character set 编码方式 CREATE DATABASE mydb2 character SET GBK; //create database 数据库名 set 编码方式 collate 排序规则 CREATE DATABASE mydb3 character SET GBK COLLATE gbk_chinese_ci;
2、 查看数据库
查看当前数据库服务器中的所有数据库
show databases;
3、修改数据库
alter database 数据库名 character set 编码方式
4、删除数据库
DROP DATABASE mydb3
5、其他语句
查看当前使用的数据库
Select database();
切换数据库: use 数据库名
USE mydb2;
4、DDL操作表
CREATE TABLE语句用于创建新表。
语法:
CREATE TABLE 表名( 列名1 数据类型 [约束], 列名2 数据类型 [约束], 列名n 数据类型 [约束] );
说明:表名,列名是自定义,多列之间使用逗号间隔,最后一列的逗号不能写
[约束] 表示可有可无
示例:
CREATE TABLE Employees( id INT , age INT , first VARCHAR(255), last VARCHAR(255) );
常用数据类型:
int:整型
double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为
999.99;默认支持四舍五入
char:固定长度字符串类型; char(10) 'aaa ' 占10位
varchar:可变长度字符串类型; varchar(10) 'aaa' 占3位
text:字符串类型,比如小说信息;
blob:字节类型,保存文件信息(视频,音频,图片);
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值
datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
其他表操作
删除表结构 DROP TABLE table_name; 当前数据库中的所有表 SHOW TABLES; 查看表的字段信息 DESC employee; 增加列:在上面员工表的基本上增加一个image列数据类型为blob。 ALTER TABLE employee ADD image blob; 修改job列,使其长度为60。 ALTER TABLE employee MODIFY job varchar(60); ALTER TABLE employee change job job varchar(60); 列名name修改为username ALTER TABLE user CHANGE name username varchar(100); 删除image列,一次只能删一列。 ALTER TABLE employee DROP image; 修改表名,表名改为user。 ALTER TABLE user rename users; 查看表格的创建细节 SHOW CREATE TABLE user; 修改表的字符集为gbk ALTER TABLE user CHARACTER SET gbk;
5、DML操作
DML是对表中的数据进行增、删、改的操作。不要与DDL混淆了。
主要包括:INSERT 、UPDATE、 DELETE
小知识:
在mysql中,字符串类型和日期类型都要用单引号括起来。
空值:null
(1)插入操作:INSERT:
insert into 表名(列名) values(数据值);
insert into student(stuname,stuage,stusex,birthday) values('张三1',18,'a','2000-1-1');
-- 注意:1多列和多个列值之间使用逗号隔开 2.列名要和列值一一对应
-- 非数值的列值两侧需要加单引号
常见错误: Data too long for column 'stusex' at row 1
-- 添加数据的时候可以将列名省略->当给所有列添加数据的时候
-- 此时列值的顺序按照数据表中列的顺序执行
insert into student values('李四',12,'1111',189.98,'2000-1-1','男','2007-1-1');
-- 同时添加多行
insert into 表名(列名) values(第一行数据),(第二行数据),(),();
insert into student(stuname,stuage,stusex,birthday) values('张三3',18,'a','2000-1-1'), ('张三4',18,'a','2000-1-1'), ('张三5',18,'a','2000-1-1'), ('张三6',18,'a','2000-1-1'), ('张三7',18,'a','2000-1-1'), ('张三8',18,'a','2000-1-1');
注意:列名与列值的类型、个数、顺序要一一对应。
参数值不要超出列定义的长度。
如果插入空值,请使用null
插入的日期和字符一样,都使用引号括起来。
sql中的运算符:
(1)算术运算符:+,-,*,/(除法),求余(%)
(2)赋值运算符:=
注:赋值方向:从右往左赋值
示例: name='张三'
(3) 逻辑运算符:
and(并且),or(或者),not(取非)
作用:用于连接多个条件时使用
(4) 关系运算符:
>,<,>=,<=,!=(不等于),=(等于),<>(不等于)
补充:查询所有数据:select * from 表名
(2)修改(更新)操作:UPDATE:
语法:UPDATE 表名 SET 列名1=列值1,列名2=列值2 ... WHERE 列名=值
(3)删除操作:DELETE:
语法 : DELETE from 表名 【WHERE 列名=值】
使用truncate删除表中记录。
TRUNCATE TABLE emp;
- DELETE 删除表中的数据,表结构还在;删除后的数据可以找回
- TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表。
- 删除的数据不能找回。执行速度比DELETE快
日期类型值的区别:
date:yyyy-MM-dd (年月日)
time:hh:mm:ss (时分秒)
datetime:yyyy-MM-dd hh:mm:ss (年月日时分秒)
获取当前系统时间:now()
select now();
6、DCL
1、创建用户:
create user 用户名@指定ip identifified by 密码;
create user 用户名@客户端ip identifified by 密码; 指定IP才能登陆
create user 用户名@‘% ’ identifified by 密码 任意IP均可登陆,可以省略@'%'
2、用户授权:
grant 权限1,权限2,........,权限n on
数据库名.* to 用户名@IP; 给指定用户授予指定指定数据库指定权限
grant all on . to 用户名@IP 给指定用户授予所有数据库所有权限
3、用户权限查询:
show grants for 用户名@IP;
4、撤销用户权限:
revoke 权限1,权限2,........,权限n on 数据库名.* from 用户名@IP;
5、删除用户:
drop user 用户名@IP;
6、修改用户密码
alter user 用户名 IDENTIFIED by '123456'
三、DQL查询语句
DQL数据查询语言(重要)
数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。
查询返回的结果集是一张虚拟表。
语法: SELECT 列名 FROM 表名 【WHERE --> BROUP BY-->HAVING--> ORDER BY】
SELECT 要查询的列名称 FROM 表名称 WHERE 限定条件 /*行条件*/ GROUP BY grouping_columns /*对结果分组*/ HAVING condition /*分组后的行条件*/ ORDER BY sorting_columns /*对结果分组*/ LIMIT offset_start, row_count /*结果限定*/
1、简单查询
SELECT * FROM stu; SELECT sid, sname, age FROM stu;
2、条件查询
条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:
=、!=、<>、<、<=、>、>=; BETWEEN…AND; IN(set); IS NULL; AND;OR; NOT;
3、模糊查询
当想查询姓名中包含a字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字LIKE。
语法: 列名 like '表达式' //表达式必须是字符串
通配符:
_(下划线): 任意一个字符
%:任意0~n个字符,'张%'
(1)查询姓名由3个字构成的学生记录。这里有3个下划线,代表3个任意字符 SELECT * FROM stu WHERE sname LIKE '___'; (2)查询姓名由5个字母构成,并且第5个字母为“i”的学生记录 SELECT * FROM stu WHERE sname LIKE '____i' (3)查询姓名以“z”开头的学生记录 SELECT * FROM stu WHERE sname LIKE 'z%'; (4)查询姓名中第2个字母为“i”的学生记录 SELECT * FROM stu WHERE sname LIKE '_i%' (5)查询姓名中包含“a”字母的学生记录 SELECT * FROM stu WHERE sname LIKE '%a%';
4、字段控制查询
(1)去除重复记录 SELECT DISTINCT sal FROM emp; (2)查看雇员的月薪与佣金之和 SELECT *,sal+comm FROM emp; SELECT *,sal+IFNULL(comm,0) FROM emp; (3)给列名添加别名,AS可以省略 SELECT *, sal+IFNULL(comm,0) AS total FROM emp;
5、排序
查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序 多列排序:当前面的列的值相同的时候,才会按照后面的列值进行排序 升序时,ASC可以省略 SELECT * FROM emp ORDER BY sal DESC,empno ASC;
6、聚合函数
聚合函数是用来做纵向运算的函数:
COUNT(列名):统计指定列不为NULL的记录行数;
MAX(列名):计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN(列名):计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM(列名):计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG(列名):计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
7、分组查询
当需要分组查询时需要使用GROUP BY子句,例如查询每个部门的工资和,这说明要使用部分来分组。
注意:如果查询语句中有分组操作,则select后面能添加的只能是聚合函数和被分组的列名
7.1 group by
select gradename,gender ,count(*) from stu group by gradename,gender
7.2 having子句
SELECT deptno, SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal) > 9000;
注:having与where的区别:
1.having是在分组后对数据进行过滤,where是在分组前对数据进行过滤
2.having后面可以使用分组函数(统计函数)
where后面不可以使用分组函数。
WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束。
8、LIMIT
LIMIT用来限定查询结果的起始行,以及总行数
第一行下标为0
从下标为0的行开始,查询5行记录 SELECT * FROM emp order by LIMIT 0, 5; 从下标为3的行开始,查询10行记录 SELECT* FROM emp LIMIT 3, 10; 查询1条记录 SELECT* FROM emp LIMIT 1;
查询语句书写顺序:select – from- where- groupby- having- order by-limit
查询语句执行顺序:from - where -group by -having - select - order by-limit
这篇关于MYSQL数据库 (1)基础与安装教程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南
- 2024-11-02初学者指南:部署MySQL集群资料
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程
- 2024-11-01部署MySQL集群学习:新手入门教程
- 2024-11-01部署MySQL集群入门:新手必读指南
- 2024-10-23BinLog入门:新手必读的MySQL二进制日志指南
- 2024-10-23Binlog入门:MySQL数据库的日志管理指南