mysql数据库

mysql下载地址+安装图解:

https://pan.baidu.com/s/1vPCthQeJQ2UopPaJPLvhAg    密码7w8c

sqlyog工具:自动补齐代码功能 

下载地址:https://share.weiyun.com/5OYFHKk

tab键  自动补齐

常用sql 

	1.DDL:操作数据库中对象,数据库,表,列
	***创建数据库
		create database 数据库名;# 以默认的编码创建数据库
		create database 数据库名 charset 编码名;
		create database 数据库名 character set 编码名;
	***创建表
		create table 表名(
			字段1 数据类型(长度) [约束],
			字段2 数据类型(长度) [约束]
			);	
		约束:
			主键约束:primary key,该列的值必须唯一,并且不为空
			自动增长列约束:auto_increment 该列值交给数据库维护
	2.DML:操作数据库表中数据,对数据进行增删改
	****添加一条记录
		insert into 表名 (列名1.列名2..) values (值1,值2..);
		注意:
			1.列名和后面的值 必须一一对应
			2.(列名1.列名2..) 这里的列名可以写一个或者多个
			3.如果是全列名,可以省略不写
			4.如果值是数字类型的可以不加'',否则必须加上'' 或者 ""
	****删除一条记录
		delete from 表名;# 删除表中所有数据,不会重置自动增长值
		truncate table 表名;#删除表所有数据,先把表摧毁再重建
		delete from 表名 where 条件;# 这里条件和查询共用
		
	****修改一条记录
		update 表名 set 字段名=值,字段名=值;#表中所有记录的字段都修改了
		update 表名 set 字段名=值,字段名=值 where 条件;# 这里条件和查询共用
	
	3.DQL:操作数据库表中数据,对数据进行查询
	***基本查询:
		格式:
		select distinct * from 表名;//去重查询,去掉所有列重复值
        select distinct 字段1,字段2 from 表名;//去重查询,去掉列名字段1,字段2重复值
	***条件查询
		比较条件
			>,<,>=,<=,<>,=
			between xx and xx (含头行尾)
			in (值1,值2)
			like '_a%' 模糊查询
			is null ,is not null 判断空或者不空
		逻辑条件
			与 and
			或 or
			非 not
		

1、数据库的简介

(1)什么是数据库,就是一个文件系统,使用标准sql对数据库进行操作(crud)

 

(2)常见的数据库

* oracle:是oracle公司产品,是大型的收费的数据库

* MySQL : 在oracle收购之后6.x版本开始收费,之前的版本是免费的。

* SQLite:是小型的嵌入式数据库,应用在客户端开发中,比如安卓

 

(3)关系数据库:存储的是实体之间的关系

* 比如有购物网站,有用户,订单,商品,称为实体

* 用户、订单和商品之间的关系称为实体之间的关系

* 使用er图表示实体之间的关系

** 实体使用矩形、在实体上面属性使用椭圆,之间的关系使用菱形

 

2、mysql的安装和卸载

(1)安装mysql 5.x版本

5.5.62下载地址:https://dev.mysql.com/downloads/file/?id=480490

(2)mysql的安装步骤

 

(3)mysql的卸载

第一步,找到mysql的安装路径,找到一个文件my.ini文件找到两个路径,复制出来

basedir="C:/Program Files (x86)/MySQL/MySQL Server 5.5/"

datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"

第二步,打开控制面板,找到安装的mysql数据库,进行卸载

第三步,找到第一步复制出来的两个路径,把这两个路径的里面的所有的文件都删除

第四步,打开注册表 regedit,搜索mysql,找到了都删除

第五步,重新启动系统

 

3、mysql服务器的存储结构

(1)mysql服务器

* 服务器:从硬件上,服务器就是一台电脑;从软件上,在电脑上安装了服务器软件。

* mysql服务器:在一台电脑上,安装了mysql数据库,这台电脑称为mysql服务器。

(2)mysql服务器的存储结构

* 有多个数据库,在每个数据库里面有多个数据库表,在每个表里面有多条记录

* 学习重点:对数据库、数据库表、表中的记录的操作(crud操作)

 

4、sql语言简介

(1)数据库是文件系统,使用标准sql对数据库进行操作

* 标准sql,在mysql里面使用语句,在oracle、db2都可以使用这个语句

 

(2)什么是sql

* Structured Query Language, 结构化查询语言,对数据库进行操作

* sql非过程性语言,不需要依赖于其他的条件就可以运行

** 比如 在java里面

*** if(a > 5) {

System.out.....

    }

 

(3)sql的分类

第一类:DDL (数据定义语言)

* 创建数据库,创建数据库表

* 常用的语句 create

第二类:DML  (数据操纵语言)

* 对表中的记录进行增加 修改 删除操作

