遇见狂神说--记录MySql部分笔记

Posted 小智RE0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了遇见狂神说--记录MySql部分笔记相关的知识,希望对你有一定的参考价值。

传送门==>B站遇见狂神说—MySql详解

最近在复习mysql,笔记和练习只是跟着视频整理的;但是有的知识点并没有整理进来.


在安装时注意环境变量path配置mysql的bin目录地址


命令行操作

mysql -uroot -p密码 连接数据库
flush privilengs 刷新权限
select version();查看系统版本号
show databases 查看所有数据库
mysql> use 数据库名 切换数据库
show tables 查看所有数据表
exit; 退出链接
-- 空格单行注释 ;在sqlyog还可使用# 注释
/**/多行注释

显示索引

显示所有索引
SHOW INDEX FROM 表名

查看建库,建表语句

SHOW CREATE DATABASE 数据库名
SHOW CREATE TABLE 表名

显示表的结构

DESC 表名

查询语句

select (all所有| distinct去重) [要查的字段 可以 as 别名]
from 表名 可as 别名
[联合查询 left join|right join|inner join 表名 可as别名]
[where 条件]
[group by 可指定查询结果按什么字段分组]
[having 过滤分组的次要条件]
[order by 指定查询记录的排序,asc 升序,desc 降序]
[limit 限制显示的分页;(开始的索引,显示几行数据)]

数据库不区分大小写


1.基本操作

建库删库,切换数据库;

-- 创建数据库;
CREATE DATABASE IF NOT EXISTS myStudy_2021822_db;
-- 删除数据库;
DROP DATABASE IF EXISTS myStudy_2021822_db;
-- 切换数据库
use `数据库名`
-- 注意,若表名或字段名特别;就加``符号

注意,若表名或字段名特别;就加``符号

查看所有数据库

-- 查看所有的数据库;
SHOW DATABASES;

可视化建库


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


时间日期

date :表示日期;
datetime :日期加时间格式;YYYY-MM-DD HH:mm:ss
time :表示时间
timestamp 时间戳 1就是1970年1月1日至今毫秒数 ;注意前后端使用时要转换类型;
year 年份

关于空值 NULL
在很多时候,创建表时会把字段名属性设置非空;
注意:NULL,是未知数,没有值;别用它做算术运算;算了结果就是NULL,没啥意义


3.字段属性


Unsigned作为无符号的整数 ;表示该列不能用负数

zerofill表示该列可以用0填充;

比如说写了个int(4),那你写个20就变成了0020

自增 (AUTO_INCREMENT)自动+1,一般去设置主键使用,要用整数

注意在高级设置里还可以调整起始值,自增的增量

默认(DEFAULT):顾名思义,设置列的默认值

非空(Not NULL) 设置该列为非空

注释 (COMMENT) 该列的注释,简要表名该列是干嘛的

需要知道的几个字段;
id 作为主键
version 乐观锁
is_delete 伪删除
gmt_create 创建时间
gmt_update 修改时间


4.创建数据表练习

字符串要用单引号包裹,
写一行就逗号一下,最后一行数据就不用了;

字段名或者表名,数据库名比较特殊(与关键字同名),就得用``包裹起来;

要不就尽量都用 ``包括起来

一般来说主键一个表只有一个,尽量单独写一行;

CREATE TABLE IF NOT EXISTS 表名(..字段名,类型,索引,注释 ....)ENGINE=INNODB DEFAULT CHARSET=utf8;

建表末尾可添加 表类型,字符集设置,注释


练习

-- 4.创建数据库表练习; 使用数据库为myStudy_2021822_db;
-- 创建 角色表`character`;
CREATE TABLE IF NOT EXISTS `character`(
      -- id,非空自增;
      `id` INT(4) NOT NULL AUTO_INCREMENT  COMMENT 'Id号',
      -- 姓名,非空,默认值为阿鱼;
      `name` VARCHAR(10) NOT NULL DEFAULT '阿鱼' COMMENT '姓名',
      -- 密码,非空,默认123;
      `password` VARCHAR(15) NOT NULL DEFAULT '123' COMMENT '密码',
      -- 性别,非空,默认男;
      `sex` VARCHAR(1) NOT NULL DEFAULT '男' COMMENT '性别' ,
      -- 生日,非空;
      `birthday` DATETIME NOT NULL COMMENT '生日',
      -- 年龄,非空,默认18;
      `age`INT(3)NOT NULL DEFAULT 18 COMMENT'年龄',
      -- 地址,非空;
      `address` VARCHAR(30) NOT NULL COMMENT '地址',
      -- 邮编;
      `email` VARCHAR(30) NOT NULL COMMENT '邮编',
      -- 设置主键Id;
      PRIMARY KEY(`id`)
      )ENGINE=INNODB DEFAULT CHARSET=utf8;
      


