学习笔记 mysql_MySQL 学习笔记
MySQL 学习笔记
1 定义
数据库中的表:一行叫一条记录。每一列叫一个属性,或一个字段。
主键:表中的某个特殊字段,具有唯一的确定的值,可以根据该字段唯一的确定一条记录
外键:表中的某个字段的值为另一张表(也可以是自身)中的某个字段的值。
2 MySQL 的数据类型
2.1 数值
TINYINT 小整型
INT/INTEGER 整型
BIGINT 长整型
FLOAT 小数
DOUBLIE 双精度小数
2.2 日期
DATE YYYY-MM-DD
TIME HH:MM:SS
YEAT YYYY
DATETIME 混合
TIMESTAMP 高精度
2.3 字符串
CHAR 定长字符串
VARCHAR 不定长
BLOB 二进制文件
LONGBLOB 长二进制文件
TEXT 长文本数据
LONGTEXT 长文本数据
注:以上仅总结了常用类型,并不是所有类型
3 SQL语句
3.1 数据库的创建
1CREATE DATABASE 数据库名 [参数]复制代码
例如创建一个名为test的数据库,设置字符集为utf-8
1CREATE DATABASE test CHARACTER SET utf8;复制代码
出现下面的内容即说明创建成功。
1Query OK, 0 rows affected (0.00 sec)复制代码
你可以使用下面的语句查看新创建的数据库
1SHOW DATABASES;复制代码
选择需要操作的数据库
1USE test;复制代码
执行完上面的语句后出现Database changed,
你所有的操作都将在test数据库中进行。
3.2 创建表
1CREATE TABLE 表名 (
2 列名 列数据属性 [约束],
3 列名 列数据属性,
4 ... ...
5);复制代码
例如创建一个users表id是主键,自增长。
PRIMARY KEY:约束 主键约束
AUTO_INCREMENT:约束 自增长
1CREATE TABLE users(
2id INTEGER PRIMARY KEY AUTO_INCREMENT,
3account VARCHAR(50),
4pwd VARCHAR(50),
5);复制代码
3.3 插入数据
1INSERT INTO 表名 VALUES (值1, 值2,...,NULL,...);复制代码
这种插入方式一定要将所有的值都写上,如果为空的话写NULL。值与列要一一对应
主键如果设置为自增的话写NULL
也可以指定所要插入数据的列,向下面这样。
1INSERT INTO 表名 (列1, 列2,...) VALUES (值1, 值2,....);复制代码
按回车后出现
1Query Ok, 1 row affected (0.05 sec) 复制代码
说明成功。否则请检查SQL语句。
例如向刚刚创建的users表中插入一条数据
1INSERT INTO users VALUES(NULL,'admin','admin');复制代码
第一列是id,主键自增,不需要插入。
3.4 查询数据
1SELECT * FROM 表名 [WHERE 条件] [参数];复制代码
例如查询users表里的所有数据的 account 列。
1SELECT account FROM users;复制代码
3.4.1 WHERE 查询
可以给FROM后面的表起一个别名。例如:
1SELECT tn.id,tn.account FROM tablename AS tn
2WHERE tn.id = 1;复制代码
3.4.2 WHERE 后的条件语句
1WHERE后面可以写多种条件语句。
21. 关系语句: =,>,=,<=
32. 逻辑语句: AND,OR,NOT
43. IS NULL: 是否为空
54. BETWEEN:在两者之间
6 WHERE u.id BETWEEN 11 AND 15;
7 id 在11-15之间。
85. IN:在..之中
9 WHERE u.account IN (值1,值2,...);
10 查询 account 在(值1,值2,...)之中的数据
115. LIKE:模糊匹配
12 WHERE u.id LIKE '通配符';
13
14 通配符
15 '%':替代零个或多个字符
16 '_':替代一个字符
17 WHERE u.account LIKE '%A%';查询account字段中含有'A'的数据。
18
19 [charlist]:字符列中的任何单一字符
20 WHERE u.account LIKE '[ASD]%'; 查询以A S D 开头的数据。
21 [!charlist]:不在字符列中的任何单一字符
22 WHERE u.account LIKE '[!ASD]%'; 查询不以A S D 开头的数据 复制代码
3.4.3 聚合函数
1SELECT AVG(列名) FROM 表名复制代码
11. AVG(列名):返回某一列的平均值
22. COUNT(列名):返回匹配指定条件的行数
33. FIRST(列名):返回指定的字段中第一个记录的值。
44. LAST(列名):返回指定的字段中最后一个记录的值。
55. MAX(列名):返回一列中的最大值。NULL 值不包括在计算中。
66. MIN(列名):返回一列中的最小值。NULL 值不包括在计算中。
77. SUM(列名):返回数值列的总数(总额)。
88. UCASE(列名):把字段的值转换为大写。
99. LCASE(列名):把字段的值转换为小写。 复制代码
110. MID(列名,开始位置,截取长度):用于从文本字段中提取字符。
2SELECT MID(account,1,3) as uname FROM users;复制代码
111. LEN(列名):返回文本字段中值的长度。
212. ROUND(列名,小数位数):用于把数值字段舍入为指定的小数位数。
313. CURDATE():返回当前日期。YYYY-MM-DD。
414. CURTIME():返回当前时间。HH:MM:SS。
515. NOW():返回当前时间。YYYY-MM-DD HH:MM:SS。
616. YEAR(d),MONTH(d),DAY(d):分别返回参数的年,月,日。
717. ADDDATE(d,n):在d的时间上加n天。
818. SUBDATE(d,n):在d的时间上减n天。复制代码
119. DATE_FORMAT(d,f):格式化时间d。
2%a 缩写星期名
3%b 缩写月名
4%c 月,数值
5%D 带有英文前缀的月中的天
6%d 月的天,数值(00-31)
7%e 月的天,数值(0-31)
8%f 微秒
9%H 小时 (00-23)
10%h 小时 (01-12)
11%I(大写的i) 小时 (01-12)
12%i 分钟,数值(00-59)
13%j 年的天 (001-366)
14%k 小时 (0-23)
15%l(小写的L) 小时 (1-12)
16%M 月名
17%m 月,数值(00-12)
18%p AM 或 PM
19%r 时间,12-小时(hh:mm:ss AM 或 PM)
20%S 秒(00-59)
21%s 秒(00-59)
22%T 时间, 24-小时 (hh:mm:ss)
23%U 周 (00-53) 星期日是一周的第一天
24%u 周 (00-53) 星期一是一周的第一天
25%V 周 (01-53) 星期日是一周的第一天,与 %X 使用
26%v 周 (01-53) 星期一是一周的第一天,与 %x 使用
27%W 星期名
28%w 周的天 (0=星期日, 6=星期六)
29%X 年,其中的星期日是周的第一天,4 位,与 %V 使用
30%x 年,其中的星期一是周的第一天,4 位,与 %v 使用
31%Y 年,4 位
32%y 年,2 位复制代码
3.4.4 分组查询
GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。
1SELECT 列名, 聚合函数
2FROM 表名
3WHERE 条件
4GROUP BY 列名复制代码
例如根据用户表中的role属性分组统计每组的人数
1SELECT role, COUNT(id)
2FROM users
3GROUP BY role;复制代码
3.4.5 分组过滤
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
例如根据用户表中的role属性分组统计每组的人数,查找人数大于10的role
1SELECT role, COUNT(id)
2FROM users
3GROUP BY role
4HAVING COUNT(id)>10;复制代码
3.4.6 结果排序
ORDER BY 语句用于根据指定的列对结果集进行排序。
默认为升序,降序使用关键字DESC。
例如根据用户表中的role属性分组统计每组的人数,按照人数降序排列
1SELECT role, COUNT(id) count
2FROM users
3GROUP BY role
4ORDER BY count DESC;复制代码
3.5 更新数据
1UPDATE 表名 SET 列名 = 新值 WHERE 条件复制代码
WHERE的修改条件是可选的,不写的话修改表的所有数据
例如修改users表里的数据,将admin用户的密码改为root
1UPDATE users SET pwd = 'root' WHERE account = 'admin';复制代码
3.6 删除数据
1DELETE FROM 表名 WHERE 条件复制代码
WHERE的修改条件是可选的,不写的话删除表的所有数据
4 表属性的修改
4.1 表重命名
1ALTER TABLE 表名 RENAME 新表名;复制代码
4.2 添加新的一列
1ALTER TABLE 表名 ADD 列名 列数据类型 [AFTER 插入位置]复制代码
例如在users表的pwd字段后面添加一个role字段类型是INTEGER
1ALTER TABLE users ADD role INTEGER AFTER pwd;复制代码
4.3 修改列
1ALTER TABLE 表名 CHANGE 列名称 新列名称 新数据类型;复制代码
例如修改users表里的pwd字段改为password,类型是varchar(20)
1ALTER TABLE users CHANGE pwd password varchar(20);复制代码
5 完整性约束
1约束:对表中的列添加的一些限制条件。只有满足这些条件时才能数据才能插入。复制代码
5.1 实体完整性
1主键不能为空复制代码
5.2 参照完整性
1外键的值必须是某张表中存在的值,可以为空复制代码
5.3 用户自定义完整性
1唯一性约束,某一列虽然不为主键,但是依然不能重复。复制代码
5.4 添加约束
1ALTER TABLE 表名
2 ADD CONSTRAINT 约束名 约束类型(列名);复制代码
例如,给users表的role列添加外键约束,引用自roles表的id列
1ALTER TABLE users
2 ADD CONSTRAINT uq_phone FOREIGN KEY (`role`)
3 REFERENCES `roles` (`id`);复制代码
5.5 常见约束类型
11. PRIMARY KEY: 主键
22. CHECK:限制列中的值的范围。MySQL好像不支持
33. UNIQUE:唯一性约束
44. NOT NULL:非空约束
55. FOREIGN KEY:外键约束复制代码
6 范式
函数依赖:如果A依赖B,那么当确定A值后,B值也就确定了。
例如,在一张表中由于主键是唯一确定且不重复的。所以,当主键的值确定了,那么其他列的值也就确定了。我们便说,其他列都依赖主键。
完全函数依赖:如果B函数依赖于A,并且对于A的任何一个真子集A1,都有 B不依赖与A1,称A对B完全函数依赖。
部分函数依赖:如果B函数依赖于A,但是B不完全函数依赖于A,称B对A部分函数依赖。
例如,在一张表中,有两列,一列是用户名,而另一列里某些行里记录的是用户的id,而某些行里在这一列里记录的是用户所在部门的id,那么用户名列便部分函数依赖于id列,因为存在某些行依赖于id列的子集(记录是部门id的行)。
传递函数依赖:如果A函数依赖于B,B函数依赖于C,则称A传递函数依赖于C。
6.1 1NF(第一范式)
确保列不可分,即每一列只描述一个属性,即达到1NF
6.2 2NF(第二范式)
在1NF的基础上消除部分函数依赖即达到2NF。即每一个非主属性(非主键列)完全函数依赖于主键。
例如,可以将上面部分函数依赖的例子中的表,改成两张表,一张用户表,一张部门表,所有的用户名列都完全依赖于主键。便达到2NF。
6.3 3NF(第三范式)
在2NF的基础上消除传递函数依赖便达到3NF。即每一个非主属性(非主键列)即不部分依赖于主键,也不传递依赖于主键。
学习笔记 mysql_MySQL 学习笔记相关推荐
- 高效学习方法论的学习笔记
Author:鲁力(地山) 0.前言与致谢 如何提高学习效率?这一问题长期以来都是网上讨论的热点话题,就这一问题网上很多大咖以书籍.博客.知乎回答.视频等不同形式都发表过自己的观点见解和方法论.笔者在 ...
- Yann Lecun纽约大学《深度学习》2020课程笔记中文版,干货满满!
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]Yann Lecun在纽约大学开设的2020春季<深度学习>课 ...
- 【干货】机器学习经典书PRML 最新 Python 3 代码实现,附最全 PRML 笔记视频学习资料...
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 将 Bishop 大神的 PRML 称为机器学习圣经一点也不为过,该书系统地介绍了 ...
- 系列笔记 | 深度学习连载(6):卷积神经网络基础
点击上方"AI有道",选择"星标"公众号 重磅干货,第一时间送达 卷积神经网络其实早在80年代,就被神经网络泰斗Lecun 提出[LeNet-5, LeCun ...
- 系列笔记 | 深度学习连载(5):优化技巧(下)
点击上方"AI有道",选择"星标"公众号 重磅干货,第一时间送达 深度学习中我们总结出 5 大技巧: 本节继续从第三个开始讲起. 3. Early stoppi ...
- 系列笔记 | 深度学习连载(4):优化技巧(上)
点击上方"AI有道",选择"星标"公众号 重磅干货,第一时间送达 深度学习中我们总结出 5 大技巧: 1. Adaptive Learning Rate 我们先 ...
- 系列笔记 | 深度学习连载(2):梯度下降
点击上方"AI有道",选择"星标"公众号 重磅干货,第一时间送达 我们回忆深度学习"三板斧": 1. 选择神经网络 2. 定义神经网络的好坏 ...
- React学习:入门实例-学习笔记
文章目录 React学习:入门实例-学习笔记 React的核心 需要引入三个库 什么是JSX react渲染三步骤 React学习:入门实例-学习笔记 React的核心 1.组件化:把整一个网页的拆分 ...
- cocos2d学习笔记2——学习资源
1. 视频 找了好几个视频,有一些讲得好的文件资源没有,后来终于找到一个讲得不错还有文件资源的,还有高清下载地址,虽然是2.2版本的,但是确实能学到不少东西,对用cocos2d做游戏有了基本的印象,对 ...
最新文章
- mysql使用大内存页面,设置MySQL使用大内存页面
- 你不得不看的六篇知识图谱落地好文
- keil_rtx特点
- 中判断字符串是否为空_leetcode1704_go_判断字符串的两半是否相似
- python 删除文件、目录_python脚本删除文件及删除文件目录的方法
- 59.排序好的大数据创建索引文件,并实现大文件的二分查找,根据索引百万数据秒读数据...
- 世界五百强面试题目及应答评点
- git 安装_Windows系统Git安装教程(详解Git安装过程)
- Cloudflare泄露客户数据,IT部门可从中吸取什么教训?
- 【krpano】多分类缩略图及多分类地图案例
- 减少工作时间更有利于百姓
- 【html教程】非常全的主页设置代码,HTML代码教程
- Spring Boot四大神器之Auto Configuration
- 计算机视觉 深度学习 slam 三维重建 机器学习学习资料整理
- jq 清空、删除、添加、替换数组的简单用法
- 利用电脑投放手机声音且可不冲突同时播放电脑声音的方法
- xxljob 配置文件_XXL-JOB的基本用法
- 在移动设备上实时执行的DNN权重修剪中缺失但令人满意的稀疏性
- deepin 命令行卸载软件
- 跨平台移动应用开发引擎CrossApp推出正式版V0.3.0