* 常用的语句 insert  update  delete

第三类:DCL (数据控制语言)

* 数据库的编程的语言

第四类:DQL (数据查询语言)

* 对表中的进行查询的操作

* 常用的语句 select

 

* 学习的主要内容:使用sql语言对数据库、数据库表、表中的记录进行增删改查(crud)操作

 

5、使用sql对数据库操作(了解)

(1)连接数据库

* 打开cmd窗口,使用命令,连接mysql数据库

* 命令: mysql -u root -p 密码

 

(2)创建数据库

* 语句: create database 数据库的名称;

** 示例:create database testdb1;

 

(3)查看所有的数据库

* 语句:show databases;

 

(4)删除数据库

* 语句:drop database 要删除的数据库的名称;

** 示例: drop database testdb1;

 

(5)切换数据库

* 如果想要创建一个数据库表,这个表要在一个数据库里面,所以需要切换到数据库

* 语句:use 要切换的数据库的名称;

** 示例:use testdb2;

 

6、使用sql对数据库表操作

(1)创建数据库表

* 语句 create table 表名称 (

字段 类型,

字段 类型

      )

 

* 创建表 user,字段  id  username  password  sex

create table user (

id int,

username varchar(40),

password varchar(40),

sex varchar(30)

)

(2)mysql的数据类型

字符串型

VARCHAR、CHAR

* 当创建表时候,使用字符串类型,name varchar(40),指定数据的长度

* varchar和char的区别

** varchar的长度是可变的,比如 name varchar(5),存值 a ,直接把a存进去

** char的长度是固定的,比如 name char(5),存值 b,把b存进去,后面加很多空格

 

大数据类型

BLOB、TEXT

* 使用这个类型可以存储文件,一般开发,不会直接把文件存到数据库里面,存文件的路径

 

数值型

TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE

* 对应java里面

byte       short    int  long    float  double

 

逻辑性

BIT

* 类似java里面的boolean

 

日期型

DATE:用于表示日期 1945-08-15

TIME:用于表示时间 19:10:40

 

下面的两个类型可以表示日期和时间

DATETIME:手动添加时间到数据表里面

TIMESTAMP:自动把时间添加到表里面

 

(3)查看表结构

* 语句 desc 表名称;

+----------+-------------+------+-----+---------+-------+

| Field    | Type        | Null | Key | Default | Extra |

+----------+-------------+------+-----+---------+-------+

| id       | int(11)     | YES  |     | NULL    |       |

| username | varchar(40) | YES  |     | NULL    |       |

| password | varchar(40) | YES  |     | NULL    |       |

| sex      | varchar(30) | YES  |     | NULL    |       |

+----------+-------------+------+-----+---------+-------+

 

(4)mysql的约束有三种

第一种,非空约束 not null

* 表示数据不能为空

 

第二种,唯一性约束 unique

* 表中的记录不能重复的

 

第三种,主键约束 primary key

* 表示非空,唯一性

* 自动增长 auto_increment

 

(5)创建带约束的表

create table person (

id int primary key ,

username varchar(40) not null,

sex varchar(20)

)

 

+----------+-------------+------+-----+---------+-------+

| Field    | Type        | Null | Key | Default | Extra |

+----------+-------------+------+-----+---------+-------+

| id       | int(11)     | NO   | PRI | NULL    |       |

| username | varchar(40) | NO   |     | NULL    |       |

| sex      | varchar(20) | YES  |     | NULL    |       |

+----------+-------------+------+-----+---------+-------+

 

(6)删除表

* 语句 drop table 要删除表的名称;

 

(7)查看当前的数据库里面有哪些表

* 语句 show tables;

 

7、使用sql对表中的记录进行操作(增删改查操作)

(1)向表里面添加记录 insert

* 语句 insert into 要添加的表名称 values(要添加的值);

* 注意:当添加的字段的数据类型是int类型,直接写值

如果添加的字段的类型是varchar类型和日期类型,使用单引号把值包起来

 

* 练习:向user表里面添加记录

insert into user values(1,'aaa','123456','nan');

 

* 自动增长的效果

** 创建一个表

create table stu (
id int primary key auto_increment,
sname varchar(40)
);

insert into stu values(null,'aaa');

insert into stu values(null,'aaa');

 

(2)修改表里面的记录 update

* 语句 update 表名称 set 要修改的字段的名称1=修改的值1,要修改的字段的名称2=修改的值2 where 条件

 

* 练习:修改user表里面id=1的username修改为QQQ,修改password为999

update user set username='QQQ',password='999' where id=1;

 

(3)删除表里面的记录 delete

* 语句 delete from 表名称 where 条件

 

* 练习:删除user表里面id=1的记录

delete from user where id=1;

