MySQL学习笔记

本文是一篇详尽的MySQL学习笔记,涵盖了数据库分类、MySQL的安装与使用、数据类型、表的操作、DML和DQL语言、外键、事务处理、索引原理等内容,旨在帮助读者深入理解和掌握MySQL数据库的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库MySQL教程

  • 数据库(DB,DataBase)
  • 数据仓库,可以存储大量数据,系统软件,安装在操作系统之上,SQl语句
  • 存储数据,管理教程

数据库分类

  • 关系型数据库:(SQL)
    • 如MySQL,Oracle,SQL server,DB2,SQLlite
    • 通过表和表之间,行和列之间的关系进行数据的存储,如学员信息表,考勤表
  • 非关系型数据库:(nosSQL:not only SQL)
    • redis,mongodb
    • 通过对象存储,通过对象的自身属性来决定

DBMS(数据库管理系统)

  • 能够科学有效管理、维护和获取数据
  • MySQL
MySQL简介

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

历史 : 由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。

特点 :

  • 免费 , 开源数据库
  • 小巧 , 功能齐全
  • 使用便捷
  • 可运行于Windows或Linux操作系统
  • 可适用于中小型甚至大型网站应用

官网

安装步骤

  1. 下好软件(安装包)添加环境变量:
选择PATH,在其后面添加: 你的mysql 安装文件下面的bin文件夹
  1. 编辑 my.ini 文件 ,注意替换路径位置
[mysqld]
basedir=D:\Program Files\mysql-5.7\
datadir=D:\Program Files\mysql-5.7\data\
port=3306
skip-grant-tables
  1. 启动管理员模式下的CMD,并将路径切换至mysql下的bin目录,然后输入mysqld –install (安装mysql)

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

  3. 然后再次启动mysql 然后用命令 mysql –u root –p 进入mysql管理界面(密码可为空)

  4. 进入界面后更改root密码

update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';
  1. 刷新权限
flush privileges;
  1. 修改 my.ini文件删除最后一句skip-grant-tables

  2. 重启mysql即可正常使用

net stop mysql
net start mysql
  1. 连接上测试出现以下结果就安装好了

    img

连接数据库

打开MySQL命令窗口

  • 在DOS命令行窗口进入 安装目录\mysql\bin
  • 可设置环境变量,设置了环境变量,可以在任意目录打开!(即直接在dos命令中输mysql指令)

连接数据库语句 : mysql -h 服务器主机地址 -u 用户名 -p 用户密码

注意 : -p后面不能加空格,否则会被当做密码的内容,导致登录失败 !

几个基本的数据库操作命令 :

mysql -uroot -p123456 --连接数据库

update user set password=password('123456')where user='root'; 修改密码


--所有语句都使用:结尾


flush privileges; --刷新数据库

show databases; --显示所有数据库

use dbname;--打开(选择)某个数据库

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

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

create database name; --创建数据库

exit; --退出Mysql
? 命令关键词 : 寻求帮助
-- 表示注释
/*
多行注释
*/

卸载mysql

卸载软件----删除安装路径的MySQL文件—删除隐藏文件programdata里面的MySQL-data文件

数据库xx语言

DDL 定义(Define)

DML 操作(Mansger)

DQL(主)查询(Query)

DCL 控制(Control)

CRUD增删改查 CRUD程序猿 CV程序猿 API程序猿

操作数据库

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

MySQL关键字不区分大小写

操作数据库

  1. 创建数据库
CREATE DATABASE [IF NOT EXISTS] school;
  1. 删除数据库
DROP DATABASE IF EXISTS school;
  1. 查看数据库
SHOW DATABASES;
  1. 使用数据库:
USE `school`

学习方法:

  • 对照SQLyog工具自动生成的语句学习
  • 固定语法中的单词需要记忆
  • img
数据值和列类型

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

数值类型

img

decimal 常用于金融计算

