MySQL(一) 库和表的基础操作

1. 数据库基础

1.1 什么是数据库

存储数据用文件就可以了,为什么还要弄个数据库?

文件保存数据有以下几个缺点:

  • 文件的安全性问题
  • 文件不利于数据查询和管理
  • 文件不利于存储海量数据
  • 文件在程序中控制不方便
    数据库存储介质:
  • 磁盘
  • 内存
    为了解决上述问题,专家们设计出更加利于管理数据的东西------数据库,它能更有效的管理数据。

1.2 主流数据库

  • SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。
  • Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
  • MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
  • PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
  • SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
  • H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

1.3 基本使用

1.3.1 MySQL安装

Centos 6.5下编译安装MySQL 5.6.14
CentOS 7 通过 yum 安装 MariaDB
Windows下安装MySQL5.7
Windows下安装MySQL5.7

1.3.2 配置文件

配置数据库客户端和服务器的编码格式,网络连接所需用的端口,数据库所用的引擎等

bash 复制代码
vim /etc/my.cnf

数据库存放的地址/var/lib/mysql

1.3.3启动服务

bash 复制代码
systemctl start mysqld.service

启动的是服务器,用mysqld表示,启动之后用mysql客户端去链接。

修改完配置文件后要重新启动

bash 复制代码
systemctl restart mysqld.service

查看启动服务

bash 复制代码
ps -axj | grep mysqld

设置开机启动[可以不设]

bash 复制代码
#开启开机⾃启动
systemctl enable mysqld
systemctl daemon-reload

1.3.4 连接服务器

bash 复制代码
mysql -h 127.0.0.1 -P 3306 -u root -p

免密码是因为在上面配置文件中加入了skip-grant-tables

注意:

  • 如果没有写 -h 127.0.0.1 默认是连接本地
  • 如果没有写 -P 3306 默认是连接3306端口号

1.3.5 服务器,数据库,表关系

  • 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
  • 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
  • 数据库服务器、数据库和表的关系如下:

    MySQL本质:基于C(mysql客户端)S(mysqld服务器)模式的一种网络服务
    mysql是一套给我提供数据存取服务的网络程序
    数据库一般指的是,在磁盘或者内存中存储的特定结构组织的数据 -- 将来在磁盘中存储的一套数据库方案
    数据库服务,mysqld
    为什么使用数据库?
    一般的文件只提供的数据的存储功能,但是文件并没有提供很好的对数据内容的管理功能,数据库本质起到了对内容进行操作的功能

1.3.6 使用案例

  • 创建数据库 create database helloworld;
  • 使用数据库 use helloworld;
  • 创建数据库表 create table student( id int, name varchar(32), gender varchar(2) );
  • 表中插入数据
bash 复制代码
insert into student (id, name, gender) values (1, '张三', '男');
insert into student (id, name, gender) values (2, '李四', '女');
insert into student (id, name, gender) values (3, '王五', '男');
  • 查询表中的数据 select * from student;

  1. 建立数据库,本质上就是Linux下的一个目录
  2. 在数据库内建立表,本质就是在Linux下创建对应的文件
  3. 数据库本质上就是一个文件,不过这个文件不是由我们操作,而是由数据库服务进行操作

1.3.7 数据逻辑存储

1.4 MySQL架构

1.5 SQL分类

  • DDL【data definition language】 数据定义语言,用来维护存储数据的结构
    代表指令: create, drop, alter
  • DML【data manipulation language】 数据操纵语言,用来对数据进行操作
    代表指令: insert,delete,update
    • DML中又单独分了一个DQL,数据查询语言,代表指令: select
  • DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务
    代表指令: grant,revoke,commit

1.6 存储引擎

1.6.1 存储引擎

存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
MySQL的核心就是插件式存储引擎,支持多种存储引擎。

1.6.2 查看存储引擎

bash 复制代码
show engines;

1.6.3 存储引擎对比

2.库的操作

2.1 创建数据库

语法:

bash 复制代码
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name

说明:

  • 大写的表示关键字
  • \] 是可选项

  • COLLATE: 指定数据库字符集的校验规则

2.2 创建数据库案例

创建名为 db1 的数据库

bash 复制代码
create database db1;

说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_ general_ ci

  • 创建一个使用utf8字符集的 db2 数据库
bash 复制代码
create database db2 charset=utf8;
  • 创建一个使用utf字符集,并带校对规则的 db3 数据库。
bash 复制代码
create database db3 charset=utf8 collate utf8_general_ci;

2.3 字符集和校验规则

2.3.1 查看系统默认字符集以及校验规则

bash 复制代码
show variables like 'character_set_database';
show variables like 'collation_database';

2.3.2 查看数据库支持的字符集

bash 复制代码
show charset;

字符集主要是控制用什么语言。比如utf8就可以使用中文.

2.3.3 查看数据库支持的字符集校验规则

bash 复制代码
show collation;

2.3.4 校验规则对数据库的影响

  • 不区分大小写
    创建一个数据库,校验规则使用utf8_ general_ ci[不区分大小写]
bash 复制代码
create database test1 collate utf8_general_ci;
bash 复制代码
use test1;
bash 复制代码
create table person(name varchar(20));
bash 复制代码
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
  • 区分大小写
    创建一个数据库,校验规则使用utf8_ bin[区分大小写]
bash 复制代码
create database test2 collate utf8_bin;
bash 复制代码
use test2
bash 复制代码
create table person(name varchar(20));
bash 复制代码
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');

进行查询
不区分大小写的查询以及结果