5.MyIsAM,Innodb区别

默认使用 Innodb

MYISAM 节约空间,速度快点, 支持全文索引

INNODB 安全性高,支持事务,数据行锁定,外键约束, ;空间约为MYISAM的两倍

所有数据都存在data目录下;
MYISAM对应文件;*.frm 表结构的定义文件 ; *.MYD 数据(data)文件 ;*.MYI 索引(index)文件
INNODB 对应文件,.frm数据定义文件,和上级目录下的ibdata1文件


6.关于修改删除数据表字段

修改表名

ALTER TABLE 旧名字 RENAME AS 新名字

增加新的字段

ALTER TABLE 表名 ADD 新字段名 属性

修改表的字段

  • 重命名
    ALTER TABLE 表名 CHANGE 旧的字段名 新的字段名 属性
  • 修改属性
    ALTER TABLE 表名 MODIFY 字段名 属性

删除表

DROP TABLE IF EXISTS 表名

删除字段

ALTER TABLE 表名 DROP 字段名;

练习;

 -- 修改表;
   ALTER TABLE `character` RENAME AS `person`;
   -- 增加新的字段;
   ALTER TABLE `person` ADD num INT(10);
   -- 修改表的字段;
   -- 重命名;
   ALTER TABLE `person` CHANGE `name` `myname` VARCHAR(15);
   -- 修改约束;
   ALTER TABLE `person` MODIFY address VARCHAR(25);
   -- 删除字段;
   ALTER TABLE `person` DROP  num;
   
   -- 删除表;
   DROP TABLE IF EXISTS `user`

7.外键以及增删改语句

外键;
在两张表以及以上时,一张表中需要用到另一张表的字段;

比如学生表需要班级名称;但是在学生表存的是班级表的ID,而这个Id对应班级表的id,而在班级表中Id对应班级名;

创建表时就加上外键

– 设置外键;
KEY 外键约束名(一般写FK_字段名)(字段名),
CONSTRAINT 外键约束名 FOREIGN KEY(字段名) REFERENCES 被引用表(字段名)

注意涉及外键关系时,先删除从表,再删除被引用的表;

创建之后加外键

ALTER TABLE 从表名 ADD CONSTRAINT 外键约束名 FOREIGN KEY(字段名) REFERENCES 被引用表(字段名)

实际开发中,数据库并不使用外键,外键关系通过程序逻辑关系实现


练习:
创建表时就加上外键;

   -- 学习外键;   
   -- 方式1;创建表时加外键;   
      -- 创建 角色表`character`;
CREATE TABLE IF NOT EXISTS `character`(
      -- id,非空自增;
      `id` INT(4) NOT NULL AUTO_INCREMENT  COMMENT 'Id号',
      -- 姓名,非空,默认值为阿鱼;
      `name` VARCHAR(10) NOT NULL DEFAULT '阿鱼' COMMENT '姓名',
      -- 密码,非空,默认123;
      `password` VARCHAR(15) NOT NULL DEFAULT '123' COMMENT '密码',
      -- 性别,非空,默认男;
      `sex` VARCHAR(1) NOT NULL DEFAULT '男' COMMENT '性别' ,
      -- 生日,非空;
      `birthday` DATETIME NOT NULL COMMENT '生日',
      -- 年龄,非空,默认18;
      `age`INT(3)NOT NULL DEFAULT 18 COMMENT'年龄',
      -- 地址,非空;
      `address` VARCHAR(30) NOT NULL DEFAULT '地球' COMMENT '地址',
      -- 邮编;
      `email` VARCHAR(30) NOT NULL DEFAULT '000012' COMMENT '邮编',
      -- 班级名;
      `gradeid` INT(5) NOT NULL COMMENT '年级Id',
      -- 设置主键Id;
      PRIMARY KEY(`id`),
      -- 设置外键;
      KEY `FK_gradeid`(`gradeid`),
      CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`)
      )ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '角色表';
      
      
  -- 先创建的是班级表;    
 CREATE TABLE IF NOT EXISTS `grade`(
        -- 班级Id;
        `gradeid` INT(5) NOT NULL AUTO_INCREMENT COMMENT '年级Id',
        -- 班级名;
        `gname` VARCHAR(5) NOT NULL COMMENT '班级名',
        -- 设置Id为主键;
        PRIMARY KEY(`gradeid`)
        )ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '班级表'; 

后期修改加外键;

 ALTER TABLE    `character` ADD CONSTRAINT   `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);