字符串

  • char 字符串固定大小的 0~255
  • varchar 可变字符串 0~65535 常用的 String
  • tinytext 微型微型文本 2^8-1
  • text 文本串 2^16-1 保存大文本

时间日期

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

null

  • 没有值,未知
  • 注意,不要使用NULL进行运算,结果为NULL
数据字段属性

创建一个新表:

image-20201023203509752

UnSigned

  • 适用于无符号的整数
  • 声明该数据列不允许负数 .

ZEROFILL

  • 0填充的
  • 不足位数的用0来填充 , 如int(3),5则为005(表示3位)

Auto_InCrement(自增)

  • 自动增长的 , 每添加一条数据 , 自动在上一个记录数上加 1(默认)

  • 通常用于设置主键(保证唯一) , 且为整数类型

  • 可定义起始值和步长

    • 当前表设置步长(AUTO_INCREMENT=100) : 只影响当前表
    • SET @@auto_increment_increment=5 ; 影响所有使用自增的表(全局)

NULL 和 NOT NULL

  • 默认为NULL , 即没有插入该列的数值
  • 如果设置为NOT NULL , 则该列必须有值

DEFAULT

  • 默认的
  • 用于设置默认值
  • 例如,性别字段,默认为"男" , 否则为 “女” ; 若无指定该列的值 , 则默认值为"男"的值
/*  每一个表都必须存在以下五个字段(了解)
id 主键
`version`  乐观锁
is_delete   伪删除
gmt_create  记录的创建时间
gmt_update  修改时间
*/
创建数据库表
-- 目标 : 创建一个school数据库
-- 创建学生表(列,字段)
-- 学号int 登录密码varchar(20) 姓名,性别varchar(2),出生日期(datatime),家庭住址,email

-- 创建表之前 , 一定要先选择数据库
-- 注意点:表的名称 和 字段 尽量用 反引号``括起来
-- 字符串使用单引号括起来
-- 所有语句后面以 , 结尾,最后一个不要加
-- comment :注释;  PRIMARY KEY(`id`):设置主键;
-- 执行建表语句时,注意use 对应数据库
CREATE TABLE IF NOT EXISTS `student`(
  `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
  `name` VARCHAR(30) NOT NULL DEFAULT'匿名' COMMENT'姓名',
  `pwd` VARCHAR(30) 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

创建表语法:

属于DDL的一种,语法 :

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

一些命令

SHOW CREATE DATABASE school  
SHOW CREATE TABLE student  -- 偷懒:可先执行可视化操作再查看创表语句,直接复制
DESC student  -- 查看表的结构
关于数据库引擎及一些设定(了解)
-- 关于数据库引擎
/*
INNODB  默认使用~ 	安全属性高,事物的处理,多表多用户操作
MYISAM  早些年使用  节约空间,速度较快
*/

在物理空间的存在位置

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

本质还是文件存储

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

  • innodb在数据库中只有一个*。frm文件,以及上级目录下的ibdata1文件
  • myisam 对应文件: *.frm ----表结构的定义文件; *. MYD 数据文件(data); *.MYI 索引文件(index)

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

在创表时写上CHARSET=utf8 ----推荐

不设置的话,会是mysql默认的字符集编码(Latin1 不支持中文)~

或在my.ini配置默认的编码:character-set-server=utf8

修改删除表
-- 修改表名 ALTER TABLE 旧表名 RENAME AS 新表名 
ALTER TABLE teacher RENAME AS teacher1
-- 增加表的字段  ALTER TABLE 表名 ADD 字段名 列属性[]
ALTER TABLE teacher1 ADD age INT(11)

-- 修改表的字段 (重命名修改约束)
-- ALTER TABLE 表名 MODIFY 字段名 列属性[]
-- ALTER TABLE 表名 CHANGE 字段名 列属性[]
ALTER TABLE teacher1 MODIFY age VARCHAR(11) -- 这边由 INT变为VARCHAR
ALTER TABLE teacher1 CHANGE age age1 INT(1) -- 这边同时修改了字段名及类型
-- modify 能够修改字段类型;而change 能同时修改字段名和类型

-- 删除表的字段 ALTER TABLE 表名 DROP 字段名
ALTER TABLE teacher1 DROP age1

-- 删除表 
DROP TABLE IF EXISTS teacher1

数据库管理

外键(了解)

外键概念

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

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

外键作用

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

创建外键

建表时指定外键约束

-- 创建外键的方式一 : 创建子表同时创建外键
-- 如这边学生年级数据通过建立外键由年级表引入
-- 年级表 (id\年级名称)
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

-- 学生信息表 (学号,姓名,性别,年级,手机,地址,出生日期,邮箱,身份证号)
CREATE TABLE `student` (
    `studentno` INT(4) NOT NULL COMMENT '学号',
    `studentname` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT'姓名',
    `sex` TINYINT(1) DEFAULT '1' COMMENT '性别',
    `gradeid` INT(10) DEFAULT NULL COMMENT '年级',
    `phoneNum` VARCHAR(50) NOT NULL COMMENT '手机',
    `address` VARCHAR(255) DEFAULT NULL COMMENT '地址',
    `borndate` DATETIME DEFAULT NULL COMMENT '生日',
    `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
    `idCard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
    PRIMARY KEY (`studentno`),
    KEY `FK_gradeid` (`gradeid`),-- FK_常用外键约束名
    CONSTRAINT /*约束*/`FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`) --- 执行
) ENGINE=INNODB DEFAULT CHARSET=utf8

建表后修改

-- 创建外键方式二 : 创建子表完毕后,修改子表添加外键
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`);

