mysql基础

mysql笔记v-1.0

1.0 初识数据库

1.1 为什么学习数据库

  1. 岗位技能需求
  2. 得数据者得天下
  3. 存储数据的方法
  4. 程序网站中,大量的数据需要长久保存
  5. 数据库几乎是软件体系中最核心的一个存在

1.2 什么是数据库

数据库(database,简称DB)

概念:长期存放在计算机内,有组织。可共享的大量数据的集合,是一个数据的“仓库”

作用:保存,并能安全管理数据(如:增删改查),减少冗余,,,

数据库总览:

  • 关系型数据库(SQL)
    • mysql,oracle,SQL server ,SQLlite,DB2.....
    • 关系型数据
  • 非关系型数据库(NOSQL)
    • redis,MongoDB,.....
    • 关系型数据库通常指数据一对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定

1.3 什么是DBMS

数据库管理系统(database manager system)

数据库管理软件,科学组织和存储数据,高效的获取和维护数据。

image-20230724003455512

mysql就算是一个数据库管理系统

1.4 MySQL简介

image-20230724003707957

概念:现在流行的开源的,免费的,关系型的数据

历史:有瑞典MySQ AB 公司开发,目前属于oracle旗下产品

特点:

  • 免费,开源
  • 小巧,,功能齐全
  • 使用便捷
  • 可运行Windows和Linux操作系统
  • 官网:https://www.mysql.com

1.5 安装MySQL

这里使用压缩版安装,因为比较方便,安装快,不复杂

1,软件下载

MySQL5.5 64位: https://cdn.mysql.com//archives/mysql-5.7/mysql-5.7.19-winx64.zip

2,步骤

1,下载后得到zip压缩包

image-20230724004619315

2,解压到自己要安装软件的目录

image-20230724004912512

D:\app\mysql5.7

3,添加环境变量

我的是win11系统,和win10 有些不一样,具体步骤如图

在桌面点击 -->此电脑(右键)-->属性-->系统信息-->高级系统设置,

image-20230724005821360

image-20230724005844472

依次点击,添加完后要记住退出保存

image-20230724010323595

至此,mysql的环境变量就配置完成了

3,编辑 my.ini 文件,注意替换路径位置

image-20230724010716057

如果文件格式有问题,看不到后缀名,设置下显示文件后缀名就可以了

image-20230724010839242

打开配置文件,添加以下内容,

  • basedir填自己的mysql的地址

    image-20230724011613951

  • database 也修改下,之后会自动生成这个目录

  • skip-grant-tables #意思是跳过密码验证,添加密码之后是要注释掉的,目前不改动

[mysqld]
basedir=D:\app\mysql5.7\
datadir=D:\app\mysql5.7\data\
port=3306
skip-grant-tables

5,启动管理员模式下的CMD,并将路径切换到mysql下的bin目录,然后输入 mysqld –install 安装mysql


D:\app\mysql5.7\mysql-5.7.19-winx64\bin>  cd /d  D:\app\mysql5.7\mysql-5.7.19-winx64/bin  #Windows下进入目录也可以使用cd命令,和Linux很像,不过要加一个 /d  

D:\app\mysql5.7\mysql-5.7.19-winx64\bin> mysqld -install
Service successfully installed.   #安装成功了!

D:\app\mysql5.7\mysql-5.7.19-winx64\bin>

6、再输入 mysqld --initialize-insecure --user=mysql 初始化数据文件

7、再次启动mysql net start mysql ,然后用命令 mysql –u root –p 进入mysql管理界面(密码可为空),直接回车就可以进入mysql了。

image-20230724015104615

  • 出现无法启动的问题,输入 mysqld --initialize-insecure 之后就可以启动成功了。这步在mysql的根目录下自动创建了data文件夹以及相关的文件

8、进入界面后更改root密码

学习阶段修改为 123456 吧,和博主同步。

update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';

9,刷新下权限

flush privileges;

10、修改 my.ini文件删除最后一句skip-grant-tables

11、退出数据库exit,重新启动mysql net stop mysql net start mysql即可正常使用

