初识MySQL

一、MySQL简介

1.1 数据库管理软件分类

管理数据的工具有很多种,不止MySQL一个。关于分类其实可以从各个纬度来进行划分,但是我们最常使用的分类还是根据他们存取数据的特点来划分的,主要分为关系型和非关系型。

可以简单的理解为,关系型数据库需要有表结构,非关系型数据库是key-value存储的,没有表结构。

关系型:如sqllite,db2,oracle,access,sql server,MySQL,注意:sql语句通用。

非关系型:mongodb,redis,memcache

1.2 MySQL

MySQL是一个关系型数据库管理系统 ,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。

MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码 这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

二、SQL语法

  • mysql服务端软件即mysqld, 它帮我们管理好文件夹以及文件
  • 前提是作为使用者的我们, 需要下载mysql的客户端, 或者其他模块来连接到mysqld
  • 然后使用mysql软件规定的语法格式去提交自己命令, 实现对文件夹或文件的管理
  • 该语法即sql(Structured Query Language 即结构化查询语言)

三、3种SQL语言

SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发, 分为3种类型:

  1. DDL语句(数据库定义语言) : 数据库、表、视图、索引、存储过程, 例如CREATE DROP ALTER
  2. DML语句(数据库操纵语言) : 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
  3. DCL语句(数据库控制语言) : 例如控制用户的访问权限GRANT、REVOKE

四、MySQL的账号操作

1.登陆客户端

1.root用户进入MySQL客户端
mysql

2.普通用户进入MySQL客户端sudo -uroot mysql

2.查看当前用户

mysql> select user();+----------------+| user()         |+----------------+| root@localhost |+----------------+
1 row in set (0.07 sec)

3.退出MySQL客户端

mysql> exit  # 也可以用\q quit退出Bye

4.创建账号

1.指定网段
mysql>  create user 'lihua'@'192.168.10.%';   IDENTIFIED BY '123';# 指示网段Query OK, 0 rows affected (0.01 sec)2.指定连接机器
mysql> create user 'lihua'@'192.168.10.5';   # 指示某机器可以连接Query OK, 0 rows affected (0.01 sec)3.远程登录
MySQL -uroot -p123 -h 192.168.10.3

4.给账号授权
MySQL> grant all on *.* to 'lihua'@'%';MySQL> flush privileges;    # 刷新使授权立即生效5.创建账号并授权
MySQL> grant all on *.* to 'lihua'@'%' identified by '123'

五、基本SQL语句

1.基本命令

use db1;  或 use db1  # 切换库select databases();   # 查看当前所在的库的名字

2.针对库的增删改查(文件夹)

# 增create database db1;create database db1 charset='gbk'; #指定字符编码为gbk,不指定会使用系统默认的。create database db1 charset gbk;# 查show databases;  # 查所有. 查看数据库下的所有库名信息show create database db1;  # 查单个. 查看以及创建的数据库db1是用的什么字符编码.# 改: 数据库没有改名这么一说, 改的只是数据库的字符编码alter database db1 charset gbk;alter database db1 charset='utf8';# 删drop database db1;# 补充: information_schem 放内存相关的一些信息

3.针对表的增删改查(文件)

前提:在操作表(文件)的时候 需要指定所在的库(文件夹)

# 增: 每个字段都需要规定数据类型'''
创建表以后生成两个表: t1.frm 和 t1.ibd
    t1.frm: 存放的是表的表结构. 代指什么样的字段, 每个字段是什么类型的, 有什么相关的约束条件
    t1.ibd: 存放的是表的数据
