MySQL自认详细教程

一, MySQL下载安装与配置教

1.点击"MySQL下载地址"进入官网,按下面红框操作
在这里插入图片描述
2.往下拉找到"MySQL Community (GPL) Downloads »“点击
在这里插入图片描述
3.找到"MySQL Community Server"点击在这里插入图片描述
4.选择自己电脑的系统,再往下选择第一个download免安装版本下载。
在这里插入图片描述
5.之后选择no thanks , just start my download.
在这里插入图片描述
5.下载压缩文件后加压到你选择的目录下(目录最好不要带中文)
6.初始化
首先建立个data文件夹和bin文件夹同目录
找到mysql解压目录\bin的绝对路径。
例如:我的"F:\s1\mysql-8.0.20-winx64\mysql-8.0.20-winx64\bin”
cmd+r打开命令提示符点击进入,输入mysql解压目录\bin的绝对路径+mysql --initialize-insecure
例如我的:”F:\s1\mysql-8.0.20-winx64\mysql-8.0.20-winx64\bin\mysql --initialize-insecure"(写的时候无引号)
7.之后打开环境变量的Path变量进行编辑,增加一个变量值,值为mysql解压目录\bin的绝对路径.
【右键计算机】–》【属性】–》【高级系统设置】–》【高级】–》【环境变量】–》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【将MySQL的bin目录路径追加到变值值中,用 ; 分割】

8,建立MySQL服务
(1)、以管理员身份运行命令提示符
(2)、安装服务”F:\s1\mysql-8.0.20-winx64\mysql-8.0.20-winx64\bin\mysql.exe" --install 或mysqld --install
(3)、”F:\s1\mysql-8.0.20-winx64\mysql-8.0.20-winx64\bin\mysql.exe" --remove
安装成功后会在服务中找到MySQL服务
在这里插入图片描述
9.启动服务
1.直接点击MySQL服务中的启动
2.或在终端输入 net start MySQL
10.关闭服务
1.直接点击MySQL服务中的停止
2.或在终端输入 net stop MySQL

二, 数据库的链接和登陆

mysqld代表服务器端
mysql代表客户端

1.启动服务器端

1.F:\s1\mysql-8.0.20-winx64\mysql-8.0.20-winx64\bin\mysqld;
2.net start mysql

2.客户端链接

mysql -u root -p
Enter password:
在这里插入图片描述

三, 用户管理

1.创建用户

固定id登陆
create user '用户名'@'ip地址' identified by '密码';
任意id登陆
create user '用户名'@'%' identified by '密码';

2.删除用户

drop user '用户名'@'id地址'; 

3.修改用户

  mysql -u root -p  
  Enter password:***  
  mysql> use mysql;          --选择数据库--
  Database changed  
  mysql> update user set user="新用户名" where user="root";    
  --将用户名为root的改为新用户名--  
  mysql> flush privileges;    --刷新权限--  
  mysql> exit

4.修改密码

一下几种方法我在用的时候都会报错

使用win+R 输入CMD进入dos界面。进入你的mysql安装路径下面的bin文件家里面;

先使用:mysql -u root -p 输入密码进入mysql命令窗口mysql>:
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘123456’;

方法1: 用SET PASSWORD命令
首先登录MySQL。
格式:mysql> set password for 用户名@localhost = password(‘新密码’);
例子:mysql> set password for root@localhost = password(‘123456’);


方法2:用mysqladmin
格式:mysqladmin -u用户名 -p旧密码 password 新密码
例子:mysqladmin -uroot -p123456 password 123


**方法3:用UPDATE直接编辑user表** 首先登录MySQL。 mysql> use mysql; mysql> update user set password=password('123') where user='root' and host='localhost'; mysql> flush privileges;
**方法4:在忘记root密码的时候,可以这样** 以windows为例: 1. 关闭正在运行的MySQL服务。 2. 打开DOS窗口,转到mysql\bin目录。 3. 输入mysqld --skip-grant-tables 回车。--skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。 4. 再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysql\bin目录。 5. 输入mysql回车,如果成功,将出现MySQL提示符 >。 6. 连接权限数据库: use mysql; 。 6. 改密码:update user set password=password("123") where user="root";(别忘了最后加分号) 。 7. 刷新权限(必须步骤):flush privileges; 。 8. 退出 quit。 9. 注销系统,再进入,使用用户名root和刚才设置的新密码123登录。

注意:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)

5.查看所有用户

select user,host from mysql.user;

1.user表结构

在这里插入图片描述

2. 解析

(root,%),表示可以远程登录,并且是除服务器外的其他任何终端

