博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL的基础
阅读量:6983 次
发布时间:2019-06-27

本文共 6186 字,大约阅读时间需要 20 分钟。

hot3.png

数据库和SQL

什么数据库

数据库是存储在一起的相关数据的集合,这些数据是结构化的,无有害的或不必要的冗余,并为多种应用服务。

什么是SQL

结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

什么是mysql

MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQLAB公司,在2008年1月16号被Sun公司收购。MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

关系数据库管理系统(Relational Database Management System:RDBMS):

指包括相互联系的逻辑组织和存取这些数据的一套程序 (数据库管理系统软件)。关系数据库管理系统就是管理关系数据库,并将数据逻辑组织的系统。

mysql中的数据类型

MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

数值类型

类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 字节 (-128,127) (0,255) 小整数值
SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
FLOAT 4 字节 (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度浮点数值
DOUBLE 8 字节 (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度浮点数值
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值

时间/日期类型

类型 大小(字节) 范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 YYYYMMDD HHMMSS 混合日期和时间值,时间戳

字符串类型

类型 大小 用途
CHAR 0-255字节 定长字符串
VARCHAR 0-65535 字节 变长字符串
TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
TINYTEXT 0-255字节 短文本字符串
BLOB 0-65 535字节 二进制形式的长文本数据
TEXT 0-65 535字节 长文本数据
MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295字节 极大文本数据

mysql的数据库操作

数据库的新增

登陆 MySQL 服务后,使用 create 命令创建数据库,语法如下:

CREATE DATABASE 数据库名;
DROP DATABASE if exists 数据库名;create database 数据库名;

实例:

CREATE DATABASE test_db;

数据库的查询

获取所有表名:

USE information_schema;SELECT table_name FROM TABLES WHERE TABLE_SCHEMA=’数据库名’;

数据库的删除

使用 drop 命令删除数据库,语法如下:

DROP DATABASE 数据库名;

mysql的数据表操作

数据表的新建

实例:

USE test_db;CREATE TABLE IF NOT EXISTS `student`(   `stu_id` INT UNSIGNED AUTO_INCREMENT,   `stu_age` INT NOT NULL COMMENT '学生的年龄',   `stu_name` VARCHAR(20) NOT NULL COMMENT '学生的姓名',   `stu_number` VARCHAR(30) NOT NULL UNIQUE COMMENT '学号',   `stu_address` VARCHAR(30) NOT NULL COMMENT '学生的地址',   PRIMARY KEY ( `stu_id` ))ENGINE=InnoDB DEFAULT CHARSET=utf8;

图解

总结:

CREATE TABLE table_name (    column_name1 data_type constraint[...],    column_name2 data_type constraint[...],    column_name3 data_type constraint[...],    ...    PRIMARY KEY ( `column_name` ))ENGINE=InnoDB DEFAULT CHARSET=utf8;

数据的增添

实例:

INSERT INTO `student`(`stu_age`, `stu_name`, `stu_number`, `stu_address`)VALUES(22, '刘太刚', '1234', '贵州'),(15, '徐维松', '2345', '四川'),(19, '徐任达', '3456', '贵州'),(18, '彭克喜', '4567', '贵州'),(20, '潘姚瑶', '5678', '新疆');

总结:

INSERT INTO table_name(column_name1, column_name2, column_name3, ...)VALUES(value1, value2, value3, ...),(value1, value2, value3, ...),...(value1, value2, value3, ...);

数据表的删除

删除数据表

DROP TABLE 表名;

删除数据

删除表内数据,用 delete。格式为:

DELETE FROM 表名 WHERE 删除条件;

实例:

DELETE FROM student WHERE stu_name = "刘太刚";   --删除学生表内姓名为刘太刚的记录

注: 只用delete的时候,一定要使用where并注明删除的条件,否则会删除整张表。

删除数据,但是保留表结构

清除表内数据,保存表结构,用 truncate。格式为:

TRUNCATE TABLE 表名;

数据表的修改

增加一个字段:

ALTER TABLE 表名 ADD COLUMN 字段名 数据类型 字段约束;

实例:

ALTER TABLE student ADD COLUMN stu_honor VARCHAR(20) DEFAULT NULL;

删除一个字段:

ALTER TABLE 表名 DROP COLUMN 字段名;

修改一个字段:

ALTER TABLE 表名 MODIFY 字段名 数据类型;  --修改数据类型ALTER  TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;   --修改字段名称
ALTER TABLE student MODIFY stu_honor VARCHAR(10); ALTER TABLE student CHANGE stu_honor stu_honour varchar(200);

数据表的查询

一般查询

一般查询的格式

SELECT column_name,column_name, ...FROM table_name[WHERE Clause][LIMIT N][ OFFSET M]

查询所有数据

实例:

SELECT * FROM student ;SELECT stu_name, stu_number FROM student ;    --所有数据中的指定字段

根据条件查询

实例:

select * from student where id= 1;select * from student where stu_name='徐维松' and stu_number='2345' ;select * from student where stu_name='徐维松' or stu_number='3456' ;select * from student where stu_age>=18 and stu_age<=21 ;select * from student where stu_age between 20 and 23;

模糊查询

实例:

select * from student where stu_name like '%克喜';     --%通配符代表任意多个字符

排序

实例:

select * from student order by stu_age asc;    --按照价格升序排列select * from student order by stu_age desc;    --按照价格降序排列

统计函数(聚合函数)

实例:

select count(*) from student;     --查询表中有多少条数据select max(stu_age) from student;     --取价格的最大值select min(stu_age) from student;     --取价格的最小值select sum(stu_age) from student;     --取价格的总和select avg(stu_age) from student;     --取价格的平均值

分组查询

实例1:

select count(*) from student group by stu_address;

注: group by,一般和聚合函数一起使用,如果,查询的字段出现在GROUP BY后,却没有包含在聚合函数中,该字段显示的是,分组后的第一条记录的值,这样,可能会导致查询结果不符合我们的预期。

实例2:

SELECT COUNT(*) FROM student GROUP BY stu_address HAVING SUM(stu_age)>60;    --使用stu_address作为分组的条件, 找出满足stu_age的和大于60的那一组

注: HAVING关键字和WHERE关键字的作用相同,都是用于设置条件表达式,对查询结果进行过滤。两者的区别是,HAVING关键字后,可以跟聚合函数,而WHERE关键字不能,通常情况下,HAVING关键字,都是和GROUP BY一起使用,用于对分组后的结果进行过滤。

分页查询

select * from student limit 0,3;    -- 跳过几条数据取几条数据

总结:

SELECT * FROM table_name LIMIT offset, size;    -- offset:偏移量; size:数据量

去重(chong)查询

select distinct stu_address from student;

连结查询

内联接

(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。

内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。

外联接

外联接可以是左向外联接、右向外联接或完整外部联接。

在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:

1)LEFT JOIN或LEFT OUTER JOIN

左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

2)RIGHT JOIN 或 RIGHT OUTER JOIN

右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

3)FULL JOIN 或 FULL OUTER JOIN 完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

