MySQL

1、初识MySQL

后台:(连接点:连接数据库JDBC,连接前端,控制,控制视图跳转,给前端传递数据)

数据库(存数据 txt,excel word)

只会写代码,只是码农。学好数据库要了解操作系统、数据结构与算法!

1.1、为什么学习数据库

1、大数据时代,得数据者得天下。

2、存数据(被迫需求)

3、数据库是所有软件体系中最核心的存在 DBA

1.2、什么是数据库

数据库(DB、DataBase)

概念:数据仓库,软件,安装在操作系统之上 SQL 可以存储大量数据 500万以上数据需要优化

作用:存储数据,管理数据

1.3 数据库分类

关系型数据库:SQL

  • MySQL 、Oracle、 Sql Server、 DB2、 SQLlite
  • 通过表和表之间,行和列之间的关系进行数据的存储。

非关系型数据库:NO SQL

  • Redis 、MongDB
  • 非关系型数据库,对象存储,通过对象的自身的属性来决定

DBMS(数据库管理系统)

  • 数据库管理软件,科学有效的管理我们的数据。维护和获取数据
  • MySQL

1.4 MySQL

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

1.5 安装MySQL

教程:参考docker

1.6 安装SQLyog

SQLyog 旗舰版序列号

注册名:kuangshen

注册码:8d8120df-a5c3-4989-8f47-5afc79c56e7c

本地可以连接mysql,远程连接报错1045解决方案

img

1.Linux本地登录

./mysql -uroot -p密码

2.进入成功以后找到表user:

use mysql;

3.给mysql添加权限

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '远程登录密码' WITH GRANT OPTION;                      # 远程登录密码  设定远程登录的密码
 
'%' 表示所有ip都可以远程访问
 
GRANT ALL PRIVILEGES ON *.* TO 'root'@'ip' IDENTIFIED BY '远程登录密码' WITH GRANT OPTION;
 
'ip'表示某个ip可以远程访问

4.退出且重启mysql服务器

\q 
 
service mysql restart

默认的数据库不要动

在这里插入图片描述

在这里插入图片描述

每一个SQLyog的执行操作,本质就是对应一个sql语句执行,可以在SQLyog中“历史记录”查看

创建数据库

CREATE DATABASE `school`CHARACTER SET utf8 COLLATE utf8_general_ci; 

在这里插入图片描述

创建表

CREATE TABLE `school`.`student` ( `id` INT(10) NOT NULL COMMENT '学员ID', `name` VARCHAR(100) COMMENT '学院姓名', `age` INT(2) COMMENT '学员年龄', PRIMARY KEY (`id`) ) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_general_ci;

在这里插入图片描述

查看表

在这里插入图片描述

在这里插入图片描述

# 填写数据
INSERT INTO `school`.`student` (`id`, `name`, `age`) VALUES ('2', 'tomsolw', '19');
# 删除数据
DELETE FROM `school`.`student` WHERE `id` = '2';

1.7 连接数据库

命令行连接数据库

mysql -uroot -p123456  -- 连接本地MySQL

# 修改密码命令
update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';

#刷新权限
flush privileges;
-----------------------------------------------------------
-- * 所有语句都用;结尾

show databases; -- 查看所有数据库

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

show tables;  -- 查看数据库中所有的表

describe student; -- 显示数据库中所有表的信息

create database westos; -- 创建数据库westos

exit; --退出连接

--  -- SQL单行注释
/*  */ -- SQL多行注释

数据库XXX语言 CRUD 增删改查!

DDL 定义语言

DML 操作语言

DQL 查询语言

DCL 控制语言

2、操作数据库

操作数据库 -> 操作数据库中的表 -> 操作数据库中表的数据

MySQL关键字不区分大小写

2.1、操作数据库

1、创建数据库

CREATE	DATABASE [IF NOT EXISTS] westos    -- [] 为可选项

2、删除数据库

DROP DATABASE IF EXISTS westos

3、使用数据库

`` -- ~键位,如果你的表名或者字段名是一个特殊字符,就需要用 `` use `school`

4、查看数据库

show database  -- 查看所有数据库

对比SQLyog 的操作

  • 对照sqlyog可视化历史记录查看操作
  • 固定语法或关键字必须要强行记住

2.2 数据库的列类型

数值

  • 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

时间日期

