MySQL-mysql基础

1 MySql介绍

关系型数据库(数据之间约束和依赖多):sqllite,db2,oracle,access,sql server MySQL

非关系型数据库(数据之间约束和依赖少):MongoDB,redis

  单机程序(自己DB数据库)
  联机程序(公用DB数据库)

1.MySQL:是用于管理文件的一个软件

  • 服务端软件

    • socket服务端
    • 本地文件操作
    • 解析指令【SQL语句】
  • 客户端软件(各种各样)

    • socket客户端
    • 发送指令
    • 解析指令【SQL语句】

    PS:

    • DBMS数据库管理系统
    • SQL语句

2.在数据库中: 文件夹->数据库
    db文件->数据表
    文件中的数据->数据行

2 MySQL的安装

第一步:去官网下载安装(重点)第二步:先解压,然后在mysql下创建一个data空文件夹。
第二步:打开终端进行mysql服务器初始化,如下:
在这里插入图片描述
然后就发现,第一步创建的空data文件夹有东西了。(并且会自动创建一个用户:用户名: root 密码:空)
第三步:启动服务端:

F:\mysql\mysql-8.0.25-winx64\bin>mysqld

第四步:客户端连接:

F:\mysql\mysql-8.0.25-winx64\bin>mysql -u root -p

在这里插入图片描述
之后就可以用SQL语句操作了。

为了后续方便,进行进一步配置:
第一步:环境变量的配置。
在path(环境变量里面)加上mysql路径(/bin)。
在这里插入图片描述
后续启动就方便了!
在这里插入图片描述
第二步:配置windows服务,为了进一步启动方便!
以管理员身份启动cmd终端,执行以下命令,出现Service successfully installed.表示配置完成。

"F:\mysql\mysql-8.0.25-winx64\bin\mysqld" --install # 安装

"F:\mysql\mysql-8.0.25-winx64\bin\mysqld" --remove  # 移除

启动数据库net start mysql
停止服务器net stop mysql
在这里插入图片描述

3 MySQL连接

概念:
文件夹【数据库】
文件【数据表】
每一行数据【数据行】
每一行数据【数据行】
连接:
默认:用户root

#查看有多少文件夹:
show databases;

进入指定文件夹:
use 数据库名称;

查看数据表:
show tables;

查看数据表中指定数据:
select * from 表名;
select name,age,id from 表名;

例如: mysql数据库中的user表
use mysql;
select user,host from user;
在这里插入图片描述

3.1 用户的创建和授权

创建用户:

select user,host from mysql.user;
#如下创建可在指定IP的电脑上登录的用户,电脑IP为192.168.1.1(加%和*是一个含义,该位无限制,即所有数字) 用户名为alex 密码为123123
create user 'alex'@'192.168.1.1' identified by '123123';
create user 'alex'@'192.168.1.%' identified by '123123';
create user 'alex'@'%' identified by '123123';

授权:

1.查看权限
show grants for ‘用户’@‘IP地址’;
2.授权
grant 权限 on 数据库.to '用户'@'IP地址';
grant select on django.user to 'hokwok'@'%';
3.删除权限
revoke 权限 on 数据库.from '用户'@'IP地址';

#授指定权限给指定用户
  grant 指定权限 on 指定文件 to '用户'
  grant select,insert,update  on db1.t1 to 'alex'@'%'; #alex在任何电脑可对db1下的t1进行 select,insert,update操作
  grant all privileges  on db1.t1 to 'alex'@'%'; # alex在任何电脑可对db1下的t1进行所有权限,但不能授权。授权只有root才能
  revoke all privileges on db1.t1 from 'alex'@'%';# 删除alex在任何电脑可对db1下的t1进行的所有权限

用户名@IP地址 用户只能在该IP下才能访问
用户名@192.168.1.% 用户只能在该IP段下才能访问(通配符%表示任意)
用户名@% 用户可以再任意电脑IP下访问(默认IP地址为%)

附录:可设置所有权限

all privilegesgrant外的所有权限
           select          仅查权限
           select,insert   查和插入权限
           ...
           usage                   无访问权限
           alter                   使用alter table
           alter routine           使用alter proceduredrop procedure
           create                  使用create table
           create routine          使用create procedure
           create temporary tables 使用create temporary tables
           create user             使用create userdrop userrename userrevoke  all privileges
           create view             使用create view
           delete                  使用delete
           drop                    使用drop table
           execute                 使用call和存储过程
           file                    使用select into outfileload data infile
           grant option            使用grantrevoke
           index                   使用index
           insert                  使用insert
           lock tables             使用lock table
           process                 使用show full processlist
           select                  使用select
           show databases          使用show databases
           show view               使用show view
           update                  使用update
           reload                  使用flush
           shutdown                使用mysqladmin shutdown(关闭MySQL)
           super                   􏱂􏰈使用change master、kill、logs、purge、master和set global。还允许mysqladmin􏵗􏵘􏲊􏲋调试登陆
           replication client      服务器位置的访问
           replication slave       由复制从属使用

对于目标数据库以及内部其他:
  数据库名.*   数据库中的所有
  数据库名.表  指定数据库中的某张表
  数据库名.存储过程   指定数据库中的存储过程
     .     所有数据库

例如:创建用户并指定权限
在这里插入图片描述
alex连接服务端
在这里插入图片描述