交叉联接

交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。 FROM 子句中的表或视图可通过内联接或完整外部联接按任意顺序指定;但是,用左或右向外联接指定表或视图时,表或视图的顺序很重要。有关使用左或右向外联接排列表的更多信息,请参见使用外联接。

例子

img

1) 内连接

img

2)左连接

img

3) 右连接

img

4) 完全连接

img

转载于:https://my.oschina.net/u/3471006/blog/1831173

你可能感兴趣的文章
基于FPGA的VGA显示静态图片
查看>>
shell之脚本练习
查看>>
版本控制git之五-标签管理 tags 标签 代码版本 如: v1.0
查看>>
分享Silverlight/WPF/Windows Phone一周学习导读(1月9日-1月16日)
查看>>
rsync生产排错FAQ整理16
查看>>
Ruby和SHELL中如何遍历指定目录的文件
查看>>
NSLocalizedString 实现国际化
查看>>
迎接“云”时代的全面到来
查看>>
梭子鱼邮件归档设备配置
查看>>
论“性能需求分析”系列专题(一)之 性能需求剖析
查看>>
oracle删除一个用户
查看>>
VR與AI的激情相遇
查看>>
CentOS 7.5 使用 yum 安装 Kubernetes 集群(二)
查看>>
排错之网络映射缓存凭证记录导致备份计划任务失败
查看>>
[Selenium] 基本使用
查看>>
大二的时候是傻X
查看>>
Effective 笔记
查看>>
Android应用程序组件Content Provider简要介绍和学习计划
查看>>
Vim配置文件(全平台可用)2012-05-01版
查看>>
分享20款可以用于商业项目的免费细英文字体
查看>>