7.1 insert插入语句

由于主键自增,插入数据可以省略主键;

insert into 表名 (字段名,字段名,…)values(数据,数据,…),注意要查多行就用,把括号隔开(下一行),( …)

若不写表的字段,就默认匹配所有字段;
后面添加数据要和前面写的字段名对应;

练习

-- 不用外键哦;
 INSERT INTO `character`(`name`,`password`,`sex`,`birthday`,`age`,`gradeid`)
 VALUES('阿杰','1235','男','2025-08-04 02:15:35',18,2),
       ('阿猫','1235','男','2026-07-05 12:13:17',22,1),
       ('阿零','1235','女','2023-03-02 01:18:25',28,2);


7.2 update修改语句

修改字段的数据值

update 表名 set 字段名=值 ,字段名=值… where 条件;

注意 不加条件判定会改所有行的数据;

使用到的几个条件

= 等于
!= 或者 <> 不等于
> , <, >= ,<= 大于,小于,大于等于,小于等于
between ..and... 区间范围
and 或者&& 表示逻辑与 ; or 或者|| 表示逻辑或
not 或者 ! 表示逻辑非


练习;

 -- 先多插入几条数据吧; 
  INSERT INTO `character`(`name`,`password`,`sex`,`birthday`,`age`,`gradeid`)
 VALUES('张三','1235','男','2025-08-04 02:15:35',19,2),
       ('李四','1235','男','2026-07-05 12:13:17',25,2),
       ('阿巴','1235','男','2026-07-05 12:13:17',22,3),
       ('鱼干','1235','女','2026-06-05 12:13:17',23,1),
       ('树人','1235','女','2026-07-05 12:13:17',18,2),
       ('天狐','1235','男','2026-07-05 12:13:17',18,1),
       ('猫女','1235','女','2026-07-05 12:13:17',18,1),
       ('天一','1235','男','2023-03-02 01:18:25',22,2);
-- 修改语句练习;
  -- 修改语句练习;
    -- 修改 鱼干 的那一行数据;
    UPDATE `character` SET `birthday` = CURRENT_TIME , `sex` ='男' WHERE `id` = 8;
    -- 修改 天一 的数据;
    UPDATE `character` SET `password` = '123456' , `age` = 30 WHERE `name` = '天一';      


7.3 delete删除语句

delete from 表名 where 条件

注意,一定要加条件,不加条件就删空数据表了

truncate 表名 完全清空数据库,表的结构索引都不会变

删除的区别
delete: 删除不会影响自增列
truncate:可以重新设置自增列,计数器归零;且不会影响事务;


-- use `school`;-- 创建学生表
-- drop table if exists `student`;
CREATE TABLE `student`(
    `studentno` INT(4) NOT NULL COMMENT '学号',
    `loginpwd` VARCHAR(20) DEFAULT NULL COMMENT '密码',
    `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;

插入数据,有的成绩过多重复;

-- 插入学生数据 
INSERT INTO `student` (`studentno`,`loginpwd`,`studentname`,`sex`,`gradeid`,`phone`,`address`,`borndate`,`email`,`identitycard`)
VALUES
(1001,'123456','杰哥1号',1,2,'13800088234','陕西西安','1980-3-1','123123@qq.com','123456198001011233'),
(1002,'123456','张三',0,3,'13800002211','地球','2000-1-1','1312311@qq.com','123456199001011214'),
(1003,'123456','张三1号',1,1,'13800006622','陕西西安','1990-1-1','12331231@qq.com','123456199001011281'),
(1004,'123456','张三2号',1,3,'13800005522','地球','1990-2-1','1231t11

以上是关于遇见狂神说--记录MySql部分笔记的主要内容,如果未能解决你的问题,请参考以下文章

《遇见狂神说》MySQL从入门到删库

狂神说Java --- 记录Spring学习笔记

狂神说Java笔记--多线程详解部分笔记

狂神说Java笔记--反射和注解部分笔记

狂神说Java笔记--网络编程部分笔记

遇见狂神说JAVA笔记 --- Mybatis 学习