bash 复制代码
mysql> use test1;
mysql> select * from person where name='a';


区分大小写的查询以及结果

bash 复制代码
mysql> use test2;
mysql> select * from person where name='a';

结果排序
不区分大小写排序以及结果:

bash 复制代码
mysql> use test1;
mysql> select * from person order by name;
bash 复制代码
mysql> use test2;
mysql> select * from person order by name;

2.4 操纵数据库

2.4.1 查看数据库

bash 复制代码
show databases;


显示创建语句

bash 复制代码
show create database 数据库名;

示例:

说明:

  • MySQL 建议我们关键字使用大写,但是不是必须的。
  • 数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字
  • /*!40100 default.... */ 这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话

2.4.2 修改数据库

语法:

bash 复制代码
ALTER DATABASE db_name [alter_spacification [,alter_spacification]...]
alter_spacification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name

说明:对数据库的修改主要指的是修改数据库的字符集,校验规则

实例: 将 test1 数据库字符集改成 gbk

bash 复制代码
mysql> alter database test1 charset=gbk;

2.4.3 数据库删除

bash 复制代码
DROP DATABASE [IF EXISTS] db_ name;

执行删除之后的结果:

  • 数据库内部看不到对应的数据库
  • 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删
    注意:不要随意删除数据库

2.4.4 备份和恢复

2.4.4.1 备份

语法:

bash 复制代码
# mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径

示例:将mytest库备份到文件(退出连接)

bash 复制代码
# mysqldump -P3306 -u root -p -B test1 > ./mytest.sql

这时,可以打开看看 mytest.sql 文件里的内容,其实把我们整个创建数据库,建表,导入数据的语句都装载这个文件中。

2.4.4.2 还原
bash 复制代码
source /home/dgz/linux/test/mytest.sql;
2.4.4.3 注意事项

如果备份的不是整个数据库,而是其中的一张表,怎么做?

bash 复制代码
# mysqldump -u root -p 数据库名 表名1 表名2 > ./mytest.sql

同时备份多个数据库

bash 复制代码
# mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径

如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。

2.4.5 查看连接情况

语法:

bash 复制代码
show processlist

可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。以后大家发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。

2.4.6 查看现在正在使用哪个数据库

bash 复制代码
select database();


不要随便删除库,改库名

3. 表的操作

3.1 创建表

语法:

bash 复制代码
create table table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;

说明:

  • field 表示列名
  • datatype 表示列的类型
  • character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准
  • collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准

3.2 创建表案例

bash 复制代码
create table users (
id int,
name varchar(20) comment '用户名',
password char(32) comment '密码',
birthday date comment '生日'
) character set utf8 engine MyISAM;

说明:

不同的存储引擎,创建表的文件不一样。
users 表存储引擎是 MyISAM ,在数据目中有三个不同的文件,分别是:

  • users.frm:表结构
  • users.MYD:表数据
  • users.MYI:表索引

    创建一个engine是innodb的数据库,观察存储目录

3.3 查看表结构

bash 复制代码
desc 表名;

3.4 查看该数据库下有多少表

3.5 修改表

在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。

bash 复制代码
ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,columndatatype]...);
ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr][,columndatatype]...);
ALTER TABLE tablename DROP (column);

案例:

在users表添加二条记录

bash 复制代码
mysql> insert into users values(1,'a','b','1982-01-04'),(2,'b','c','1984-01-04');


在users表添加一个字段,用于保存图片路径

bash 复制代码
mysql> alter table users add assets varchar(100) comment '图片路径' after birthday;


插入新字段后,对原来表中的数据没有影响:

修改name,将其长度改成60

bash 复制代码
mysql> alter table users modify name varchar(60);


删除password列

注意:删除字段一定要小心,删除字段及其对应的列数据都没了

bash 复制代码
mysql> alter table users drop password;

修改表名为employee

bash 复制代码
mysql> alter table users rename to employee;


to:可以省掉

将name列修改为xingming

bash 复制代码
mysql> alter table employee change name xingming varchar(60); --新字段需要完整定义

3.6 查看创建表的全部属性

bash 复制代码
show create table employee \G

\G 用于格式化显示

3.7 删除表

语法格式:

bash 复制代码
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...

示例:

bash 复制代码
drop table user1;
相关推荐
SPC的存折7 分钟前
openEuler 24.03 MariaDB Galera 集群部署指南(cz)
linux·运维·服务器·数据库·mysql
仲芒8 分钟前
[24年单独笔记] MySQL 常用的 DML 命令
数据库·笔记·mysql
SPC的存折20 分钟前
MySQL 8.0 分库分表
linux·运维·服务器·数据库·mysql
蓦然乍醒35 分钟前
使用 DBeaver 还原 PostgreSQL 备份文件 (.bak) 技术文档
数据库·postgresql
XDHCOM36 分钟前
Redis节点故障自动恢复机制详解,如何快速抢救故障节点,确保数据不丢失?
java·数据库·redis
QCzblack38 分钟前
BugKu BUUCTF ——Reverse
java·前端·数据库
cyber_两只龙宝41 分钟前
【Oracle】Oracle之DQL中WHERE限制条件查询
linux·运维·数据库·云原生·oracle
luis的妙妙屋42 分钟前
主流数据库数据类型对比分析
数据库
XDHCOM1 小时前
ORA-00054资源忙故障修复,远程处理Oracle报错解决方案,数据库锁超时NOWAIT指定问题排查
数据库·oracle
q21030633721 小时前
初学Access(具体示例)
数据库