image-20230724015903302

两种登录方式

image-20230724020115662

12,注释掉 my.ini 文件的跳过密码验证

image-20230724020509236

此时mysql就安装好了。

之后使用的的一个SQLyog的连接数据库的软件

1.6 SQLyog

1,安装和使用推荐这个博客:https://www.cnblogs.com/pengpengdeyuan/p/14364777.html

这个没什么好说的,如果之后有时间详细写写吧。

登录界面:

image-20230724021642497

登录进去就是这个效果:

image-20230724021602136

使用SQLyog管理工具自己完成以下操作 :

  • 连接本地MySQL数据库

  • 新建MySchool数据库

    image-20230724022925278

    image-20230724023336712

    • 数据库名称MySchool

    • 新建数据库表(grade)

      • 字段

        • GradeID : int(11) , Primary Key (pk)

        • GradeName : varchar(50)

      image-20230724023703451

在历史记录中可以看到相对应的数据库操作的语句 .

image-20230724023914464

添加完数据之后要点击下刷新,然后保存即可、

image-20230724024111812

1.7 连接数据库

命令行连接

mysql -uroot -p -- -p后面添加密码,或者按照上面的方法连也可以的。都是一样的。
--sql 中‘--’代表一行的注释

image-20230724024537054

常用命令

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

show database;   --查看所有的数据库

use dbname;    --使用某一个数据库‘dbname代表的是数据库名’

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

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

create database name; -- 创建数据库

use databasename; 选择数据库

exit    --退出mysql

--  表示注释

2.0 操作数据库

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

2.1 结构化查询语句分类

mysql数据库的命令不分大小写

名称 解释 命令
DDL (数据定义语言) 定义和管理数据对象,如数据库,数据表等 create,drop,alter
DML(数据操作语言) 用户操作数据库对象中所包含的数据 Iinsert,update,deletc
DQL (数据查询语言) 用于查询数据库数据 select
DCL(数据控制语言) 用于管理数据库的语言,包括管理权限和数据更改 grant,commit,rollback

2.2 数据库操作

创建数据库:create databases [if not exists] 数据库名;

image-20230726201224159

删除数据库:drop databases [if exists] 数据库名;

查看数据库:show databases;

使用数据库:use 数据库名

2.3 创建数据表

属于DDL一种,语法:

create table [if not exists] `表名`(
	'字段名1' 列类型 [属性][索引][注释],
	'字段名2' 列类型 [属性][索引][注释],
	#...
	'字段名n' 列类型 [属性][索引][注释]
)[表类型][表字符集][注释];

说明:反引导用于区别MySQL保留字与普通字符而引入的 ` 符号

2.4 数据值和列类型

列类型:规定数据中该列存饭的数据类型

数值类型

类型 说明 取值范围 存储需求
tinyint 非常小的数据 1个字节
smallint 较小的数据 2字节
mediumint 中等大小的数据 3字节
int 标准整数 4字节
bigint 较大的整数 8字节
fioat 单精度浮点数 4字节
double 双精度浮点数 8字节
decimal 字符串形式的浮点数,金融计算使用较多 decimal(m,d) m个字节

字符串类型

类型 说明 最大长度
char 固定长字符串,检索快但是废空间 0~255
varchar 可变字符串 0~65535
tinytext 微型文本串 2^8 -1
text 文本串 2^16 -1

日期的时间型和数值类型

类型 说明 取值范围
date yyyy-mm-dd 日期格式
time Hh:mm:ss 时间格式
datetine yyyy-mm-dd Hh:mm:ss 常用的时间格式
datestamp yyyy格式的年份值 1970,1,1 毫秒级别 的数值类型
year yyyy格式的年份值 1901~2155

null

  • 理解为“没有值”,或者“未知值”
  • 不要使用null进行运算,否则结果仍为null

2.5 数据字段属性

unsigned

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

zerofil

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

自增

通常理解为自动在上一条记录上的基础上 +1 (默认)

  • 用来设计唯一的主键~index ,必须是整数类型
  • 可以自定义设计主键的起始值和步长

非空null not null

  • 设置为null not ,如果不赋值,就会报错
  • null,如果不写值,默认就是null

默认

  • 设置默认的值
  • sex ,默认为 男 ,如果不指定该列的值,则会有默认的值。
-- 目标 : 创建一个school数据库
-- 创建学生表(列,字段)
-- 学号int 登录密码varchar(20) 姓名,性别varchar(2),出生日期(datatime),家庭住址,email
-- 创建表之前 , 一定要先选择数据库
-- auto incerememt 自增
-- PRIMARY KEY 主键
 
CREATE TABLE IF NOT EXISTS `student4` (
  `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;

