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 数据库的创建

CREATE DATABASE 数据库名 [参数]

例如创建一个名为test的数据库,设置字符集为utf-8

CREATE DATABASE test CHARACTER SET utf8;

出现下面的内容即说明创建成功。

Query OK, 0 rows affected (0.00 sec)

你可以使用下面的语句查看新创建的数据库

SHOW DATABASES;

选择需要操作的数据库

USE test;

执行完上面的语句后出现Database changed,

你所有的操作都将在test数据库中进行。

3.2 创建表

CREATE TABLE 表名 (

列名 列数据属性 [约束],

列名 列数据属性,

... ...

);

例如创建一个users表id是主键,自增长。

PRIMARY KEY:约束 主键约束

AUTO_INCREMENT:约束 自增长

CREATE TABLE users( id INTEGER PRIMARY KEY AUTO_INCREMENT, account VARCHAR(50), pwd VARCHAR(50), );

3.3 插入数据

INSERT INTO 表名 VALUES (值1, 值2,...,NULL,...);

这种插入方式一定要将所有的值都写上,如果为空的话写NULL。值与列要一一对应

主键如果设置为自增的话写NULL

也可以指定所要插入数据的列,向下面这样。

INSERT INTO 表名 (列1, 列2,...) VALUES (值1, 值2,....);

按回车后出现

Query Ok, 1 row affected (0.05 sec)

说明成功。否则请检查SQL语句。

例如向刚刚创建的users表中插入一条数据

INSERT INTO users VALUES(NULL,'admin','admin');

第一列是id,主键自增,不需要插入。

3.4 查询数据

SELECT * FROM 表名 [WHERE 条件] [参数];

例如查询users表里的所有数据的 account 列。

SELECT account FROM users;

3.4.1 WHERE 查询

可以给FROM后面的表起一个别名。例如:

SELECT tn.id,tn.account FROM tablename AS tn WHERE tn.id = 1;

3.4.2 WHERE 后的条件语句

WHERE后面可以写多种条件语句。

1. 关系语句: =,>,=,<=

2. 逻辑语句: AND,OR,NOT

3. IS NULL: 是否为空

4. BETWEEN:在两者之间

WHERE u.id BETWEEN 11 AND 15;

id 在11-15之间。

5. IN:在..之中

WHERE u.account IN (值1,值2,...);

查询 account 在(值1,值2,...)之中的数据

5. LIKE:模糊匹配

WHERE u.id LIKE '通配符';

通配符

'%':替代零个或多个字符

'_':替代一个字符

WHERE u.account LIKE '%A%';查询account字段中含有'A'的数据。

[charlist]:字符列中的任何单一字符

WHERE u.account LIKE '[ASD]%'; 查询以A S D 开头的数据。

[!charlist]:不在字符列中的任何单一字符

WHERE u.account LIKE '[!ASD]%'; 查询不以A S D 开头的数据

3.4.3 聚合函数

SELECT AVG(列名) FROM 表名

1. AVG(列名):返回某一列的平均值

2. COUNT(列名):返回匹配指定条件的行数

3. FIRST(列名):返回指定的字段中第一个记录的值。

4. LAST(列名):返回指定的字段中最后一个记录的值。

5. MAX(列名):返回一列中的最大值。NULL 值不包括在计算中。

6. MIN(列名):返回一列中的最小值。NULL 值不包括在计算中。

7. SUM(列名):返回数值列的总数(总额)。

8. UCASE(列名):把字段的值转换为大写。

9. LCASE(列名):把字段的值转换为小写。

10. MID(列名,开始位置,截取长度):用于从文本字段中提取字符。

SELECT MID(account,1,3) as uname FROM users;

11. LEN(列名):返回文本字段中值的长度。

12. ROUND(列名,小数位数):用于把数值字段舍入为指定的小数位数。

13. CURDATE():返回当前日期。YYYY-MM-DD。

