mysql-基础

微信图片_20211113202817

MYSQL

什么是数据库

数据库 DB DataBase

数据仓库、存储数据、管理数据

数据库分类

关系型数据库(SQL)

表和表之间、行和列之间的关系进行存储数据

非关系型数据库(NOSQL)

{key,value}形式
对象存储

DBMS(数据库管理系统)

数据库的管理软件

MYSQL介绍

MYSQL是一个关系型数据库管理系统

mysql安装

  • 官网选择版本下载压缩包、解压

https://downloads.mysql.com/archives/community/

  • 创建一个ini文件、放到bin目录的上一级填写相关配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=D:\Mysql\mysql-8.0.11-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\Mysql\mysql-8.0.11-winx64\Data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
  • 设置环境变量设置为mysql的bin目录

  • 进入dos命令界面

mysqld -install 服务名 初始化服务

mysqld --initialize --console 初始化mysql、记住打印出来的root@localhost后面的字符串、这个是mysql第一次的密码

net start 服务名 启动服务

mysql -u root -p 登录、这个时候输入刚才的那个初始密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; 更改密码、这个时候就更该成了你想要的的密码了

net stop 服务名 关闭服务(在你想关闭的时候关闭、这个不在安装步骤中)

DDL

数据定义语言

  • CREATE

  • ALERT

  • DROP

DML

数据操作语言

  • INSERT

  • UPDATE

  • DELETE

DQL

数据查询语言

  • SELECT

DCL

数据控制语言

  • GRANT

  • REVOKE

MYSQL 基本命令

1
2
3
4
5
6
7
8
9
10
11
SHOW DATABASES; -- 显示所有的数据库

use 数据库名 -- 切换数据库

show tables; -- 显示数据库中的所有表

desccribe(简写成desc也可以) 表名; -- 显示表信息

create database 数据库名; -- 快速创建一个数据库

exit -- 退出连接

操作数据库

创建数据库

1
2
3
CREATE DATABASE test; -- 创建数据库

CREATE DATABASE IF NOT EXISTS test; -- 如果不存在则创建数据库

使用数据库

1
use 数据库名 -- 切换数据库

删除数据库

1
2
3
DROP DATABASE test; -- 删除数据库

DROP DATABASE IF EXISTS test -- 如果存在则删除

数据库列的类型

数值

tinyint 1个字节 十分小的数据

smallint 2个字节 较小的数据

mediumint 3个字节 中等大小的数据

int 4个字节 标准的整数 常用

bigint 8个字节 较大的数据

float 4个字节 浮点数

double 8个字节 浮点数

decimal 字符串形式的浮点数 用在金融上

字符串

char 字符串固定大小的0 ~ 255

varchar 可变字符串 0 ~ 65535 常用的变量

tinytext 微型文本 2^8 - 1

text 文本串 2^16-1 保存大文本

时间日期

data YYYY-MM-DD 日期格式

time HH:mm:ss 时间格式

datetime YY-MM-DD HH:mm:ss 最常用的时间格式

timestamp 时间戳、从1970年1月1日到现在的毫秒数

year 年份表示

null

null 没有值

数据库的字段属性

unsigned

unsigned 无符号整数 如果声明、该列不能为负数

zerofill

zerofill 0填充的 不足的位数、使用0来填充

int(6) 6 000006

自增

自增 自动在一条记录基础上 + 1 通常设计唯一的主键 index必须是整数类型

非空

not null 如果设置not null、如果不给它赋值、就会报错 null不给予值、默认就是null

默认

默认 设置默认值、如果不指定其别的值、就是默认值不变

创建数据库的表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- 表名称 和 字段 尽量使用 `` 飘号括起来
-- AUTO_INCREMENT 自增
-- 字符串必须使用单引号''括起来
-- COMMENT 字段描述
-- PRIMARY KEY 主键
-- NOT NULL 不为空
-- DEFAULT 默认
CREATE TABLE IF NOT EXISTS `student`(
`id` int(6) NOT NULL AUTO_INCREMENT COMMENT '学号',
`username` varchar(12) NOT NULL DEFAULT '小博' COMMENT '用户名',
`password` varchar(16) NOT NULL DEFAULT 'xiaobo' COMMENT '密码',
`birthday` datetime DEFAULT NULl COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT '地址',
PRIMARY KEY(`id`)
)ENGINE = INNODB DEFAULT CHARSET=utf8

每个表必须要有的五个字段

id 主键

version 乐观锁

is_delete 伪删除

gmt_create 创建时间

gmt_update 更新修改时间

查看创建数据库的语句

1
SHOW CREATE TABLE student -- 查看创建表的语句

数据表的类型

INNODB 默认使用

MYISAM 早期使用的

INNDB 和 MYISAM 的区别

MYISAM INNODB
事务支持 不支持 支持
数据行锁定 不支持 支持
外键约束 不支持 支持
全文索引 支持 不支持
表空间大小 较小 较大 约MYISAM的2倍

物理空间

所有的数据库文件都存在data目录下、一个文件就对应一个数据库

本质是文件的存储

Innodb物理文件

Innodb 在数据库表中有一个*.frm文件、和上级目录中的ibdata1文件

MYISAM物理文件
*.frm 表结构的定义文件

