MySQLDay01:数据类型,字段属性,运算符,DDL,DML,DCL

目录

0x00数据库分类:

0x02 MySQL的几个概念

0x03 SQL语句书写规则:

0x04 数据类型(列类型 /字段类型):

0x05 字段的属性(列名)

0x06 SQL语句的运算符

0x07SQL语句的分类

0x08 DDL 数据定义语言

1.数据库相关操作:

2.数据表相关操作(先use 数据库名)

0x09 DML数据操作语言:

0x0A DCL数据控制语言


0x00数据库分类:

1.关系型数据库:MySQL,Oracle,Sqlserver 存到磁盘

2.非关系型数据库(内存数据库nosql):memcache redis 存到内存中

3.文档型数据库:mongodb

0x01 MySQL的安装以及连接

windows 安装:

MySQL官网下载免安装版,然后直接解压

首先,打开mysql文件夹,在其中创建一个名为data的目录,这个文件夹将来用来存数据库文件

然后,创建一个名为my.ini的配置文件,打开,输入:

[mysqld]

basedir = mysql文件夹的绝对路径 (例如:D:/phpstudy_pro/Extesnsions/MySQL8.0.12/)

datadir = data文件夹的绝对路径 (例如:D:/phpstudy_pro/Extesnsions/MySQL8.0.12/data/)

然后,初始化数据库

打开cmd窗口,在bin文件夹下找到mysql.exe,将其拖入cmd窗口,输入参数 --initialize-insecure 回车

原来创建data空文件夹,就会自动添加许多文件。

最后,添加环境变量

我的电脑>>属性>>高级设置>>高级>>环境变量>>Path>>添加bin的绝对路径

cmd中输入

mysqld 启动mysql,可以通过 netstat -ano 查看如果有3306端口,说明mysql启动成功

MySQL 默认端口为:3306

1.启动MySQL

2.连接MySQL:

/Applications/MAMP/Library/bin/mysql -u root -p

回车,输入密码,默认为root

show databases;展示所有数据库

exit 中断连接,但是mysql仍然在运行,仍然占用3306端口

如何修改数据库的密码?

同源文件夹中打开mysqladmin - u root -p 原密码 password 新密码

mysqladmin -u root -p shutdown 停止mysql,解除端口占用。

0x01各个目录功能介绍

  1. bin:可执行文件
  2. data:主要包含数据库文件,一个数据库对应其中的一个文件夹(对应show database),一个数据库(文件夹)中存了许多表
    1. DESKTOP-O1B1JQ7.err中记录各种报错日志
    2. DESKTOP-O1B1JQ7.pid 中记录了mysql的进程id
  3. include文件夹:因为MySQL是用C写的,所以include中包含的是所有的头文件。
  4. lib:存储库文件
  5. my.ini 配置文件

0x02 MySQL的几个概念

数据库(database):数据库是一些关联表的集合

数据表(table):表示数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格

列(字段column):一列包含了相同类型的数据

字段类型:规定字段可以存储什么样的数据类型(数值,浮点,字符串,时间)

行(记录row):

0x03 SQL语句书写规则:

  1. 以分号结尾,可以用delimiter修改结束符。例如:输入delimeter // 那么就将结束符修改为了//,以后;结尾就不好使了。
  2. 关键词不区分大小写(php代码中写sql语句时推荐大写,命令行中无所谓)
  3. 注释:
    1. #注释
    2. -- 注释 注意--之后要加个空格
    3. /*注释*/

0x04 数据类型(列类型 /字段类型):

整数型:

为什么设置这么多类型?为了省空间。把合适的数据放到合适的类型。不要用一个很大的类型来存一个很小的数据。

例如:年龄一般用tinyint ,博客文章数一般用smallint

小数型:

前面两种不常用,最常用的是decimal。例如存储金额

字符串类型:

例如,md5加密后的32位的密码就可以用char(32)来存。因为不同的用户名,长度不同,所以一般用varchar(最大长度)来存

日期时间类型:

0x05 字段的属性(列名)

1.unsigned 无符号

2.auto_increment:自增

3.default 默认值,即本列单元格中如果用户上传了值,就用用户上传的值,如果没有指定,那么就用默认值。

4.comment 字段解释说明:如果字段命名不是那么好理解,就需要用comment解释这个字段存什么数据

5.not null:非空限制

6.null:空限制

7.unique:唯一索引,用于提升查询效率,给单元格加上索引,查找的时候就更快了

8.index:普通索引

9.primary key 主键,想要字段属性为auto_increment 自增,必须先指定primary key,然后才会以primary_key为标准排序。

0x06 SQL语句的运算符

= :赋值和判断那都是

!=(<>):都是不等于

< > <= >=

OR(||):或者

AND(&&):且

BETWEEN...AND...:在...和...之间

IN:

NOT IN

0x07SQL语句的分类

  1. DDL(data defination language)数据定义语言,作用:创建,删除,修改,库表结构(重点)
  2. DML (data manipulation language) 数据操作语言,作用: 增,删,该表的记录(重点)
  3. DCL(data control language) 数据控制语言,作用:用户的创建以及授权。运维常用
  4. DQL(data query language) 数据查询语言,作用:查询数据(重点)。小白写出来的查询语句可能需要10秒钟,但是资深开发写出来的查询语句可能需要1秒钟

0x08 DDL 数据定义语言

1.数据库相关操作:

  1. show databases; 查看所有数据库
  2. use 数据库名; 切换数据库,只有当需要对数据库中的表进行操作的时候,才需要切换数据库。
  3. create database 数据库名; 创建数据库
  4. drop database 数据库名;删除数据库,不需要切换数据库

