MySQL必知必会(上)

一. 数据库

1.数据库简介

数据库是一类软件,这一类软件可以“管理数据”(保存数据,增删查改)。其可分为关系型数据库(如:Oracle,MySQL,SQLServer)和非关系型数据库(如Redis,MongoDB)。
实际开发中,一个复杂的系统(网站)背后往往有多种“存储介质”,很可能是关系型数据库和非关系型数据库搭配使用的。

2.MySQL简介

MySQL就是关系型数据库的一种,其免费开源,是个稳定,可靠,快速,可信的系统。
MySQL是一个==“客户端-服务器”==结构(c/s结构 client/server)的程序,客户端给服务器发送请求,服务器给客户端做出响应。

二. MySQL基础

MySQL服务器中,有多个数据库(database),每个数据库中又有多个表(table,类似于Excel),一个表里有多行多列,用于存储数据。
在这里插入图片描述

2.1 数据类型

由于SQL是一门古老的语言,所以数据类型的名字不像现有的主流编程语言那么规范。
数值类型
在这里插入图片描述
字符串类型
在这里插入图片描述

日期类型
在这里插入图片描述

2.2 数据库(database)基本操作

创建数据库

create database 数据库名 (charset utf8); //设定字符集

查看数据库

show databases;

选中数据库

use 数据库名;

删除数据库

drop database 数据库名;

需要注意的是,删除数据库是一个十分危险的操作,删除之后,将损失所有数据(如果数据比较重要,后果就会很严重)。

2.3 数据库的表(table)操作

数据表是存储数据的基本单位,针对数据表的操作,一定要先选中数据库

创建表

create table table_name(
    field1 datatype comment "name",
    field2 datatype,
    field3 datatype
);

可以使用comment增加字段说明。

删除表

drop table table_name;

删除 stu_test 表
drop table stu_test;
如果存在 stu_test 表,则删除 stu_test 表
drop table if exists stu_test;

查看表结构

desc table_name;

2.4 CRUD

CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写。

插入数据

单行数据+全列插入

插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致
INSERT INTO student VALUES (100, 10000, '唐三藏', NULL);
INSERT INTO student VALUES (101, 10001, '孙悟空', '11111');

多行数据+指定列插入

插入两条记录,value_list 数量必须和指定列数量及顺序一致
INSERT INTO student (id, sn, name) VALUES 
(102, 20001, '曹孟德'),
(103, 20002, '孙仲谋');

删除数据

delete from 表 where 条件 limit条件

DELETE FROM exam_result WHERE name = '孙悟空';
删除整表数据
DELETE FROM for_delete;

值得注意的是,删除整表数据并非删除表,而是将表中所有数据删除,留下一个空表

修改数据

update 表 set 字段1=value1, 字段2=value2... where 条件

将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70UPDATE exam_result SET math = 60, chinese = 70 WHERE name = '曹孟德';
将总成绩倒数前三的 3 位同学的数学成绩加上 30UPDATE exam_result SET math = math + 30 ORDER BY chinese + math + english LIMIT 3;
将所有同学的语文成绩更新为原来的 2UPDATE exam_result SET chinese = chinese * 2;

查询数据

1.全列查询
SELECT * FROM exam_result;
2.指定列查询
  指定列的顺序不需要按定义表的顺序来
SELECT id, name, english FROM exam_result;
3.查询字段为表达式
SELECT id, name, chinese + math + english 总分 FROM exam_result;
4.用别名
SELECT column [AS] alias_name [...] FROM table_name;
5.去重:distinct
SELECT DISTINCT math FROM exam_result;
6.排序 :order by         asc升序(默认)      desc降序

注意:NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面。

可以对多个字段进行排序,排序优先级随书写顺序
SELECT name, math, english, chinese FROM exam_result 
ORDER BY math DESC, english, chinese;

条件查询:where
比较运算符:
在这里插入图片描述

逻辑运算符:
在这里插入图片描述
注意:and的优先级要高于or
WHERE条件可以使用表达式,但不能使用别名。

7.条件查询
SELECT name, english FROM exam_result WHERE english < 60;
查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
SELECT name, math FROM exam_result WHERE math IN (58, 59, 98, 99);
 % 匹配任意多个(包括 0 个)字符
SELECT name FROM exam_result WHERE name LIKE '孙%';-- 匹配到孙悟空、孙权
_ 匹配严格的一个任意字符
SELECT name FROM exam_result WHERE name LIKE '孙_';-- 匹配到孙权

其中%和_叫做通配符,可以匹配任意字符,区别是%可以匹配任意多个字符,而_只能匹配一个字符。
同样的效果,还可以用正则表达式来完成,这时需要使用到关键字REGEXP
下面来讲述一下LIKEREGEXP的区别:

SELECT name FROM exam_result WHERE name LIKE '孙';  查询不到结果
SELECT name FROM exam_result WHERE name REGEXP '孙';  匹配到孙悟空、孙权
 SELECT name FROM exam_result WHERE name LIKE '孙%'; 该语句与上面的REGEXP达到同样的效果

即like匹配整个列,而REGEXP可以匹配列中的某些值
在正则表达式中,.可以匹配任意字符;|表示或,用[]括起来可以省略;-用来表示范围,\\表示转义。

8.分页查询
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值