数据库_数据库基础
2021-06-29 09:092624
一,认识MySQL数据库
1,什么是数据库
数据库(Database)就是按照数据结构来组织,存储和管理数据的仓库
专业的数据库是专门对数据进行创建,访问,管理,搜索等操作的软件,比起我们自己用文件读写的方 式对象数据进行管理更加的方便,快速,安全
2,作用
- 对数据进行持久化的保存
- 方便数据的存储和查询,速度快,安全,方便
- 可以处理并发访问
- 更加安全的权限管理访问机制
3,常见的数据库
数据库分两大类,一类是 关系型数据库。另一类叫做 非关系型数据库。
- 关系型数据库: MySQL(已被Oracle收购),Oracle,PostgreSQL,SQLserver。。。。
- 非关系型数据库:Redis内存数据库,MongoDB文档数据库。。。
4,MySQL概述
数据库:
表
5,MySQL基本操作
进入MySQL并切换数据库
查看表
查看表结构
二,win10安装MySQL和图形工具
1,安装MySQL
Windows安装MySQL5.7.17
1)在MySQL官网 dev.mysql.com/downloads/m… 上面下载ZIP安装包(第二个:Windows (x86, 64- bit), ZIP Archive)。
2)下载完成后解压,将其放到想要安装的目录下。 例如:D:\MySQL5.7\mysql-5.7.17-winx64
3)新建一个my.ini配置文件,原始的my-default.ini配置文件只是个模版,不要在里面改动。
my.ini的内容如下: (!!!注意basedir、datadir的值需要根据MySQL的目录具体设定)
ini
复制代码
[mysql]
default-character-set=utf8
[mysqld]
port = 3306
basedir=D:\MySQL5.7\mysql-5.7.17-winx64
datadir=D:\MySQL5.7\mysql-5.7.17-winx64\data
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
explicit_defaults_for_timestamp=true
4)在安装路径下新建一个空的data文件夹。
5)以管理员身份运行cmd,进入bin目录,执行 mysqld --initialize-insecure --user=mysql 命令。不进行这一 步,安装完成之后无法启动服务。
6)依然在管理员cmd窗口的bin目录下,执行 mysqld install 命令安装。完成后会提示安装成功。
7)依然在管理员cmd窗口的bin目录下,执行 net start mysql 命令启动MySQL服务。
8)修改环境变量,添加"D:\MySQL5.7\mysql-5.7.17-winx64\bin"。 (这样就可以在任意目录下使用MySQL)
9)在普通cmd窗口中,进入bin目录,执行 mysql -u root -p 命令,默认没有密码,回车进入。
2,安装navicate
三,Mac系统安装MySQL数据库
方法一:官网下载安装包安装
方法二:使⽤Mac中的Homebrew进⾏mysql的安装
1.下载安装mysql
安装成功后界面
2,配置重启mysql
更换国内镜像源地址
卸载MySQL
四,MySQL基本操作命令
1,简单介绍
使用方法:
- 方式一: 通过在命令行敲命令来操作 ( 有助于命令的掌握)
- 方式二: 通过图型界面工具,如 Navicat 等(在熟练掌握后再使用)
- 方式三:通过编程语言(python,php,java,go...)执行mysql命令
SQL ( Structure query language ) 结构化查询语言
- SQL语言分为4个部分:DDL(定义)、DML(操作)、DQL(查询)、DCL(控制)
SQL语句中的快捷键
- \G 格式化输出(文本式,竖立显示)
- \s 查看服务器端信息
- \c 结束命令输入操作
- \q 退出当前sql命令行模式
- \h 查看帮助
2,操作数据库步骤
1)通过命令行连接MySQL
- SQL 语句可以换行, 要以分号结尾
3)命令不区分大小写. 关键字和函数建议用大写
4)如果提示符为 '> 那么需要输入一个'回车
5)命令打错了换行后不能修改, 可以用 \c 取消
3,数据库操作
查看数据库 show databases;
创建数据库 create database 库名 default charset=utf8;
删除数据库 drop database 库名;
打开数据库 use 库名;
4,数据表操作
数据库管理系统中, 可以有很多库, 每个数据库中可以包括多张数据表
查看表: show tables;
创建表: create table 表名(字段名1 类型,字段名2 类型)engine=innodb default charset=utf8;
创建表: 如果表不存在,则创建, 如果存在就不执行这条命令
create table if not exists 表名(字段1 类型,字段2 类型);
sql
复制代码
create table if not exists users(
id int not null primary key auto_increment,
name varchar(4) not null,
age tinyint,
sex enum('男','女')
)engine=innodb default charset=utf8;
删除表: drop table 表名;
表结构: desc 表名;
查看建表语句:show create table users;
5,数据操作 增删查改
插入
- insert into 表名(字段1,字段2,字段3) values(值1,值2,值3);
- insert into 表名(字段1,字段2,字段3) values(a值1,a值2,a值3),(b值1,b值2,b值3);
查询
- select * from 表名;
- select 字段1,字段2,字段3 from 表名;
- select * from 表名 where 字段=某个值;
修改
- update 表名 set 字段=某个值 where 条件;
- update 表名 set 字段1=值1,字段2=值2 where 条件;
- update 表名 set 字段=字段+值 where 条件;
删除
- delete from 表名 where 字段=某个值;
五,MySQL中的数据类型
数据类型是定义列中可以存储什么类型的数据以及该数据实际怎样存储的基本规则
数据类型限制存储在数据列列中的数据。例如,数值数据类型列只能接受数值类型的的数据
在设计表时,应该特别重视所用的数据类型。使用错误的数据类型可能会严重地影响应用程序的功能和性能。
更改包含数据的列不是一件小事(而且这样做可能会导致数据丢失)。
数据类型:整型、浮点型、字符串、日期等
1,字符串数据类型
最常用的数据类型是串数据类型。它们存储串,如名字、地址、电话号码、邮政编码等。
不管使用何种形式的串数据类型,串值都必须括在引号内
有两种基本的串类型,分别为定长串和变长串
1.1 定长串:char
接受长度固定的字符串,其长度是在创建表时指定的。 定长列不允许存储多于指定长度字符的数据。
指定长度后,就会分配固定的存储空间用于存放数据
char(7) 不管实际插入多少字符,它都会占用7个字符位置
1.2 变长串:varchar
存储可变长度的字符串 varchar(7) 如果实际插入4个字符, 那么它只占4个字符位置,当然插入的数据长度不能超过7 个字符
既然变长数据类型这样灵活,为什么还要使用定长数据类型?
回答:因为性能,MySQL处理定长列远比处理变长列快得多。
1.3 Text 变长文本类型存储
2,数值类型
数值数据类型存储数值。MySQL支持多种数值数据类型,每种存储的数值具有不同的取值范围。支持的取值范围越 大,所需存储空间越多
与字符串不一样,数值不应该括在引号内
decimal(5, 2) 表示数值总共5位, 小数占2位
tinyint 1字节(8位) 无符号0-255。有符号-128-127
int 4字节。0-42亿 , -21亿,21亿。
MySQL中没有专门存储货币的数据类型,一般情况下使用DECIMAL(8, 2)
无符号与有符号数
所有数值数据类型(除BIT和BOOLEAN外)都可以有符号或无符号
有符号数值列可以存储正或负的数值
无符号数值列只能存储正数。
默认情况为有符号,但如果你知道自己不需要存储负值,可以使用UNSIGNED关键字
3,日期和时间类型
MySQL使用专门的数据类型来存储日期和时间值
4,二进制数据类型(不常用)
二进制数据类型可存储任何数据(甚至包括二进制信息),如图像、多媒体、字处理文档等
六,MySQL中的类型约束和运算
1,字段约束
1)unsigned 无符号(给数值类型使用,表示为正数,不写可以表示正负数都可以)
2)字段类型后面加括号限制宽度
- char(5). varchar(7) 在字符类型后面加限制 表示 字符串的长度
- int(4) 没有意义,默认无符号的int为int(11),有符号的int(10)
- int(4) unsigned zerofill只有当给int类型设置有前导零时,设置int的宽度才有意义。
3)not null 不能为空,在操作数据库时如果输入该字段的数据为NULL ,就会报错
4)default 设置默认值
5)primary key 主键不能为空,且唯一.一般和自动递增一起配合使用。
6)auto_increment 定义列为自增属性,一般用于主键,数值会自动加1
7)unique 唯一索引(数据不能重复:用户名)可以增加查询速度,但是会降低插入和更新速度
2,主键
1)表中每一行都应该有可以唯一标识自己的一列,用于记录两条记录不能重复,任意两行都不具有相同的主键值
2)应该总是定义主键 虽然并不总是都需要主键,但大多数数据库设计人员都应保证他们创建的每个表具有一个主键,以便于以后的数据操纵和管理。
要求
- 记录一旦插入到表中,主键最好不要再修改
- 不允许NULL
- 不在主键列中使用可能会更改的值。 (例如,如果使用一个名字作为主键以标识某个供应商,当该供应商合并和更改其名字时,必须更改这个主键。)
- 自增整数类型:数据库会在插入数据时自动为每一条记录分配一个自增整数,这样我们就完全不用担心主键 重复,也不用自己预先生成主键
- 可以使用多个列作为联合主键,但联合主键并不常用。使用多列作为主键时,所有列值的组合必须是唯一的
3,MySQL运算符
MySQL的运算符
- 算术运算符: +、 -、 *、 /、 %
- 比较运算符: =、 >、 <、 >=、 <=、!=
- 数据库特有的比较: in、not in、is null、is not null、like、between、and
- 逻辑运算符: and、or、not
- like: 支持特殊符号%和_ ;
其中%表示任意数量的任意字符,_表示任意一位字符
七,MySQL数据表操作详解
1,数据库操作
1.1 创建数据库
ini
复制代码
# 链接mysql数据库后,进入mysql后可以操作数据
# 1. 创建库
create database if not exists tlxy default charset=utf8;
# 1. 数据库 tlxy 如果不存在则创建数据库,存在则不创建
# 2. 创建 tlxy 数据库,并设置字符集为utf8
# 3. 无特殊情况都要求字符集为utf8或者utf8mb4的字符编码
1.2 查看所有库
ini
复制代码
# 1. 查看所有库
show databases;
1.3 打开库/进入库/选择库
perl
复制代码
# use 库名
use tlxy
1.4 删除库
删库有风险,动手需谨慎。
bash
复制代码
# 删除库,那么库中的所有数据都将在磁盘中删除。
drop database 库名
2,数据表操作
2.1 创建表
语法格式:
create table 表名(字段名,类型,【字段约束】,。。。);
实例:
sql 复制代码
以下创建一个 users 的表
create table users( # 创建ID字段,为正整数,不允许为空 主键,自动递增 id int unsigned not null primary key auto_increment,
# 创建 存储 名字的字段,为字符串类型,最大长度 5个字符,不允许为空
username varchar(5) not null,
# 创建存储 密码 的字段,固定长度 32位字符, 不允许为空
# 数据库在存储用户密码时通常存储的是加密后的密码 使用md5加密算法后 密码均为32位 所以这里固定长度为32
password char(32) not null,
# 创建 年龄 字段,不允许为空,默认值为 20
age tinyint not null default 20
)engine=innodb default charset=utf8;
查看表结构
desc users;
#查看建表语句 show create table users;
查看表结构
可以通过展示建表语句,复制,运行,来重建相同的数据库
创建表的基本原则:
- 表名和字段名 尽可能的符合命名规范,并且最好能够‘见名之意’
- 表中数据必须有唯一标示,即主键定义。无特殊情况,主键都为数字并自增即可
- 表中字段所对应的类型设置合理,并限制合理长度
- 表引擎推荐使用innodb,并无特殊情况都要求为utf8或者utf8mb4的字符编码
2.2 修改表结构
语法格式:alter table 表名 action (更改的选项)
添加字段
sql
复制代码
# 语法:alter table 表名 add 添加的字段信息
# 在 users 表中 追加 一个 num 字段
alter table users add num int not null;
# 在指定字段后面追加字段 在 users 表中 age字段后面 添加一个 email 字段
# 由于数据一开始没有email字段 添加后会设置默认值 空字符串
alter table users add email varchar(50) after age;
# 在指定字段后面追加字段,在 users 表中 age字段后面 添加一个 phone
alter table users add phone char(11) not null after age;
# 在表的最前面添加一个字段
alter table users add aa int first;
删除字段
sql 复制代码
删除字段 alter table 表名 drop 被删除的字段名
alter table users drop aa;
修改字段
语法格式: alter table 表名 change|modify 被修改的字段信息
-
change: 可以修改字段名,
-
modify: 不能修改字段名。
修改表中的 num 字段 类型,使用 modify 不修改表名
alter table users modify num tinyint not null default 12;
修改表中的 num 字段 为 int并且字段名为 nn
alter table users change num nn int;
举例:修改字段类型
修改字段类型后
注意:一般情况下,无特殊要求,不要轻易修改表结构
2.3 修改表名
语法:alter table 原表名 rename as 新表名
2.4 更改表中自增的值
ini 复制代码
在常规情况下,auto_increment 默认从1开始继续递增
alter table users auto_increment = 1000;
2.5 修改表引擎
markdown 复制代码
推荐在定义表时,表引擎为 innodb。
通过查看建表语句获取当前的表引擎
mysql> show create table users\G;
*************************** 1. row ***************************
Table: users
Create Table: CREATE TABLE users (
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
直接查看当前表状态信息
mysql> show table status from tlxy where name = 'users'\G; *************************** 1. row *************************** Name: users Engine: InnoDB
修改表引擎语句
alter table users engine = 'myisam';
2.6 删除表
drop table 表名