删除外键

操作:删除 grade 表,发现报错

注意 : 删除具有主外键关系的表时 , 要先删子表 , 后删主表

-- 删除外键
ALTER TABLE student DROP FOREIGN KEY FK_gradeid;
-- 发现执行完上面的,索引还在,所以还要删除索引
-- 注:这个索引是建立外键的时候默认生成的
ALTER TABLE student DROP INDEX FK_gradeid;

然而一般不推荐使用外键 以避免干扰其他开发操作

DML语言

DML语言:数据库操作语言

insert ,update,delete

添加(insert)
-- 插入语句
-- insert into表名([字段1,字段2,字段3]...)values('值1'),('值2'),('值3')...
INSERT INTO `grade`(`gradename`) 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('王五','bbbbbb','女'),('吴六','cccccc','男')

注意:

  • 字段和字段之间使用英文逗号隔开

  • 字段是可以省略的,但是后面的值必须一一对应,不能少

    INSERT INTO `student`
    VALUES('5','赵七','dddddd','女','2020-10-26','福州','email')
    
  • 同时插入多行数据,values后面的值,需要使用,分割 (),(),()

修改
-- update  修改
UPDATE `student` SET`name`='lq' WHERE id=1
-- 不指定条件的话会改动所有的表
UPDATE `student` SET`name`='长江七号'
-- 修改同一条数据的多个属性,由逗号隔开
UPDATE `student`SET`name`='阿哲',`pwd`='111111' WHERE id=1
-- 语法:(这边[]表示可省略)
-- update `表名` set `colnum_name`='value',[colnum_name='value'.....]where 条件

条件:where子句 运算符:

  • = , <>或!=>, < ,<=,>=

  • BETWEEN...AND...

    UPDATE `student`SET `name`='阿哲' WHERE id BETWEEN 2 AND 4
    
  • ANDor

UPDATE `student`SET `name`='长江7号' 
WHERE `sex`='男'AND `pwd`='aaaaaa'

注:values不只可以是具体值也可以是变量

 UPDATE`student`SET`birthday`=CURRENT_DATE WHERE `sex`='男'AND `pwd`='aaaaaa'
删除

delete 命令

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

-- 删除数据(避免这样删写,会全部删除 )
 DELETE FROM `student`
 -- 删除指定数据
 DELETE FROM `student` WHERE id=1

truncate 命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值