14. CURTIME():返回当前时间。HH:MM:SS。

15. NOW():返回当前时间。YYYY-MM-DD HH:MM:SS。

16. YEAR(d),MONTH(d),DAY(d):分别返回参数的年,月,日。

17. ADDDATE(d,n):在d的时间上加n天。

18. SUBDATE(d,n):在d的时间上减n天。

19. DATE_FORMAT(d,f):格式化时间d。

%a 缩写星期名

%b 缩写月名

%c 月,数值

%D 带有英文前缀的月中的天

%d 月的天,数值(00-31)

%e 月的天,数值(0-31)

%f 微秒

%H 小时 (00-23)

%h 小时 (01-12)

%I(大写的i) 小时 (01-12)

%i 分钟,数值(00-59)

%j 年的天 (001-366)

%k 小时 (0-23)

%l(小写的L) 小时 (1-12)

%M 月名

%m 月,数值(00-12)

%p AM 或 PM

%r 时间,12-小时(hh:mm:ss AM 或 PM)

%S 秒(00-59)

%s 秒(00-59)

%T 时间, 24-小时 (hh:mm:ss)

%U 周 (00-53) 星期日是一周的第一天

%u 周 (00-53) 星期一是一周的第一天

%V 周 (01-53) 星期日是一周的第一天,与 %X 使用

%v 周 (01-53) 星期一是一周的第一天,与 %x 使用

%W 星期名

%w 周的天 (0=星期日, 6=星期六)

%X 年,其中的星期日是周的第一天,4 位,与 %V 使用

%x 年,其中的星期一是周的第一天,4 位,与 %v 使用

%Y 年,4 位

%y 年,2 位

3.4.4 分组查询

GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。

SELECT 列名, 聚合函数 FROM 表名 WHERE 条件 GROUP BY 列名

例如根据用户表中的role属性分组统计每组的人数

SELECT role, COUNT(id) FROM users GROUP BY role;

3.4.5 分组过滤

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。

例如根据用户表中的role属性分组统计每组的人数,查找人数大于10的role

SELECT role, COUNT(id) FROM users GROUP BY role HAVING COUNT(id)>10;

3.4.6 结果排序

ORDER BY 语句用于根据指定的列对结果集进行排序。

默认为升序,降序使用关键字DESC。

例如根据用户表中的role属性分组统计每组的人数,按照人数降序排列

SELECT role, COUNT(id) count FROM users GROUP BY role ORDER BY count DESC;

3.5 更新数据

UPDATE 表名 SET 列名 = 新值 WHERE 条件

WHERE的修改条件是可选的,不写的话修改表的所有数据

例如修改users表里的数据,将admin用户的密码改为root

UPDATE users SET pwd = 'root' WHERE account = 'admin';

3.6 删除数据

DELETE FROM 表名 WHERE 条件

WHERE的修改条件是可选的,不写的话删除表的所有数据

4 表属性的修改

4.1 表重命名

ALTER TABLE 表名 RENAME 新表名;

4.2 添加新的一列

ALTER TABLE 表名 ADD 列名 列数据类型 [AFTER 插入位置]

例如在users表的pwd字段后面添加一个role字段类型是INTEGER

ALTER TABLE users ADD role INTEGER AFTER pwd;

4.3 修改列

ALTER TABLE 表名 CHANGE 列名称 新列名称 新数据类型;

例如修改users表里的pwd字段改为password,类型是varchar(20)

ALTER TABLE users CHANGE pwd password varchar(20);

5 完整性约束

约束:对表中的列添加的一些限制条件。只有满足这些条件时才能数据才能插入。

5.1 实体完整性

主键不能为空

5.2 参照完整性

外键的值必须是某张表中存在的值,可以为空

5.3 用户自定义完整性

唯一性约束,某一列虽然不为主键,但是依然不能重复。

5.4 添加约束

ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型(列名);

