一、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种类型:
- DDL语句(数据库定义语言) : 数据库、表、视图、索引、存储过程, 例如CREATE DROP ALTER
- DML语句(数据库操纵语言) : 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
- 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 查看有哪些库的时候, 会显示出一些系统默认的一些数据库 :
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.示例
- Query OK : 表示sql语句执行成功
- 1 row affected : 表示操作只影响了数据库中的一行的记录
- 0.00sec : 表示操作执行的时间 sec是second(秒)的缩写
4.大小写问题
库的命名区分大小写, DB01 与 db01 应该都能创建成功, 但实际上会抛出异常, 提示 db01 已存在
经过网上搜索, 可在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';
2.查看数据库
show databases; # 查看所有数据库show create database db02; # 查看某个数据库,以及它所使用的字符编码select database(); # 查看当前所在的数据库, 需先 use 切到某个数据库,不然显示NULL
3.修改数据库
- 数据库的修改只能是修改字符编码, 没有改名这么一说
alter database db03 charset gbk; # 将数据库的字符编码改成"gbk"格式alter database db03 charset='gbk'; # 同上一样
4.删除数据库
drop database db03;