-- 查看数据库的定义
SHOW CREATE DATABASE school;
-- 查看数据表的定义
SHOW CREATE TABLE student;
-- 显示表结构
DESC student; -- 设置严格检查模式(不能容错了)SET
sql_mode='STRICT_TRANS_TABLES';

sqlyog的执行效果图片:

image-20230724142151165

2.6 数据库的类型

设置数据库的类型

MySQL的数据表的类型,myisam,innodb,bob,cvs,等.....

常见的myisam 与inndb类型:

名称 myisam innoDB
事务处理 不支持 支持
数据行锁定 不支持 支持
外键约束 不支持 支持
全文索引 支持 不支持
表空间大小 较小 较大,约2倍

适应场景:

  • MyiSAM L:节约空间及响应速度
  • InnDB:安全性,事务处理以及多用户操作数据表

数据表的存储位置

  • MySQL数据表以文件的方式村子磁盘中
    • 包括表文件,数据文件,以及数据库中的选项文件
    • 位置:MySQL安装目录\data\下存放数据表,目录对应数据库名,该目录下文件名对应数据表
  • 注意:
    • InnoDB 类型的数据表只有一个*.frm文件,以及上一级目录的ibdata文件
    • MyISAM类型数据表对应三个文件:
      • *frm --表结构对应文件
      • *MYD --数据文件(data)
      • *.MYI --索引文件(index)
    • image-20230724151421879

设置数据表的字符集

  • 可以命令来设置,create table 表名(CHATSET)=utf8;
  • 如无设定,可以在MySQL数据库配置文件my.ini中参数设定

2.7 修改数据库

修改

--修改表名:ALTER TABLE 旧表名 RENAME AS 新表名

ALTER TABLE `student4` RENAME AS `student4.1`;

--增加表的字段:alter TABLE 表名 ADD 字段名 列属性

ALTER  TABLE `student4.1` ADD age INT(11);

--修改表的字段(重命名,修改约束)
--  alter table 表名 modify 字段名 列属性
ALTER TABLE `student4.1` MODIFY age VARCHAR(11) --修改约束

-- alter table 表名 change 旧名字 新名字 列属性
ALTER TABLE `student4.1` CHANGE age age1 INT(1); --字段重命名


--删除表的字段:alter TABLE 表名 DROP 在、字段名
ALTER TABLE `student4.1` DROP age1;

3.0 MySQL数据管理

3.1 外键

概念

如果公共关键字在一个关系中是主关键字,那么这个公共关键字被另一个关键字称之为另一个关键字的外键,由此可见,外键表示了两个关系之间的相关联系,以另一个关系的外键作用作为主关键字的表称为主表,具有此外键的表称之为主表的从表

在实际操作中,将一个表放入到第二个表表示关联,所使用的值是第一个表的主键值(在必要的时打包包括复合主键值),此时第二个表中保存这些值称之为外键(foreign key)

外键作用

保持数据的一致性完整性,主要的目的是控制存储在外键表中的数据,约束,是两张表形成关联,外键只能引用表中列的值或者使用空值。

创建外键

-- 创建外键的方式一 : 创建子表同时创建外键
-- 年级表 (id\年级名称)