(root,localhost),表示可以本地登录,即可以在服务器上登陆

(root,127.0.0.1 ),表示可以本机登陆,即可以在服务器上登陆

(root,sv01),表示主机名为sv1可以登陆,sv01具体指的哪台机器,可以在cat /etc/hosts查看

(root,::1) ,表示本机可以登陆, 看密码都是相同嘛,具体::1代表意义,待查


Select_priv。确定用户是否可以通过SELECT命令选择数据。

Insert_priv。确定用户是否可以通过INSERT命令插入数据。

Update_priv。确定用户是否可以通过UPDATE命令修改现有数据。

Delete_priv。确定用户是否可以通过DELETE命令删除现有数据。

Create_priv。确定用户是否可以创建新的数据库和表。

Drop_priv。确定用户是否可以删除现有数据库和表。

Reload_priv。确定用户是否可以执行刷新和重新加载MySQL所用各种内部缓存的特定命令,包括日志、权限、主机、查询和表。

Shutdown_priv。确定用户是否可以关闭MySQL服务器。在将此权限提供给root账户之外的任何用户时,都应当非常谨慎。

Process_priv。确定用户是否可以通过SHOW PROCESSLIST命令查看其他用户的进程。

File_priv。确定用户是否可以执行SELECT INTO OUTFILE和LOAD DATA INFILE命令。

Grant_priv。确定用户是否可以将已经授予给该用户自己的权限再授予其他用户。例如,如果用户可以插入、选择和删除foo数据库中的信息,并且授予了GRANT权限,则该用户就可以将其任何或全部权限授予系统中的任何其他用户。

References_priv。目前只是某些未来功能的占位符;现在没有作用。

Index_priv。确定用户是否可以创建和删除表索引。

Alter_priv。确定用户是否可以重命名和修改表结构。

Show_db_priv。确定用户是否可以查看服务器上所有数据库的名字,包括用户拥有足够访问权限的数据库。可以考虑对所有用户禁用这个权限,除非有特别不可抗拒的原因。

Super_priv。确定用户是否可以执行某些强大的管理功能,例如通过KILL命令删除用户进程,使用SET


GLOBAL修改全局MySQL变量,执行关于复制和日志的各种命令。

Create_tmp_table_priv。确定用户是否可以创建临时表。

Lock_tables_priv。确定用户是否可以使用LOCK TABLES命令阻止对表的访问/修改。

Execute_priv。确定用户是否可以执行存储过程。此权限只在MySQL 5.0及更高版本中有意义。

Repl_slave_priv。确定用户是否可以读取用于维护复制数据库环境的二进制日志文件。此用户位于主系统中,有利于主机和客户机之间的通信。

Repl_client_priv。确定用户是否可以确定复制从服务器和主服务器的位置。

Create_view_priv。确定用户是否可以创建视图。此权限只在MySQL 5.0及更高版本中有意义。关于视图的更多信息,参见第34章。

Show_view_priv。确定用户是否可以查看视图或了解视图如何执行。此权限只在MySQL 5.0及更高版本中有意义。关于视图的更多信息,参见第34章。

Create_routine_priv。确定用户是否可以更改或放弃存储过程和函数。此权限是在MySQL 5.0中引入的。

Alter_routine_priv。确定用户是否可以修改或删除存储函数及函数。此权限是在MySQL 5.0中引入的。

Create_user_priv。确定用户是否可以执行CREATE USER命令,这个命令用于创建新的MySQL账户。

Event_priv。确定用户能否创建、修改和删除事件。这个权限是MySQL 5.1.6新增的。

Trigger_priv。确定用户能否创建和删除触发器,这个权限是MySQL 5.1.6新增的。

四,授权管理

show grants for '用户'@'IP地址'                  -- 查看权限
grant  权限 on 数据库.表 to   '用户'@'IP地址'      -- 授权
revoke 权限 on 数据库.from '用户'@'IP地址'      -- 取消权限
权限:
    增 insert      改update
    删 delete	   查select
 对于目标数据库以及内部其他:   
        数据库名.*           数据库中的所有表
        数据库名.表          指定数据库中的某张表
        数据库名.存储过程     指定数据库中的存储过程
        *.*                              所有数据库,所有表

详细授权

1.忘记密码

mysql密码是动态md5加密,是不可逆向查询的,所以你查看不了密码只能修改

# 启动免授权服务端
mysqld --skip-grant-tables

# 客户端
mysql -u root -p

# 修改用户名密码
update mysql.user set authentication_string=password('666') where user='root';
flush privileges;
	flush privileges,将数据读取到内存中,从而立即生效。