3.2 用户管理操作

1.查看用户
select user,host from mysql.user;
2.创建用户
create user '用户名'@'IP地址'  identified by '密码';
create user 'haitao'@'%' identifiede by '123' # 创建了一个haitao的用户名,且所有的ip都能登录
3.删除用户
drop user '用户名'@'IP地址'
4.修改用户名称
rename user '用户名'@'地址' to '新用户名'
5.修改密码
set password for '用户名'@'地址' = Password(密码)

3.3 数据库(文件夹)基本操作

文件夹没有修改(可以干掉重来)
1、显示数据库

show databases;

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

2.创建数据库

create database 数据库名称;
# ugf-8
create database 数据库名称 default charset utf8;(设置utf8编码,方便后续插入中文内容)
# gbk
create database 数据库名称 default charset gbk;

通过在my.ini文件中设置,可以默认创建字符编码utf8的数据库
3.使用数据库

use 数据库名称;
use django;

4.删除数据库

drop database 数据库名称;
drop database django;

3.4 数据表(文件)基本操作

1.创建表

create table 表名(
	列名 类型 是否可为空,
  列名 类型 是否可为空
)engine=innodb default charest=utf8;(设置utf8编码,方便后续插入中文内容)

默认创建的表为utf8,所以后面的engine=innodb default charest=utf8可省略。
(1)是否可为空

not null     --不可空
null         --可空

(2)默认值

默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值
    create table tb1(
        nid int not null defalut 2,
        num int not null
    )

(3)引擎(帮助我们做所有操作的发动机,保障数据安全)
mysql-5.1版本之前默认引擎是MyISAM,之后是innoDB
首先是如何查看自己使用的是哪个存储引擎, 可以通过命令show variables like ’storage_engine’;

关系:
  MyISAM是非集聚引擎,支持全文索引;不支持事务;它是表级锁;会保存表的具体行数.
  innoDB是集聚引擎,5.6以后才有全文索引;支持事务;它是行级锁;不会保存表的具体行数.
  一般:不用事务的时候,count计算多的时候适合myisam引擎。对可靠性要求高就是用innodby引擎。

查看:
看你的mysql现在已提供什么存储引擎:
mysql> show engines;

看你的mysql当前默认的存储引擎:
mysql> show variables like ‘%storage_engine%’;

你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):
mysql> show create table 表名;

(4)设置自增

create table tb1(
    nid int not null auto_increment primary key,
    num int null
);
  
或者
create table tb1(
    nid int not null auto_increment,
    num int null,
    index(nid)
);
或者
create table tb1(
	nid int not null auto_increment,
	num int null,
	primary key(nid)
);
 
 注意:auto_increment表示自增;
 primary key表示 约束(不能重复也不能为空),加速查找
 1、对于自增列,必须是索引(含主键)。
    2、对于自增可以设置步长和起始值
    
    	当前会话级别(针对当前用户)
      show session variables like 'auto_inc%';
      set session auto_increment_increment=2;
      set session auto_increment_offset=10;
			全局变量(针对所有表格)
      show global  variables like 'auto_inc%';
      set global auto_increment_increment=2;
      set global auto_increment_offset=10;

(5)主键
目的: 约束(不能重复且不能为空); 加速查找

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

(6)外键
在这里插入图片描述
基本概念:
1、MySQL中“键”和“索引”的定义相同,所以外键和主键一样也是索引的一种。不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引。用于外键关系的字段必须在所有的参照表中进行明确地索引,InnoDB不能自动地创建索引。

2、外键可以是一对一的,一个表的记录只能与另一个表的一条记录连接,或者是一对多的,一个表的记录与另一个表的多条记录连接。

3、如果需要更好的性能,并且不需要完整性检查,可以选择使用MyISAM表类型,如果想要在MySQL中根据参照完整性来建立表并且希望在此基础上保持良好的性能,最好选择表结构为innoDB类型。

4、外键的使用条件

① 两个表必须是InnoDB表,MyISAM表暂时不支持外键

② 外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显式建立;

③ 外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;

5、外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作。

create table department(
	id bigint auto_increment primary key,
	title char(15)
);


create table userinfo(
	uid bigint auto_increment primary key,
	name varchar(32),
	department_id int,
	xx_id int,
	constraint fk_user_depar foreign key (department_id) references department(id)
);

2.清空和删除表

清空表:
delete from 数据表名     #再次插入数据,主键的自增从删除的接着开始
truncate table 数据表名  #主键的自增重新从1开始
删除表:
drop table 数据表名

3.操作表中内容(增删改查)

插入(增加)数据:
	insert into t1(id,name) values(1,'alex');
删除:
	delete from t1 where id<6
修改:
	update t1 set age=18;
	update t1 set age=18 where age=17;
查看数据:
	select * from t1;
  select name,id from t1;
查看数据类型
 	disc 表名;
查看表如何创建的
	show create table 表名 \G;

例如:
在这里插入图片描述
查看表格所有字段,类型,以及是否自增等信息:

desc 文件名;

例如:
在这里插入图片描述
查看表格是如何创建的:

show create table 表格名 \G;   \G是为了转化为可方便读取的信息

例如:
在这里插入图片描述
注:其中auto_increment = 4 代表下一次自增是4

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值