'''create table db1.t1(id int, name char(4));create table t1(id int, name char(4));  # 建表的时候最好要有一个id, 这个id是标识你的表都插了多少条记录, 是一个记录编号# 查show tables;  # 查看当前库下的都有哪个表show create table t1;  # 查看刚刚创建的表t1结构describe t1;  # 查看表结构desc t1;  # 查看表结构(简写)# 改: 以后几乎用不上, 除非涉及到你的表结构不合理alter table t1 add age int;  # 为当前库下t1的表添加age字段名, 并指定int类型alter table t1 modify name char(5);  # 为当前库下t1的表修改name字段最大传字符数为char(5)alter table t1 change name NAME char(6);  # 为当前库下t1的表修改name字段名为NAME, 并指定最大传字符数为chr(15)# 删drop table db1.t1;drop table t1;

4. 针对数据的增删改查(文件内容记录)

前提: 一定要先有库 有表 最后才能操作记录

# 增'''
加into不加into都可以, 不过为了语义完整还是加into.
value和values都可以
'''insert t1 values(1, 'jason');  # 为表t1中的第一个字段, 第二个字段插值, 一个小括号就是一条记录.insert into t1 value(1, 'jason');insert into t1 values(1, 'jsaon');insert into t1 values(1, 'jsaon'), (1, 'tank');# 查'''
查出结果以后本身就是一张表, 这张表存在硬盘中, 查出来是在内存当中, 表查出来的那一刻开始就已经没了, 当前状态的查询没有任何的保存手段.
'''select * from t1;  # 在当前路径查看t1表中属于所有字段的记录(注意: 该命令当数据量特别大的时候不建议使用)select name from t1;  # 在当前路径查看t1表中属于字段name的记录select * from t1 where id=2;  # 拿到表当前库下的t1表中属于id字段等于2的一条记录. id后面可以指定多种判断条件:    =, >, >=. <=, !=select * from t1 where id>=2;select * from t2 where id!=2;select * from t2 where name='jason';# 改update t1 set name='JSAON';  # 在当前路径将t1表中的name字段改成JSAON.update t1 set name='DSB' where id=2;  #  当前路径将t1表中id字段等于2对于的name字段的值修改为DSB.# 删'''
delete只是配合where条件来删除符合条件字段中的某几条记录的, 不要用delete清空表, 使用它清空表不能使AUTO_INCREMENT自动自增功能被还原,单纯的只能清楚表中的记录
'''delete from t1;  # 将表所有的数据清空delete from t1 where id=4;truncate t2;  # 将表所有的数据清空(推荐)

5.清空表

delete from t1; # 如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。

truncate table t1; # 数据量大,删除速度比上一条快,且直接从零开始。

  • auto_increment 表示:自增
  • primary key 表示:约束(不能重复且不能为空);加速查找

6. 补充:斜杠\命令

\h  # 显示帮助信息. 或者输入`help;`\c  # 清除当前输入语句\s  # 从服务器获取状态信息。\G  # 发送命令到mysql服务器,垂直显示结果。

六、系统数据库

MySQL刚安装好, 我们使用SQL语句 show databases 查看有哪些库的时候, 会显示出一些系统默认的一些数据库 :

初识MySQL_MySQL

1.information_schema

  • 这是虚拟库, 不占用磁盘空间, 存储的是数据库启动后的一些参数, 如用户表信息、列信息、权限信息、字符信息等

2.mysql

  • 这是授权库, 主要存储系统用户的权限信息

3.performance_schema

  • 这是MySQL 5.5开始新增一个数据库, 主要用于收集数据库服务器性能参数, 记录处理查询请求时发生的各种事件、锁等现象

4.test

  • 这是MySQL数据库系统自动创建的测试数据库

七、数据库创建及命令名规则

1.创建数据库

  • 语法 : create database [数据库名] charset [字符编码(一般utf8)];
create database db01 charset utf8;

2.命名规则

  • 可由**字母、数字、下划线、@、#、$**组成
  • 不能全部是数字组成, 且最长128位
  • 需区分大小写, 并且唯一
  • 不能使用关键字, 如 : create、delete、select等

3.示例

初识MySQL_MySQL_02

  • Query OK : 表示sql语句执行成功
  • 1 row affected : 表示操作只影响了数据库中的一行的记录
  • 0.00sec : 表示操作执行的时间 sec是second(秒)的缩写

4.大小写问题

库的命名区分大小写, DB01 与 db01 应该都能创建成功, 但实际上会抛出异常, 提示 db01 已存在

初识MySQL_MySQL_03

经过网上搜索, 可在my.ini 或者 my.cnf 文件中添加配置 lower_case_table_names=0, 0代表区分大小写, 1代表不区分大小写, 然后重启, 发现重启失败, 改回之前的配置才能正常启动, 问题没解决

八. 库的详细操作演示

0.切换数据库

  • 语法 : use [数据库名]
use db01  # 相当于 cd 命令

1.增加数据库

  • 完整语法 : create database [数据库名] charset [字符编码(一般utf8)];
create database db01;create database db02 charset utf8;create database db03 charset='utf8';

初识MySQL_MySQL_04

2.查看数据库

show databases;             # 查看所有数据库show create database db02;  # 查看某个数据库,以及它所使用的字符编码select database();          # 查看当前所在的数据库, 需先 use 切到某个数据库,不然显示NULL

初识MySQL_MySQL_05

3.修改数据库

  • 数据库的修改只能是修改字符编码, 没有改名这么一说
alter database db03 charset gbk;   # 将数据库的字符编码改成"gbk"格式alter database db03 charset='gbk'; # 同上一样

初识MySQL_MySQL_06

4.删除数据库

drop database db03;

初识MySQL_MySQL_07