五,数据类型

MySQL的数据类型大致分为:数值、时间和字符串

1.数值

 bit[(M)]
            二进制位(101001),m表示二进制位的长度(1-64),默认m=1

        tinyint[(m)] [unsigned] [zerofill]

            小整数,数据类型用于保存一些范围的整数数值范围:
            有符号:
                -128127.
            无符号:
                0255

            特别的: MySQL中无布尔值,使用tinyint(1)构造。

        int[(m)][unsigned][zerofill]

            整数,数据类型用于保存一些范围的整数数值范围:
                有符号:
                    -21474836482147483647
                无符号:
                    04294967295

            特别的:整数类型中的m仅用于显示,对存储范围无限制。例如: int(5),当插入数据2时,select 时数据显示为: 00002

        bigint[(m)][unsigned][zerofill]
            大整数,数据类型用于保存一些范围的整数数值范围:
                有符号:
                    -92233720368547758089223372036854775807
                无符号:
                    018446744073709551615

        decimal[(m[,d])] [unsigned] [zerofill]
            准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。

            特别的:对于精确数值计算时需要用此类型
                   decaimal能够存储精确值的原因在于其内部按照字符串存储。

        FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
            单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。
                无符号:
                    -3.402823466E+38 to -1.175494351E-38,
                    0
                    1.175494351E-38 to 3.402823466E+38
                有符号:
                    0
                    1.175494351E-38 to 3.402823466E+38

            **** 数值越大,越不准确 ****

        DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
            双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。

                无符号:
                    -1.7976931348623157E+308 to -2.2250738585072014E-308
                    0
                    2.2250738585072014E-308 to 1.7976931348623157E+308
                有符号:
                    0
                    2.2250738585072014E-308 to 1.7976931348623157E+308
            **** 数值越大,越不准确 ****

2.字符串

    char (m)
            char数据类型用于表示固定长度的字符串,可以包含最多达255个字符。其中m代表字符串的长度。
            PS: 即使数据小于m长度,也会占用m长度
        varchar(m)
            varchars数据类型用于变长的字符串,可以包含最多达255个字符。其中m代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。

            注:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡

        text
            text数据类型用于保存变长的大字符串,可以组多到65535 (2**161)个字符。

        mediumtext
            A TEXT column with a maximum length of 16,777,215 (2**241) characters.

        longtext
            A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**321) characters.


3.时间

   DATE
            YYYY-MM-DD(1000-01-01/9999-12-31TIME
            HH:MM:SS('-838:59:59'/'838:59:59'YEAR
            YYYY(1901/2155DATETIME

            YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59    Y)

        TIMESTAMP

            YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)

4.枚举

  enum
            枚举类型,
            An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.)
            示例:
                CREATE TABLE shirts (
                    name VARCHAR(40),
                    size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
                );
                INSERT INTO sh
注意:枚举适用于值不经常改动,且有限;
	size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
	在添加size值的时候只能选择上面其中一个

5.集合

 set
            集合类型
            A SET column can have a maximum of 64 distinct members.
            示例:
                CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));
                INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');

注意:与枚举不同的是集合再添加元素的时候可以是多个

六,数据库的相关操作

1、显示数据库


SHOW DATABASES;或show databases;
		默认数据库:
			  mysql - 用户权限相关数据
			  test - 用于用户测试数据
			  information_schema - MySQL本身架构相关数据

2、创建数据库

CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8;
例如:
CREATE DATABASE db1 DEFAULT CHARSET utf8;
#创建了db1数据库

3、使用数据库

use 数据库名
例如:
use db1

4.显示当前使用的数据库中所有表:

SHOW TABLES;

七,表的基本操作

1.查看数据表

select * from t1;
注意:你需要先进入该表的数据库; ----》use 数据库名;

2.创建表单

