MySql学习笔记
2022/3/2 2:22:11
本文主要是介绍MySql学习笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
MySql
命令行
- 所有的语句都以; 结尾
- show databases --查看数据库所有的表
数据库xxx语言
CRUD 增删查改
- DDL 定义
- DML 操作
- DQL 查询
- DCL 控制
操作数据库
操作数据库 > 操作数据库中的表 > 操作数据库中表的数据
mysql关键字不区分大小写
操作数据库
- 创建数据库
如果表名或者字段名是一个特殊字符,需要带 ` 符号(table键上边)
CREATE DATABASE IF NOT EXISTS westos
- 删除数据库
DROP DATABASE IF EXISTS westos
日期格式:
timestamp 时间戳,1970.1.1到现在的毫秒数
null
- 没有值,未知
- 不要使用null进行运算,运算结果为null
创建数据库中的表
CREATE TABLE IF NOT EXISTS 'big' ( `id` INT(4) NOT NULL 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 '家庭住址', `emial` VARCHAR(50) DEFAULT NULL COMMENT '邮箱', PRIMARY KEY(`id`) )ENGINE=INNODB DEFAULT CHARSET=utf8
BETWEEN…AND… : 在某个范围内 [2,5]
辨析
delete与TRUNCATE 区别
- 相同点:都能删除数据,都不会删除表结构
- 不同点:
- TRUNCATE 重新设置 自增列 计数器会归零
- TRUNCATE 不会影响事务
运算符 | 语法 | 描述 |
---|---|---|
IS NULL | a is null | 如果操作符为NULL,结果为真 |
IS NOT NULL | a is not null | 如果操作符不为NULL,结果为真 |
BETWEEN | a between b and c | 若a在b和c之间,则结果为真 |
LIKE | a like b | SQL匹配,如果a匹配b,则结果为真 |
IN | a in (a1,a2,a3…) | 假设a在a1,或者a2…其中的某一个值中,结果为真 |
语法 | 描述 |
---|---|
join (连接的表) on(判断的条件) | 连接查询 |
where | 等值查询 |
操作 | 描述 |
---|---|
Inner join | 如果表中至少有一个匹配,就返回行 |
left join | 即使右表中没有匹配,也会从左表中返回所有的值 |
right join | 即使左表中没有匹配,也会从右表中返回所有的值 |
左连接以左边的表为基准
右连接以右边的表为基准
自连接
自己的表和自己的表连接,核心:一张表拆成两张一样的表
SELECT select_list [ INTO new_table ] FROM table_source [ WHERE search_condition ] [ GROUP BY group_by_expression ] [ HAVING search_condition ] [ ORDER BY order_expression [ ASC | DESC ] ]
ASC:升序
DESC:降序
show tables: show tables作用显示数据库中有哪些数据表
desc table: 作用是显示数据表的表都定义了哪些字段,及各个字段的类型大小,及哪些是主键,哪些有约束条件,以及各个字段是否定义了默认值。
SQL函数
--常用函数 SELECT ABS(-8) --绝对值 SELECT CEILING(9.4) --向上取整 SELECT FLOOR(9.4) --向下取整 SELECT RAND() --返回一个 0-1 之间的随机数 SELECT SIGN(10) -- 判断一个数的符号 0-0 负数返回-1,正数返回1 --字符串函数 SELECT CHAR_LENGTH('孤帆远影碧空尽') --字符串长度 SELECT CONCAT('五','角','星') --拼接字符串 SELECT LOWER('KUANG') --小写字母 SELECT UPPER('kuang') --大写字母 --时间函数 SELECT CURDATE() --获取当前日期 2022-03-01 SELECT NOW() --获取当前的时间 2022-03-01 16:25:52 --聚合函数 SELECT COUNT(studentname) FROM student; -- Count(指定列),会忽略所有的null值 速度快 SELECT COUNT(*) FROM student; -- 不会忽略null值,本质 计算行数 SELECT COUNT(1) FROM student; -- 不会忽略所有的null值 本质 计算行数 SELECT SUM(studentresult) AS 总和 FROM result; SELECT AVG(studentresult) AS 平均分 FROM result; SELECT MAX(studentresult) AS 最高分 FROM result; SELECT MIN(studentresult) AS 最低分 FROM result;
事务
要么都成功,要么都失败
- SQL执行 A给B转钱 A 1000 -----> 200 B 200
- SQL执行 B收到A的钱 A 800 -----> B 400
将一组SQL放在一个批次中去执行
- 原则: ACID原则
- 原子性:两个步骤一起成功或者一起失败,不能只发生其中一个动作
- 一致性:针对一个事务操作前与操作后的状态一致
- 隔离性:针对多个用户同时操作,主要是排除其他事务对本次事务的影响
- 持久性:事务结束后的数据不随着外界原因导致数据丢失
- 脏读:指一个事务读取了另一个事务未提交的数据
- 不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。(不一定错误,只是某些场合不对)
- 虚读(幻读):指在一个事务内读取到了别的事务的插入的数据,导致前后读取不一致。(一般是多读了一行)
索引
索引(index)是帮助MySQL高效获取数据的数据结构。提取句子主干,可以得到索引的本质,索引是数据结构。
索引的分类
- 主键索引(PRIMARY KEY):唯一的标识,主键不可重复,只能有一个
- 唯一索引(UNIQUE KEY):避免重复的列出现,唯一索引可以重复,多个列都可以标识 唯一索引
- 常规索引(KEY/INDEX):默认的,index。key关键字来设置
- 全文索引(FullText):在特定的数据库引擎下才有,用于快速定位数据。
索引原则
- 索引不是越多越好
- 不要对进程变动索引加数据
- 小数据量的表不需要加索引
- 索引一般加在常用来查询的字段上
规范数据库设计
糟糕的数据库设计
- 数据冗余,浪费空间
- 数据库插入和删除都会麻烦,异常【屏蔽使用物理外键】
- 程序的性能差
良好的数据库设计
- 节省内存空间
- 保证数据库的完整性
- 方便我们开发系统
软件开发中,关于数据库的设计
- 分析需求:分析业务和需要处理的数据库的需求
- 概要设计:设计关系图 E-R 图
- 数据库不区分大小写,驼峰命名无效
数据库设计三大范式
- 要求数据的每一列都是不可分的原子数据项(原子性) 保证每一列不可再分
- 确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言) 每张表只描述一件事情
- 需要确保数据库中的每一列都和主键直接相关,而不能间接相关
规范性和性能的关系
关联查询的表不能超过三张表
- 考虑商业化的需求和目标
- 规范性能的时候可以适当的考虑一下规范性
排错笔记:
#1166 - Incorrect column name ‘id’
表的栏位名字后如果是有空格会报错
这篇关于MySql学习笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南
- 2024-11-02初学者指南:部署MySQL集群资料
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程
- 2024-11-01部署MySQL集群学习:新手入门教程
- 2024-11-01部署MySQL集群入门:新手必读指南
- 2024-10-23BinLog入门:新手必读的MySQL二进制日志指南
- 2024-10-23Binlog入门:MySQL数据库的日志管理指南