例如,给users表的role列添加外键约束,引用自roles表的id列

ALTER TABLE users ADD CONSTRAINT uq_phone FOREIGN KEY (`role`) REFERENCES `roles` (`id`);

5.5 常见约束类型

1. PRIMARY KEY: 主键

2. CHECK:限制列中的值的范围。MySQL好像不支持

3. UNIQUE:唯一性约束

4. NOT NULL:非空约束

5. 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。即每一个非主属性(非主键列)即不部分依赖于主键,也不传递依赖于主键。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

druid连接池初始化慢_7、SpringBoot -连接池(Durid)

一导入相关核心包<dependencies>二 在application.ymlspring三、配置Druid Datasource(可选)Configuration五、监控访问 http://localhost:8080/druid&#xff0c; 使用上面配置的账号密码。四、自动配置原理源代码Configuration说明DataSourceProperties 配置相关 首先找…

负载均衡与反向代理

如果用域名 映射多了Ip &#xff1b; 外网应该用来实现 GSLB 1 轮询pstream nginxDemo { server 127.0.0.1:8081; server 127.0.0.1:8082; } 最少链接web请求会被转发到连接数最少的服务器上。 upstream nginxDemo { least_conn; server 127.0.…

使用工厂方法模式设计最佳实践

在前面的“设计模式”示例中&#xff0c;我们解释了当今常用的“工厂”模式。 在本节中&#xff0c;我们将了解具有更多抽象的更高级的解决方案。 该模式称为工厂方法设计模式。 定义&#xff1a; Factory方法模式提供了一种用于创建对象的方法&#xff0c;但是将对象创建委托…

偏导数

引入 一元函数导数&#xff1a; 在一元函数中&#xff0c;我们已经知道导数就是函数的变化率&#xff08;对于一个一元函数&#xff0c;x增大了多少&#xff0c;y增大了多少&#xff0c;这个就是变化率&#xff09;。对于二元函数我们同样要研究它的“变化率”。在xOy平面内&am…

qt绘制一圈圆_Qt绘制圆

最近开始折腾Qt了&#xff0c;手头上的一个项目需要用到Qt来绘制一些简单图像。记录下Qt绘制圆的过程&#xff1a;对于以A为圆心&#xff0c;半径为R的圆&#xff0c;外部有一个外切的正方形&#xff0c;正方形上有B点。如下图所示&#xff1a;对于void QPainter::drawArc(int …

前端基础之HTML