create table 表名(
    列名  类型  是否可以为空,
    列名  类型  是否可以为空
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
#ENGINE=InnoDB#引擎,回滚
#DEFAULT CHARSET=utf8#默认字符编码
#unsigneded #无符号整型
#not null#不为空
#auto_increment#自动填充
#primary key#主键,加约束,确定该数据的唯一性一般用于id

**完整的建表:**
create table class(
cid int signed not null auto_increment primary key,
caption varchar(32)
)engine=innodb default charset=utf8

**不完整的建表**
例如:
不能填充中文
create table t1(id int signed not null auto_increment primary key,name char(10));


注意:1、对于自增列,必须是索引(含主键)。
    2、对于自增可以设置步长和起始值
    会话级别
        show session variables like 'auto_inc%';
        set session auto_increment_increment=2;
        set session auto_increment_offset=10;
	全局级别
        shwo global  variables like 'auto_inc%';
        set global auto_increment_increment=2;
        set global auto_increment_offset=10;

3.增加表内容


#增加一行的值
insert into(列名,列名...) values (,,...);
#增加两行的值
insert into(列名,列名...) values (,,...),(,,...);
#将另一个表的值复制过来
insert into(列名,列名...) select (列名,列名...) from;

易错点:

记住 values (值,值,值...)中的值如果是字符集要带双引号;
而数字就不需要

4.清空表

	#删除表整个的内容如果在增加内容后id接着删除之前最后一个id增加
	delete from 表;
	#按条件删除表的内容
	delete from 表 where id=1 and name='alex';
	#删除表整个的内容如果在增加内容后id重新加载从1开始
	truncate table 表名;

5.删除表

drop table 表名;

6.其他

a、条件
    select * fromwhere id > 1 and name != 'alex' and num = 12;
 
    select * fromwhere id between 5 and 16;
 
    select * fromwhere id in (11,22,33)
    select * fromwhere id not in (11,22,33)
    
	如果id=nid则显示
    select * fromwhere id in (select nid from)
 
b、通配符
    select * fromwhere name like 'ale%'  - ale开头的所有(多个字符串)
    select * fromwhere name like 'ale_'  - ale开头的所有(一个字符)
 
c、限制
    select * from 表 limit 5;            -5select * from 表 limit 4,5;          - 从第4行开始的5select * from 表 limit 5 offset 4    - 从第4行开始的5行
 
d、排序
    select * from 表 order by 列 asc              - 根据 “列” 从小到大排列
    select * from 表 order by 列 desc             - 根据 “列” 从大到小排列
    select * from 表 order by 列1 desc,2 asc    - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序
 
e、分组
为什么要分组?
因为:在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
    select num fromgroup by num
    select num,nid fromgroup by num,nid
    
8.0之前版本分组之后才可以进行排序
    select num,nid fromwhere nid > 10 group by num,nid order nid desc
8.0之后
		select max(tid),tname,count(tname) from st1 group by tname order by max(tid) desc;
		
    select num,nid,count(*),sum(score),max(score),min(score) fromgroup by num,nid
    
函数条件的使用
    select num fromgroup by num having max(id) > 10
 
    特别的:group by 必须在where之后,order by之前
    
    在分组之后使用过上面的函数
    where,order by 的条件和列不能是唯一标识,例如id
 
f、连表
    无对应关系则不显示
    select A.num, A.name, B.name
    from A,B
    Where A.nid = B.nid
 
    无对应关系则不显示
    select A.num, A.name, B.name
    from A inner join B
    on A.nid = B.nid
 
    A表所有显示,如果B中无对应关系,则值为null
    select A.num, A.name, B.name
    from A left join B
    on A.nid = B.nid
 
    B表所有显示,如果B中无对应关系,则值为null
    select A.num, A.name, B.name
    from A right join B
    on A.nid = B.nid
 
g、组合
    组合,自动处理重合
    select nickname
    from A
    union
    select name
    from B
 
    组合,不处理重合
    select nickname
    from A
    union all
    select name
    from B

八,主键,外键,唯一索引

1.主键

主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。
            create table tb1(
                nid int not null auto_increment primary key,
                num int null
            );
            或
            create table tb1(
                nid int not null,
                num int not null,
                primary key(nid,num)
            );
复制代码

2.外键

外键,一个特殊的索引,只能是指定内容
            creat table color(
                nid int not null primary key,
                name char(16) not null
            );
             creat table teacher(
                tid int not null primary key,
                tname char(16) not null
            );

            create table fruit(
                nid int not null primary key,
                smt char(32) null ,
                color_id int not null,
                teacher_id int not null,
                constraint fk_cc foreign key (color_id) references color(nid),
                 constraint fk_cc foreign key (teacher_id) references teacher(tid)
                
            );

注意:在操作需要先建立两张表,再插入内容

3.索引

唯一索引:约束不能为空,加速查找(可以为空)
主键:约束不能为空,加速查找(不可以为空)

(1).唯一索引

create table t1(id int signed not null auto_increment primary,
name_id int,
unique uql(name_id));
unique uql(name_id));保证了name_id不能重复

(2).联合索引

create table t1(id int signed not null auto_increment primary,
name_id int,
xx int,
unique uql(name_id,xx));
name_id和xx联合索引
name_id,xx出现过一次不能出现第二次
例如:name_id=1,xx=1
则不能在同时让name_id,xx=1
但是可以name_id=1,xx=3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值