2.数据表相关操作(先use 数据库名)

  1. create table 表名(列名 列类型 一个或多个列属性,列名 列类型 列属性,列名 列类型 列属性);
    1. 表名/字段名规则:小写字母,用下划线隔开,有意义,不要用系统关键字
    2. 例如:create table user(id int unsigned auto_increment not null primary key comment ’用户id‘,user_name varchar(20) not null default 'xidian' comment '用户名',pwd char(32) not null comment '用户密码');

      这样写更清晰。

    3. 密码一般是md5加密的32位字符串,因此采用定长字符类型32.
    4. 建议给每个列都添加not_null属性
  2. show tables; 查看当前数据库中的所有表
  3. desc 表名;查看表结构
  4. show create table 表名; 显示创建表的sql语句
  5. alter table 原表名 rename 新表名;
  6. alter table 表名 add 列名 列类型 列属性;向表中添加列
  7. alter table 表名 add 列名 列类型 列属性 after 已有列名; 在指定位置添加列
  8. alter table 表名 modify 列名 新的列类型 新的列属性;修改列名的属性和类型。
  9. alter table 表名 change 原列名 新列名 新类型 新属性; 修改列名,属性,类型
  10. alter table  表名 drop 列名;删除表中的列;
  11. drop table 表名;删除表

0x09 DML数据操作语言:

1.insert:

  1. select * from 表名;显示表中的所有数据
  2. insert into 表名(列1,列2,列3...) values(列值1,列值2,列值3...);
    1. 向表中添加数据
    2. 注意:
      1. 后面的列值和前面的列一一对应;
      2. 设置为auto_increment 的列可以不手动添加值,因为会自动添加
      3. 字符串必须加引号,列名不必加引号
      4. 不一定要枚举出每个列名,可以选择性的设置,例如:insert into user (username) values ('zhangxueyou');如果报错了,一般是因为在定义表的时候,将其他字段定义为了not null 且 没有设置 默认值。解决方法有两种:要么不要指定这些字段为非空(不可取!),要么为这些字段指定默认值。
  3. insert into 表名 values(列值1,列值2,列值3,..)
    1. 可以省略(列1,列2,列3...),但是这样的话,表有多少个字段就要指定多少个值。并且值的顺序必须和字段的顺序相对应。

2.delete

1.delete from 表名 where 条件

注意!

不加where条件会删除所有的数据。

delete删除后,再插入数据,新的数据的id号会从原来的id号开始递增

如:delete from user where id = 1;

2.truncate 表名 where 条件

truncate删除后,再插入数据,新的数据id从1开始

3.update

update 表名 set 列1 = 列值,列2 = 列值 where 条件; 修改表中的内容;

例如:

update  user set pwd = 213231;将所有行的密码都改成213231

update user set pwd = 212332  where user_name  = 'liudehua';

0x0A DCL数据控制语言

线上的时候:

1.要修改root密码

2.不要用root用户连接数据库

正常线上项目一个mysql可能会跑好几个项目,每个项目对应一个数据库,不同的数据库要对应不同的用户,并且权限也不一样。 

例如:你有两个项目,一个博客项目,一个商城项目。

博客项目需要一个用户,商城项目也需要创建一个用户。这样就算博客项目的用户丢了,也不回影响的商城项目。并且博客项目用户的权限仅仅是连接博客的数据库。没有权限连接商城的数据库

0.查看当前有多少用户:

数据库用户信息存在mysql数据库的user表中。

show database;

use mysql;

show tables;

desc user;

select Host,User,authentication_string from user;

1.创建用户:

create user 用户名 @'IP地址' identified by '密码'

例如:create user  'blog' @'%' identified by '123456';

%是通配符,表示可以通过任意ip地址以该用户来连接数据库。

mysql -u 用户名 -h 数据库所在服务器ip -p 连接远程的数据库

当不加-h 时,默认为 -h 127.0.0.1

想要修改配置,只要修改user表中的配置信息即可,然后flush privilege例如:

update user set host ='192.168.1.12' where user = 'blog';

flush privileges;刷新权限

2.给用户授权

grant 权限1,权限2... on 数据库名.* to 用户名 @IP地址或者%;

如果想给所有的数据库授权,就用*.*

数据库名.*表示授权范围:数据库下所有的表

然后flush privileges;

例如:

在root用户下执行:

GRANT insert,update,delete,select ON blog.* TO 'blog' @'192.168.1.206';

flush privileges;

然后退出,用blog用户登录,show databases; 就可以看到blog数据库了。

如果授权没问题,但是还是没权限,可以尝试重启cmd。

如果想授权所有权限,可以写ALL 或者 ALL_PRIVILEGES

3.show grants for 用户名@'IP地址';

显示该用户的所有权限。

4.回收权限

revoke 权限1,权限2..on 数据库名.* from 用户名 @'ip';

flush privileges;

5.创建用户加授权一步搞定:

grant 权限1,权限2 on 数据库名.* to 用户名@IP identified by 密码;

flush privileges;

6.删除用户

drop user 用户名@'IP地址'

7.修改用户密码:

mysqladmin -u用户名 -p原密码 password新密码

方法二:直接修改user表中的authentication_string字段

update user set authentication_string = password('123456') where user =用户名

password()是一个内置函数,用户将明文密码加密为密文

flush privileges;

5.7之前的版本authentication_string字段为password

8.忘记密码

首先关闭数据库

mysqladmin -uroot -p shutdown 这样仍然需要密码,所以直接在任务管理器中直接关闭mysql

然后,

mysqld --skip-grant-table回车,表示跳过权限表,不再验证密码

再打开一个窗口,输入mysql回车不需要输入用户名密码就进来了

然后进入user表中修改密码即可。

发布了156 篇原创文章 · 获赞 19 · 访问量 8948

猜你喜欢

转载自blog.csdn.net/weixin_43415644/article/details/103880729