** 不添加where条件,把表里面的所有的记录都删除

 

(4)查询表中的记录 select

* 语句 select 要查询的字段的名称 (*) from 表名称 where 条件

create table user (

id int,

username varchar(40),

chinese int,

english int

);



insert into user values(1,'lucy',100,30);

insert into user values(2,'mary',60,80);

insert into user values(3,'jack',90,20);

* 练习一:查询user表里面的所有的数据

select * from user;

 

* 练习二:查询user表里面用户名和语文成绩

select username,chinese from user;

 

* 练习三:查询user表里面id=2的数据

select * from user where id=2;

 

(4)别名

* as 别名

select username as u1,chinese as c1 from user;

 

(5)distinct,查询的时候去除表里面重复记录

* 语句 select distinct * from 表名;

select distinct * from user;

 

(6)where子句

第一,运算符 < > >= <=

* 练习:查询user表里面语文成绩大于60的所有的人员

select * from user where chinese != 60;

 

第二,in:在范围内(子查询:指的是小括号里的值)

* 练习:查询user表里面英语成绩是80、90的人员的信息

select * from user where english in (80,90,100, 30, 50);

 

第三,and:在where里面如果有多个条件,表示多个条件同时满足

* 练习:查询user表里面语文成绩是100,并且英语成绩是30的人员的信息

select * from user where chinese=100 and english=30;

 

第四,得到区间范围的值

* 练习:查询user表里面语文成绩在70-100之间的值

写法一,select * from user where chinese >=70 and chinese <=100;

写法二,select * from user where chinese between 70 and 100;

 

第五,like:模糊查询

* 练习:查询user表里面username包含a的人员信息

select * from user where username like '%m%';

 

(7)查看当前的运行的数据库

select database();

 

(8)对表中查询的记录排序 order by

* order by写在select语句的最后

第一,升序 order by 要排序字段 asc(asc可以省略,默认的情况下就是升序)

* 练习:对user表里面查询的数据,根据语文成绩进行升序排列

select * from user order by chinese asc;

 

第二,降序 order by 要排序字段 desc

* 练习:对user表里面的英语成绩进行降序排列

select * from user order by english desc;

 

 

8、聚集函数

(1)使用提供一些函数,直接实现某些功能

(2)常用的聚集函数

第一,count()函数

* 根据查询的结果,统计记录数

* 写法 select count(*) from ...where....

 

* 练习一;查询user表里面有多少条记录

select count(*) from user;

 

* 练习二:查询user表里面语文成绩大于60的人员有多少

select count(*) from user where chinese>60;

 

第二,sum()函数

* 求和的函数

* 写法 select sum(要进行求和字段) from ...where....

 

* 练习一:得到user表里面的语文的总成绩

select sum(chinese) from user;

 

* 练习二:得到user表里面语文总成绩,英语的总成绩

select sum(chinese),sum(english) from user;

 

* 练习三:得到user表里面语文成绩的平均分(总的成绩/总的人数)

 select sum(chinese)/count(*) from user;

 

第三,avg()函数

* 计算的平均数的函数

* 写法 select avg(要计算平均数的字段名称) from ...

 

* 练习:得到user表里面语文成绩的平均分

select avg(chinese) from user;

 

第四,max()函数:计算最大值

* 写法 select max(字段) from...

 

第五,min()函数:计算最小值

* 写法 select min(字段) from...

 

* 练习:得到user表里面语文成绩的最高分数,英语的成绩最低分数

select max(chinese),min(english) from user;

 

9、分组操作:分类统计

分组使用 group by 根据分组的字段

在分组的基础之上再进行条件的判断 having,后面可以写聚集函数

(1)举例说明

* 创建表 orders

create table orders (

id int,

name varchar(40),

price int

);



insert into orders values(1,'电视',2000);

//报错:Incorrect string value: '\xB5\xE7\xCA\xD3' for column 'name' at row 1

//出现这个错误的原因是,数据库的编码格式为latin1 而我要将utf8的中文插入到数据库中。

//下面就是更改列的编码即可

alter table orders change orders name varchar(40) character utf8;

set name gbk;

insert into orders values(2,'电视',2000);

insert into orders values(2,'电',2000);



insert into orders values(3,'苹果',10);

insert into orders values(4,'手机',500);

insert into orders values(5,'手机',500);

insert into orders values(6,'鼠标',33);

insert into orders values(7,'鼠标',33);



(2)练习一:统计orders表里面每类商品的总的价格

select name,sum(price) from orders group by name;



(3)练习二:对商品进行分类,得到每类商品的总价格大于66的商品

select name,sum(price) from orders where sum(price)>66 group by name;

= 上面的语句在逻辑上没有问题,在语法上,where里面不能写聚集函数,报错