CREATE TABLE `grade4` (
  `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
  `gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
  PRIMARY KEY (`gradeid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `student4` (
  `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 '邮箱',
  `idcard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
  `gradeid` INT(10) NOT NULL COMMENT '年级id',
  PRIMARY KEY (`id`),
  KEY `FK_gardeid` (`gradeid`),
  CONSTRAINT `FK_gardeid` FOREIGN KEY (`gradeid`) REFERENCES `grade4` (`gradeid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

ALTER DATABASE 数据库名
ENGINE=INNODB
DEFAULT CHARSET=utf8;建表后修改

image-20230725001637065

3.2 DML 语言(全部记住)

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

管理数据库的数据方法:

  • 通过可视化工具(sqlyog)等一些其他类似的工具管理
  • 通过DML语句管理数据库数据

DML语言:数据库操作语言

  • 用于操作数据库中对象锁包含的数据
  • 包括:
    • insert(添加数据语句)
    • update(更新数据语句)
    • delete(删除数据语句)

3.3 添加语句

数据库语句:

insert 命令

语法:


3.3 删除

delete命令

语法:

delect from 表名 [where condition];

condition为筛选条件,如不指定则删除该表的所有数据

truncate 命令

作用:用于完全清空表数据,但是表结构,索引,约束等不变。

语法:

truncate [table] table_name;
-- 清空年级表
truncate grade;

注意;区别delete命令

  • 相同:都能删除数据,不删除表结构,但truncate速度更快
  • 不通:
    • 使用truncate table 重新设置auto_increment计数器
    • 使用truncate table不会对事务有影响

测试:

-- 创建一个school数据库
CREATE DATABASE IF NOT EXISTS `school`;

USE `school`;-- 创建学生表
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`(
	`studentno` INT(4) NOT NULL COMMENT '学号',
    `loginpwd` VARCHAR(20) DEFAULT NULL,
    `studentname` VARCHAR(20) DEFAULT NULL COMMENT '学生姓名',
    `sex` TINYINT(1) DEFAULT NULL COMMENT '性别,0或1',
    `gradeid` INT(11) DEFAULT NULL COMMENT '年级编号',
    `phone` VARCHAR(50) NOT NULL COMMENT '联系电话,允许为空',
    `address` VARCHAR(255) NOT NULL COMMENT '地址,允许为空',
    `borndate` DATETIME DEFAULT NULL COMMENT '出生时间',
    `email` VARCHAR (50) NOT NULL COMMENT '邮箱账号允许为空',
    `identitycard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
    PRIMARY KEY (`studentno`),
    UNIQUE KEY `identitycard`(`identitycard`),
    KEY `email` (`email`)
)ENGINE=MYISAM DEFAULT CHARSET=utf8;


-- 创建年级表
DROP TABLE IF EXISTS `grade`;
CREATE TABLE `grade`(
	`gradeid` INT(11) NOT NULL AUTO_INCREMENT COMMENT '年级编号',
  `gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
    PRIMARY KEY (`gradeid`)
) ENGINE=INNODB AUTO_INCREMENT = 6 DEFAULT CHARSET = utf8;

-- 创建科目表
DROP TABLE IF EXISTS `subject`;
CREATE TABLE `subject`(
	`subjectno`INT(11) NOT NULL AUTO_INCREMENT COMMENT '课程编号',
    `subjectname` VARCHAR(50) DEFAULT NULL COMMENT '课程名称',
    `classhour` INT(4) DEFAULT NULL COMMENT '学时',
    `gradeid` INT(4) DEFAULT NULL COMMENT '年级编号',
    PRIMARY KEY (`subjectno`)
)ENGINE = INNODB AUTO_INCREMENT = 19 DEFAULT CHARSET = utf8;

-- 创建成绩表
DROP TABLE IF EXISTS `result`;
CREATE TABLE `result`(
	`studentno` INT(4) NOT NULL COMMENT '学号',
    `subjectno` INT(4) NOT NULL COMMENT '课程编号',
    `examdate` DATETIME NOT NULL COMMENT '考试日期',
    `studentresult` INT (4) NOT NULL COMMENT '考试成绩',
    KEY `subjectno` (`subjectno`)
)ENGINE = INNODB DEFAULT CHARSET = utf8
posted @ 2023-08-05 07:45  浅~~  阅读(13)  评论(0)    收藏  举报