java.util.Date

  • date YYYY-MM-DD ,日期
  • time HH:mm:ss ,时间格式
  • datetime YYYY-MM-DD HH:mm:ss 最常用的时间格式
  • timestamp 时间戳 1970.1.1 到现在的毫秒数 较为常用
  • year 年份表示

null

  • 没有值,未知
  • 注意,不要使用NULL进行运算,参与运算结果为NULL

2.3 数据库字段属性 (重点)

在这里插入图片描述

Unsigned:

  • 无符号的整数
  • 声明该列不能为负数

zerofill:

  • 0填充
  • 不足的位数,使用0来填充 int(3), 5 — 005

自增:

  • 通常理解为自增,自动在上一条记录的基础上+1(默认)
  • 通常用来设计唯一的主键 index,必须时整数类型
  • 可以自定义设计主键自增的起始值和步长

非空 NULL not null

  • 假设设置为not null 如果不赋值,就会报错!
  • NULL ,如果不填写值 默认为NULL

默认:

  • 设置默认值 例如: sex 默认值为男 如果不指定该值 则会用默认值

拓展:听听就好

每个表都必须存在以下五个字段! 未来做项目用的,表示记录存在在的意义

id 主键

‘version’ 乐观锁

is_delete 伪删除

gmt_create 创建时间

gmt_update 修改时间

2.4 创建数据库表

-- 目标:创建一个shool数据库-- 创建学生表(列,字段) 使用sql创建-- 学号int 登录密码 varchar(20) 姓名,性别varchar(2) 出生日期datatime 家庭住址 邮箱-- 注意点,使用英文() 表的名称和字段 尽量使用 `` 括起来-- 字符串使用单引号括起来-- 所有的语句后面加,(英文的)最后一个字段不用加,-- PRIMARY KEY 主键 一般一个表只有一个唯一的主键!CREATE TABLE IF NOT EXISTS `student` ( `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号', `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名', `pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码', `sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别', `birthday` DATETIME DEFAULT NULL COMMENT '出生日期', `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址', `email` VARCHAR(50) DEFAULT NULL COMMENT'邮箱', PRIMARY KEY (`id`))ENGINE=INNODB DEFAULT CHARSET=utf8

格式

CREATE TABLE [IF NOT EXISTS] `表名` (	`字段名` 列类型[属性][索引][注释],    ……    `字段名` 列类型[属性][索引][注释],)[表类型][字符集设置][注释]

参考格式 (参考已创建的数据库和表)

SHOW CREATE DATABASE school -- 查看创建数据库的语句CREATE DATABASE `school` /*!40100 DEFAULT CHARACTER SET utf8 */SHOW CREATE TABLE student  -- 查看创建表的语句CREATE TABLE `student` (  `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',  `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',  `pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',  `sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',  `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',  `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',  `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',  PRIMARY KEY (`id`)) ENGINE=INNODB DEFAULT CHARSET=utf8DESC student -- 显示表的结构

2.5 数据表的类型

-- 关于数据库引擎INNODB -- 默认使用MYISAM -- 早期版本使用
MYISAMINNODB
事务支持不支持支持
数据行锁定不支持支持
外键约束不支持支持
全文索引支持不支持
表空间大小较小较大 约为MYISAM 2倍

常规使用操作:

  • MYISAM 节约控件,速度较快
  • INNODB 安全性高,事务的处理,多表多用户操作

在物理空间存在的位置

所有的数据库文件都存在data文件夹下 一个文件夹对应一个数据库

本质文件存储

MySQL引擎在物理文件上的区别

  • innoDB 在数据库表中只有 *.frm文件,以及上级目录下的idbata1文件
  • MYISAM对应文件.frm -表结构定义文件,.myd 数据文件(data) .myi 索引文件(index)

设置数据库表的字符集编码

CHARSET=utf8

不设置mysql会使用默认的字符集编码 (不支持中文)

2.6 修改删除表

修改

ALTER TABLE student RENAME AS students     -- 修改表名 ALTER TABLE 旧表名 RENAME AS 新表名ALTER TABLE student ADD age INT(11)     -- 增加表字段 ALTER TABLE 表名 ADD 字段名 列属性ALTER TABLE student MODIFY age VARCHAR(11)  -- 修改表字段 (修改约束)ALTER TABLE student CHANGE age age1 INT(1)   -- 修改表字段重命名 ALTER TABLE student DROP age -- 删除表字段

删除

DROP TABLE IF EXISTS student    -- 删除表(如果表存在再删除)

所有的创建和删除操作都尽量加上判断,以免报错

3、MySQL数据管理

3.1、外键(了解即可)

方式一 在创建表的时候,增加约束(麻烦、比较复杂,不建议使用)

CREATE TABLE `grade` ( `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT'年级id', `gradename` VARCHAR(50) NOT NULL COMMENT'年级名称', PRIMARY KEY (`gradeid`))ENGINE=INNODB DEFAULT CHARSET=utf8-- 学生表的gradeid字段 要去引用年级表的gradeid-- 定义外键KEY-- 给这个外键添加约束(执行引用) references 引用CREATE TABLE `student` (  `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',  `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',  `pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',  `sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',  `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',  `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',  `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',  `gradeid` INT(10) NOT NULL COMMENT'年级',    PRIMARY KEY (`id`),    KEY `FK_gradeid` (`gradeid`),    CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`)) ENGINE=INNODB DEFAULT CHARSET=utf8

