遇见狂神说--记录MySql部分笔记
Posted 小智RE0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了遇见狂神说--记录MySql部分笔记相关的知识,希望对你有一定的参考价值。
传送门==>B站遇见狂神说—MySql详解
最近在复习mysql,笔记和练习只是跟着视频整理的;但是有的知识点并没有整理进来.
ml
在安装时注意环境变量path配置mysql的bin目录地址
命令行操作
mysql -uroot -p密码
连接数据库
flush privilengs
刷新权限
select version()
;查看系统版本号
show databases
查看所有数据库
mysql> use 数据库名
切换数据库
show tables
查看所有数据表
exit;
退出链接
-- 空格
单行注释 ;在sqlyog还可使用#
注释
/**/
多行注释
显示索引
显示所有索引
SHOWINDEX
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部分笔记的主要内容,如果未能解决你的问题,请参考以下文章