正确的写法:

select name,sum(price) from orders group by price having sum(price)>66;

10、mysql的可视化工具使用

(1)使用工具创建数据库,创建表,向表添加记录,删除表中的记录

 

11、mysql的关键字limit

(1)limit关键字查询表中的某几条记录

(2)limit关键字不是标准sql的关键字,只能在mysql数据库里面使用,实现分页的功能

* 在oracle里面特有关键字 rownum

* 在sqlserver里面特有关键字 top

 

(3)使用limit查询前几条记录

* 写法: limit 前几条记录  limit 3

* 练习:查询user表里面前三条记录

select * from user limit 3;

select * from user limit 0,3;

 

(4)使用limit查询第几条到第几条记录

* 写法: limit 第一个参数,第二个参数

** 第一个参数开始的记录数的位置,从0开始的

** 第二个参数从开始的位置向后获取几条记录

* 练习:查询user表里面第二条到第四条记录

select * from user limit 1,3;

 

11、重置修改mysql的root密码

(1)知道密码,修改密码

第一,连接mysql数据库

mysql -u root -p

第二,切换数据库

use mysql;

第三,进行密码的修改 update user set password=password('要修改成的密码的值') where user='root';

update user set password=123 where user='root';

MySQL 5.7修改密码提示 Unknown column 'password' in 'field list'

错误原因:mysql数据库下已经没有password这个字段了,password字段改成了authentication_string。

update mysql.user set authentication_string=PASSWORD('password') where user='root';

update mysql.user set authentication_string=password('123') where user='root';
flush privileges;
exit;

第四,重新启动mysql服务

net stop mysql
net start mysql

运行net start mysql 命令时,提示发生系统错误5,拒绝访问

问题可能是由于您没有使用管理员身份运行cmd导致的,建议您这样尝试:

按Windows+X+A,直接打开命令提示过(管理员),再次输入确认问题

(2)忘记密码,重置密码

第一,打开cmd窗口,把mysql的服务关  net stop mysql

第二,打开cmd窗口,输入命令 mysqld --skip-grant-tables(不要加分号)

第三,再打开新的cmd窗口,连接数据库,不需要输入密码  mysql -u root

第四,切换数据库 mysql  use mysql

第五,进行密码的修改 update user set password=password('要修改成的密码的值') where user='root';

update mysql.user set authentication_string=password('123') where user='root';  //mysql5.7以上

第六,把两个cmd窗口都关闭,打开任务管理器,找到mysqld进程,结束进程

第七,启动mysql服务  net start mysql

skip-grant-tables 绕过授权认证方式2:

修改E:\app\MySQL\MySQL Server 5.7 安装目录下的my.nin文件,找到[mysqld],在[mysqld]下输入“skip-grant-tables”,

[mysql]
no-beep
skip-grant-tables

打开新的cmd窗口,连接数据库,不需要输入密码  mysql -u root

进行密码的修改 update mysql.user set authentication_string=password('123') where user='root';

之后,记得注释掉my.ini中的skip-grant-tables。

[mysql]
no-beep
# skip-grant-tables
# default-character-set=

最后,操作完后重新启动mysql服务

修改密码后登录出现localhost is not allowed

ERROR 1130 (HY000): Host 'localhost' is not allowed to connect to this MySQL server

 出现这个问题的原因是系统升级的补丁,禁止任何 IP 连接本机。

     找到mysql 的安装目录,不要在navicate 的快捷方式上单击右键,那样找到的不是MYSQL 数据库的目录,在【程序】列表中找到路径。

     定位到\MySQL\MySQL Server 5.5\my.ini  ,打开文件,找到 [mysqld]这一行,在这行下面加入跳过连接数据库验证命令:

[mysqld]
skip-grant-tables
# The TCP/IP Port the MySQL Server will listen on
port=3306

然后重启mysql 服务

net stop mysql
net start mysql

在 【所有程序】列表里面找到 MYSQL----》MYSQL SERVER5.0-----》MySQL Command Line Client,双击打开。

      Enter password:   随便输入密码都可以通过验证。

输入如下指令:

use  mysql;

select host,user from user;         //查询USER  表中主机ip ;
     
delete from user where  host='localhost';        //必须进行这一步删掉已前不能登录的帐户。

flush  privileges;
//重新授权帐户,帐户root 密码123
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '123' WITH GRANT OPTION;                                                        
flush  privileges;

最后去掉  my.ini 文件中  [ mysqld ]  加的的命令

[mysqld]
# skip-grant-tables
# The TCP/IP Port the MySQL Server will listen on
port=3306

 ,并重启MYSQL服务。

net stop mysql
net start mysql

登录成功:

参考: https://blog.csdn.net/QWUIOP123/article/details/52280156

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值