*.MYD 数据文件(data)

*.MYI 索引文件(index)

数据库表的字符集

CHARSET=UTF8

mysql数据库表要设置字符集编码、否则默认的Latin1字符集编码不支持中文、所以要设置utf8

my.inn配置文件也可已配置、但是这个是物理层面上设计的、不通用、所以为了增强、表层面上也要设置

修改和删除表

修改表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-- ALTER TABLE 原表名 RENAME 新表名
ALTER TABLE `student` RENAME `student1` -- 重命名表

ALTER TABLE `student1` RENAME `student`

-- ALTER TABLE 表名 ADD 列属性 列属性类型
ALTER TABLE `student` ADD `age` INT(2) -- 添加表字段

-- ALTER TABLE 表名 MODIFY 列属性 新列属性类型
ALTER TABLE `student` MODIFY `age` VARCHAR(5) -- 修改列属性

-- ALTER TABLE 表名 CHANGE 原列属性名 新列属性名 新列属性类型
ALTER TABLE `student` CHANGE `age` `age1` INT(2) --重命名列属性

-- CHANGE 用来字段重命名、不能修改字段类型和约束

-- MODIFY 用来修改字段类型和约束、不能用来字段重命名

-- ALTER TABLE 表名 DROP 列属性名
ALTER TABLE `student` DROP age1 -- 删除列属性

CHANGE 用来字段重命名、不能修改字段类型和约束

MODIFY 用来修改字段类型和约束、不能用来字段重命名

删除表

1
2
3
4
-- DROP TABLE 表名
DROP TABLE `student` -- 删除一个表

DROP TABLE IF EXISTS `student` -- 如果存在这个表则删除

所有创建和删除操作尽量加上判断

mysql数据管理

DML

插入数据

1
2
-- INSERT INTO 表名(字段名) VALUES(与字段名一一对应的要插入的数据)
INSERT INTO `student`(username,password,birthday,address,clazzid) VALUES('xiaobo','xiaobo','2001-04-06','辽宁省铁岭市昌图县',1),('xiaobo','xiaobo','2001-04-06','辽宁省铁岭市昌图县',1);

更新数据

1
2
-- UPDATE 表名 SET 要修改的字段 = 要修改的值 WHEERE 根据哪个字段修改的名字 = 值
UPDATE `student` SET username = '小博' WHERE id = 2
操作符 含义
BETWEEN AND 区间范围
AND 我和你的意思
OR 我或你的意思

删除数据

1
2
3
4
5
6
7
8
9
10
-- DELETE FROM 表名 WHERE 根据哪个字段删除的名字 = 值
DELETE FROM `student` WHERE id = 3

TRUNCATE `student` -- 清空数据
-- DELETE 和 TRUNCATE 区别
-- DELETE 自增记录保留
-- 如果使用的是INNODB引擎、重启数据库时会从1自增开始(存在内存中、断电即使)
-- 如果使用的是MYISAM引擎、重启数据库时会继续从上一个自增量开始自增(存在文件中、不会丢失)

-- TRUNCATE 自增记录清空、从一开始

外键

创建时添加外键

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
-- 表名称 和 字段 尽量使用 `` 飘号括起来
-- AUTO_INCREMENT 自增
-- 字符串必须使用单引号''括起来
-- COMMENT 字段描述
-- PRIMARY KEY 主键
-- NOT NULL 不为空
-- DEFAULT 默认
-- CONSTRAINT 约束
-- FOREIGN KEY 外键
-- REFERENCES 参照
CREATE TABLE IF NOT EXISTS `student`(
`id` int(6) NOT NULL AUTO_INCREMENT COMMENT '学号',
`username` varchar(12) NOT NULL DEFAULT '张三' COMMENT '用户名',
`password` varchar(16) NOT NULL DEFAULT 'xiaobo' COMMENT '密码',
`birthday` datetime DEFAULT NULl COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT '地址',
`clazzid` INT(11) NOT NULL COMMENT '班级编号',
PRIMARY KEY(`id`),
CONSTRAINT `FK_clazzid` FOREIGN KEY (`clazzid`) REFERENCES `clazz` (`clazzid`)

)ENGINE = INNODB DEFAULT CHARSET=utf8

CREATE TABLE IF NOT EXISTS `clazz`(

`clazzid` INT(11) NOT NULL AUTO_INCREMENT COMMENT '班级编号',
`clazzname` varchar(11) NOT NULL COMMENT '班级名',
PRIMARY KEY(`clazzid`)

)ENGINE = INNODB DEFAULT CHARSET=utf8

修改时创建外键

1
2
3
-- 修改时添加外键
ALTER TABLE `student`
ADD CONSTRAINT `FK_clazzid` FOREIGN KEY(`clazzid`) REFERENCES `clazz`(`clazzid`)

删除外键时、要先删除引用被人的表(从表)、再删除被引用的表(主表)

正确的开始、微小的长进、然后持续、嘿、我是小博、带你一起看我目之所及的世界……

-------------本文结束 感谢您的阅读-------------

本文标题:mysql-基础

文章作者:小博

发布时间:2021年11月13日 - 20:43

最后更新:2021年11月13日 - 20:45

原始链接:https://codexiaobo.github.io/posts/181837817/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。