方式二 创建表成功后 添加外键约束

CREATE TABLE `grade` ( `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT'年级id', `gradename` VARCHAR(50) NOT NULL COMMENT'年级名称', PRIMARY KEY (`gradeid`))ENGINE=INNODB DEFAULT CHARSET=utf8-- 学生表的gradeid字段 要去引用年级表的gradeid-- 定义外键KEY-- 给这个外键添加约束(执行引用) references 引用CREATE TABLE `student` (  `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',  `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',  `pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',  `sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',  `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',  `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',  `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',  `gradeid` INT(10) NOT NULL COMMENT'年级',    PRIMARY KEY (`id`)) ENGINE=INNODB DEFAULT CHARSET=utf8-- 创建表的时候没有外键关系ALTER TABLE `student`ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`);-- alter table 表 add constraint 约束名 foreign key (作为外键的列) references 哪个表(哪个字段);

以上的操作都是物理外键,数据库级别的外键,我们不建议使用!(避免数据库过多造成困扰)

最佳实践

  • 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
  • 外键使用用程序实现

3.2、DML语言(全部记住)

数据库意义: 数据存储,数据管理

DML语言:数据操作语言

  • inset
  • update
  • delete

3.3 、添加

insert

-- 插入语句(添加)-- insert into 表名([字段1,字段2,字段3,……]) values ('值1'),('值1'),('值1'),……INSERT INTO `grade` VALUES ('大三')-- 插入多个字段INSERT INTO `grade`(`gradename`) VALUES ('大二'),('大一')INSERT INTO `student`(`name`) VALUES ('张三')INSERT INTO `student`(`name`,`pwd`,sex) VALUES ('张三','aaaaaa','男')INSERT INTO `student` (`name`,`pwd`,sex)VALUES ('李四','abcdef','男'),('王五','kkkkkk','男')

注意事项:

  1. 字段和字段之间用英文符合
  2. 字段是可以省略的,但值必须一一对应,不能少
  3. 可以同时插入多条数据,VALUES值需要使用英文逗号隔开VALUES(值1),(值2)

3.4、修改

update 依据(条件) set原值=新值

-- 修改学员名字UPDATE `student` SET `name`= 'XXX' WHERE id = 1-- 不指定条件的情况下,会改动所有表UPDATE `student` SET `name`= 'XXX'-- 修改多个属性UPDATE `student` SET `name`= 'XXX',`email`='XXX@qq.com' WHERE id = 1

条件:where 子句 运算符 id等于某个值,大于某个值在某个区间……

操作符会返回布尔值

操作符含义范围结果
=等于1=2false
<> 或 !=不等于5 != 6true
>大于
<小于
>=大于等于
<=小于等于
BETWEEN …… AND……区间2 AND 5true
AND条件和
OR

注意事项:

  • colnum_name(列)是数据库的列名,尽量带上``
  • 条件,筛选条件,如果没有指定,则会修改所有的列
  • value,是一个具体的值,也可以是一个变量
  • 多个设置的属性之间,使用英文逗号隔开
UPDATE `student` SET `birthday`=CURRENT_TIME WHERE `name` = 'XXX' AND  `sex` = '女'

3.5、删除

delete

语法:delete from 表名 [where 条件]

-- 删除数据DELETE FROM `student` WHERE id = 1-- 清空 student 表TRUNCATE `student`

delete 和 truncate 区别

  • 相同点,都能删除数据,都不会删除表结构
  • 不同:
    • TRUNCATE 重新设置 自增列 计数器会归零
    • TRUNCATE 不会影响事务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值