HTML介绍 Web服务本质 import socketsk socket.socket()sk.bind(("127.0.0.1", 8080)) sk.listen(5)while True:conn, addr sk.accept()data conn.recv(8096)conn.send(b"HTTP/1.1 200 OK\r\n\r\n")conn.secd(b"<h1>Hello world!</h1&g…

指令引用了 内存 该内存不能为read 一直弹窗_【翻译】使用Rust测试ARM和X86内存模型

原文标题: The Story of Tail Call Optimizations in Rust 原文标题: Examining ARM vs X86 Memory Models with Rust原文链接: https://www.nickwilcox.com/blog/arm_vs_x86_memory_model/公众号&#xff1a; Rust碎碎念苹果公司最近宣布&#xff0c;他们将要把笔记本和桌面电…

Docker应用二:docker常用命令介绍

Docker常用命令使用介绍 docker中常用的命令: 1、docker search image_name:搜查镜像 2、docker pull image_name:从镜像库中拉去镜像 3、docker run image_name:运行容器 --restartalways:容器退出后重新启动 --name:自定容器名字 --d:后台运行容器 --i:交互模式 --t:打开一个…

关于Ubuntu使用笔记

Ubuntu vm tools 安装 sudo apt install open-vm-tools-desktop 在安装程序时Ubuntu会将安装目录锁定&#xff0c;安装结束后会解除锁定&#xff0c;中断安装后无法再安装其他软件解决方案 E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavail…

具有可执行Tomcat的独立Web应用程序

在部署应用程序时&#xff0c;简单性是最大的优势。 您将了解到&#xff0c;尤其是在项目发展且需要在环境中进行某些更改时。 将整个应用程序打包到一个独立且自足的JAR中似乎是个好主意&#xff0c;尤其是与在目标环境中安装和升级Tomcat相比。 过去&#xff0c;我通常将Tomc…

css网页中设置背景图片的方法详解

在css代码中设置背景图片的方法&#xff0c;包括背景图片、背景重复、背景固定、背景定位等 用css设置网页中的背景图片&#xff0c;主要有如下几个属性&#xff1a; 1&#xff0c;背景颜色 {">说明&#xff1a;参数取值和颜色属性一样 注意&#xff1a;在HTML当中&am…

node-sass安装不成功的问题

SASS_BINARY_SITEhttps://npm.taobao.org/mirrors/node-sass/ npm install node-sass 简单粗暴的执行上述的命令。转载于:https://www.cnblogs.com/czaiz/p/6918114.html

npm升级依赖包_Taro跨端开发之依赖管理

昨天跑的好好项目,今天跑不起来我们在开发周期比较长的前端项目的时候,必然会遇到依赖管理的问题. 我们在开发项目的时候,我们用了大量的三方库.这些三方的依赖库时不时的会更新自己的代码.第三方依赖库的代码更新会很容易造成代码运行的不稳定, 比如昨天还跑的好好的项目,另一…

QOTD:Java线程与Java堆空间

以下问题很常见&#xff0c;并且与OutOfMemoryError有关&#xff1a;在JVM线程创建过程和JVM线程容量期间无法创建新的本机线程问题。 这也是我向新技术候选人&#xff08;高级职位&#xff09;提出的典型面试问题。 我建议您在查看答案之前尝试提供自己的答复。 题&#xff1…

sql查询重复项

select * from [表A] where id in (select id from [表A] group by id having count(id) >1 )转载于:https://www.cnblogs.com/wuyujie/p/7885017.html

java util logging_简单日志记录,使用java.util.logging

jspservletJavaBean模式下,可以做个简单的日志记录,日志文件保存在服务器.(Tomcat)package controller;import java.io.File;import java.io.IOException;import java.util.logging.FileHandler;import java.util.logging.Level;import java.util.logging.Logger;import javax.…

超级高铁

超级高铁 作者&#xff1a;武培&#xff0c;高培焱 作品来源&#xff1a;实践 美国电动汽车公司特斯拉和美国科技公司ET3都公布了“真空管钢运输”计划&#xff0c;特斯拉将其命名为“超级高铁”&#xff0c;ET3因列车外观酷似胶囊因而称之为“吃胶囊”列车。根据ET3公司的介绍…

使用Spring @Autowired List的责任链

在Spring 3.1中&#xff0c;有一种方法可以自动填充类型化的List&#xff0c;这在您想在代码中稍微进行去耦和清理时非常方便。 为了向您展示它是如何工作的&#xff0c;我将实现一个简单的责任链&#xff0c;该责任链将为通过的用户打印一些问候。 让我们从我们拥有的&#…

设计模式 建造者模式 与 Spring Bean建造者 BeanDefinitionBuilder 源码与应用

建造者模式 定义: 将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示主要作用: 在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象如何使用: 用户只需要给出指定复杂对象的类型和内容, 建造者模式负责按顺序创建复杂对象…

java 布隆过滤器_什么是布隆过滤器(Bloom Filter)?

在日常工作中&#xff0c;有一个比较常见的需求&#xff0c;就是需要判断一个元素是否在集合中。例如以下场景&#xff1a;给定一个IP黑名单库&#xff0c;检查指定IP是否在黑名单中&#xff1f;在接收邮件的时候&#xff0c;判断一个邮箱地址是否为垃圾邮件&#xff1f;在文字…