2025年学数据库的基础(学数据库的基础是什么)

学数据库的基础(学数据库的基础是什么)什么是数据库 数据库的英文单词 data base 简称 DB 数据库实际上就是一个文件集合 是一个存储数据的仓库 本质就是一个文件系统 数据库是按照特定的格式把数据存储起来 用户可以对存储的数据进行增删改查操作 总而言之 数据库就是用于存储和管理数据的仓库 数据库分为两大类 关系型数据库 是建立在关系模型基础上的数据库 比如 MySQL Oracle DB2 SQL

大家好,我是讯享网,很高兴认识大家。



数据库MySQL(带你零基础入门MySQL)_MySQL
讯享网


什么是数据库?

数据库的英文单词:data base,简称DB。

数据库实际上就是一个文件集合,是一个存储数据的仓库,本质就是一个文件系统,数据库是按照特定的格式把数据存储起来,用户可以对存储的数据进行增删改查操作。

(总而言之,数据库就是用于存储和管理数据的仓库。)

数据库分为两大类:

  • 关系型数据库:是建立在关系模型基础上的数据库。(比如:MySQL、Oracle、DB2、SQL Server)
  • 非关系型数据库(NO SQL):通常指数据之间无关系的数据库。(比如:monggodb、redis(键值对的方式存储、redis默认端口:6379))

MySQL简介

  • MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发。
  • 世界上最流行的几款数据库之一。
  • 优点:是一款轻量级数据库、免费、开源、适用于中大型网站。
  • MySQL默认端口号:3306。

数据库服务器、数据库和表的关系:

  • 所谓安装数据库服务器,只是在机器上装一个数据库管理系统(比如: MySQL),用来管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
  • 为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。数据库MySQL(带你零基础入门MySQL)_MySQL_02

Xshell、Xftp、Navicat:

数据库MySQL(带你零基础入门MySQL)_MySQL_03==Xshell或Xftp连接Linux服务器默认端口:22==

SQL介绍

Structured Query Language:结构化查询语言。

SQL是专门为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”命令,“怎么做”是不用使用者考虑的。

SQL语法特点

  • 创建数据库:

    格式:create database [数据库名称];

    例如:create database chs;

  • 创建数据库,并指定字符集:

    格式:create database [数据库名称] character set [字符集名];

    例如:create database chs character set utf8;

  • 创建数据库,并指定字符集、排序规则:

    格式:create database [数据库名称] character set [字符集名] collate [排序规则];

    例如:create database chs character set utf8 collate utf8_general_ci;

显示数据库命令

  • 显示数据库:

    show databases;

    数据库MySQL(带你零基础入门MySQL)_MySQL_08
  • 模糊查询数据库:

    show databases like ‘%heshen%’;

    数据库MySQL(带你零基础入门MySQL)_MySQL_09

  • 查看查询某个数据库的创建语句、字符集:

    格式:show create database [数据库名称];

    例如:show create database hesheng;

    数据库MySQL(带你零基础入门MySQL)_MySQL_10

删除数据库命令

格式:drop database [数据库名称];

例如:drop database chs;

数据库MySQL(带你零基础入门MySQL)_MySQL_11

选中某个数据库

格式:use [数据库名称];

例如:use hesheng;

PS:这个命令可以不加分号。

数据库MySQL(带你零基础入门MySQL)_MySQL_12

数据在数据库中的存储方式:

数据库MySQL(带你零基础入门MySQL)_MySQL_13

表中列的数据类型——数值型

TINYINT 1字节 (-128,127) (0,255) 小整数值 SMALLINT 2字节

大整数值 MEDIUMINT 3字节

大整数值 INT或INTEGER 4字节

大整数值 BIGINT 8字节

极大整数值 FLOAT 4字节

单精度浮点数值 DOUBLE 8字节

双精度浮点数值 DECIMAL 对于DECIMAL(M,D),如果M>D则为M+2,否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值











有符号和无符号(UNSIGNED)

在计算机中,可以区分正负的类型,称为有符号类型。

无正负的类型,称为无符号类型。

简单的理解为就是,有符号值可以表示负数、0、正数,无符号值只能为0或者正数。

FLOAT、DOUBLE、DECIMAL

FLOAT(10,2):总长度为10,小数点后有2位。

DOUBLE和DECIMAL也类似。

超出范围会四舍五入。

表中列的数据类型——字符型

  • CHAR:定长字符串。CHAR(4) – ‘    d’
  • VARCHAR:变长字符串。VARCHAR(4) – ’d’
  • CHAR的查询效率要高于VARCHAR。

表中列的数据类型——日期型

DATE



TIME



YEAR



DATETIME



TIMESTAMP 1970-01-01 00:00:00    结束时间是第秒,北京时间2038-1-19 11:14:07,格林尼治时间2038年1月19日 凌晨03:14:07





















TIMESTAMP和DATETIME的异同:

  • 相同点:两者都可以用来表示YYYY-MM-DD HH:MM:SS类型的日期。
  • 不同点:
    • TIMESTAMP所能存储的时间范围为:’1970-01-01 00:00:01.000000’到’2038-01-19 03:14:07.’
    • DATETIME所能存储的时间范围为:’1000-01-01 00:00:00.000000’到’9999-12-31 23:59:59.’
    • 对于TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,又将其转化为客户端当前时区进行返回。(PS:中国时区为+8区)
    • 而对于DATETIME,不做任何改变,基本上是原样输入和输出。
    • 两者的存储方式不一样:
    • 两者所能存储的时间范围不一样:

操作命令:

  • 创建表前,要先选中某个数据库(use [数据库名称]);
  • 列和列之间用逗号隔开,列内用空格隔开;
  • 创建表时,要根据需保存的数据创建相应的列,并根据要存储数据的类型定义相应的列类型。

查看表

删除表

格式:drop table [数据表名称];

例如:

drop table hesheng;

讯享网

修改表

  • 默认自动添加到数据表字段的末尾;
  • 如果要加在第一列在最后加个FIRST;
  • 如果要加在某一列的后面,在最后面加个AFTER某一列列名。

增(insert)

讯享网– 插入数据 INSERT INTO user_info ( user_id, user_name, PASSWORD, user_nick, card_num ) VALUES

( 1, 'zhangsan', 'abc123', 'zhangsanfeng',  ), ( 2, 'lisi', '122bbb', 'limochou',  ), ( 3, 'wangwu', '123aaa', 'wangbaiwan',  ), ( 4, 'liuqi', '12aaa', 'liuchuanfeng',  ), ( 5, 'zhangliu', '12aaa', 'zhangwuji',  );</pre><blockquote><p>删(delete)</p></blockquote><p>语法:</p><blockquote><p>drop和delete的区别❓(面试题)</p></blockquote><ul><li>drop是删除数据库、数据表、数据表中的某一列。</li><li>delete是删除某一行数据。</li></ul><blockquote><p>改(update)</p></blockquote><p>语法:</p><pre>update user_info set username = "poopoo" where userid = 1;</pre><blockquote><p>查(select)</p></blockquote><p>具体详情查看后面实践</p><ul><li><p>使用order by子句,对查询结果进行排序。</p></li><li><p>order by 指定排序的列 asc(升序)/desc(降序)。</p></li><li><p>order by 子句一般位于select语句的结尾。</p></li></ul><p>聚合命令</p><ul><li><p>select * from 表名 limit m,n;</p></li><li><p>其中m是指从哪行开始,m从0取值,0表示第一行。</p></li><li><p>n是指从第m+1条开始,取n条。</p></li><li><p>select * from 表名 limit 0,2(从第一行开始,显示两行结果)</p></li><li><p>如果只给定一个参数,它表示返回最大的行数目:</p><p>select * from table limit 5;查询前5行</p></li><li><p>limit n 等价于 limit 0,n</p></li></ul><ul><li>count(*):包括所有列,返回表中的总行数,在统计结果的时候,不会忽略值为Null的行数。</li><li>count(1):包括所有列,1表示一个固定值,没有实际含义,在统计结果的时候,不会忽略列值为Null的行数,和count(*)的区别是执行效率不同。</li><li>count(列名):只包括列名指定列,返回指定列的行数,在统计结果的时候,不统计列值为Null,即列值为Null的行数不统计在内。</li><li>count(distinct 列名):返回指定列的不重复的行数,在统计结果的时候,会忽略列值为NULL的行数(不包括空字符和0),即列值为NULL的行数不统计在内。</li><li>count(*)、count(1)、count(列名)执行效率比较:</li></ul><p>分组</p><p>GROUP BY</p><pre>select sum(price), count(user_id), product_id from order_info_table group by product_id having count(user_id) &gt; 2;</pre><ul><li><p>使用group by子句对列进行分组。</p></li><li><p>然后还可以使用having子句过滤,having通常跟在group by后,它作用于组。</p></li><li><p>不加having过滤:</p><p>select 列名,聚合函数 from 表名 where 子句 group by 列名;</p></li><li><p>加上having过滤:</p><p>select 列名,聚合函数 from 表名 where 子句 group by 列名 having 聚合函数 过滤条件;</p></li><li><p>注意:使用group by后只能展示分组的列名+聚合函数结果,因为其余列已经基于分组这一列合并。</p></li></ul><ul><li>嵌套在其他查询中的查询。</li><li>语句:select 列名1 from 表1 where 列名2 in (select 列名2 from 表2 where 列名3 = 某某某);</li><li>注意:一般在子查询中,程序先运行嵌套在最内层的语句,再运行外层。因此在写子查询语句时,可以先测试一下内层的子查询语句是否输出了想要的内容,再一层一层往外测试,增加子查询的正确率。</li></ul><blockquote><p>????补充:数据库名和表名在windows中是大小写不敏感的,而在大多数类型的UNIX系统中大小写是敏感的。</p></blockquote><p><img src="https://s2.51cto.com/images/blog//24/c3b98b9764db4ffd13dec262.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184" alt='数据库MySQL(带你零基础入门MySQL)_MySQL_14' style="margin:auto;" class="cto-img" /></p><p><img src="https://s2.51cto.com/images/blog//24/b9a1db75cdd828ee11e41e0d82.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184" alt='数据库MySQL(带你零基础入门MySQL)_MySQL_15' style="margin:auto;" class="cto-img" /></p><blockquote><p>练习题:</p></blockquote><p>一、创建如下要求的表格,并完成相应的题目。</p><p><img src="https://s2.51cto.com/images/blog//24/b2ca24caece7ac651aefa3159c3226fc.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184" style="margin:auto;" class="cto-img" alt='数据库MySQL(带你零基础入门MySQL)_MySQL_16' /><img src="https://s2.51cto.com/images/blog//24/02cbfdd60cb2b63cfa0c6c89d.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184" style="margin:auto;" class="cto-img" alt='数据库MySQL(带你零基础入门MySQL)_MySQL_17' /></p><pre>-- 创建表 

CREATE TABLE user_info (

讯享网user_id INT NOT NULL AUTO_INCREMENT, user_name CHAR ( 10 ), password VARCHAR ( 10 ), user_nick VARCHAR ( 10 ), card_num BIGINT, PRIMARY KEY ( user_id )  

);

– 插入数据 INSERT INTO user_info ( user_id, user_name, PASSWORD, user_nick, card_num ) VALUES

( 1, 'zhangsan', 'abc123', 'zhangsanfeng',  ), ( 2, 'lisi', '122bbb', 'limochou',  ), ( 3, 'wangwu', '123aaa', 'wangbaiwan',  ), ( 4, 'liuqi', '12aaa', 'liuchuanfeng',  ), ( 5, 'zhangliu', '12aaa', 'zhangwuji',  ); 

–  user_nick长度不够,修改user_nick的长度再重新插入数据 ALTER TABLE user_info MODIFY user_nick VARCHAR ( 20 );

数据库MySQL(带你零基础入门MySQL)_MySQL_18数据库MySQL(带你零基础入门MySQL)_MySQL_19

讯享网– 创建订单表 CREATE TABLE order_info (

order_id INT UNSIGNED ZEROFILL NOT NULL, price DECIMAL ( 10, 2 ) NOT NULL, order_status VARCHAR ( 30 ) NOT NULL, product_id INT NOT NULL, created datetime DEFAULT "2019-01-01 00:00:00", user_id INT NOT NULL, 

PRIMARY KEY ( order_id )  );

– 插入数据 INSERT INTO order_info VALUES

讯享网( 1, 4.99, 'pay', 1001, '2019-09-25 10:25:26', 1 ), ( 2, 9.99, 'nopay', 1002, '2019-09-26 10:25:26', 1 ), ( 3, 4.99, 'pay', 1001, '2019-09-25 10:25:26', 2 ), ( 4, 9.99, 'nopay', 1002, '2019-09-24 10:25:26', 2 ), ( 5, 19.99, 'pay', 1003, '2019-09-26 10:25:26', 2 ), ( 6, 4.99, 'pay', 1001, '2019-09-25 10:25:26', 3 ), ( 7, 4.99, 'pay', 1001, '2019-09-25 10:25:26', 4 ), ( 8, 9.99, 'pay', 1002, '2019-09-25 10:25:26', 4 ), ( 9, 19.99, 'pay', 1003, '2019-09-26 10:25:26', 4 ), ( 10, 29.99, 'pay', 1002, '2019-09-26 10:25:26', 6 );</pre><pre>-- where子句小练习 

– 1. 满足价格大于等于9的所有信息 SELECT * FROM order_info WHERE price &gt;= 9;

– 2. 查找满足product_id在1002和1003之间的 SELECT * FROM order_info WHERE product_id BETWEEN 1002 AND 1003;

– 3. 查找user_id在1、3、5这三个数内的信息 SELECT * FROM order_info WHERE user_id IN (1,3,5);

– 4. 查找订单状态是已支付的信息 SELECT * FROM order_info WHERE order_status = ’pay’;

– 5. 查找用户名类似于已li开头的信息 SELECT * FROM user_info WHERE user_name LIKE ’li%‘;

– 6. 查找用户名中第二个字母是h的信息 SELECT * FROM user_info WHERE user_name LIKE ’_h%‘;

– 7. 查找用户名中第二个字母不是h的信息 SELECT * FROM user_info WHERE user_name NOT LIKE ’_h%‘;

– 8. 查找用户名中最后一个字母以i结尾的信息 SELECT * FROM user_info WHERE user_name LIKE ’%i’;

– 9. 查找价格大于8,并且订单状态是已支付的所有信息 SELECT * FROM order_info WHERE price &gt; 8 AND order_status = ’pay’;

– 10.查找用户表中user_nick为null的信息 SELECT * FROM user_info WHERE user_nick IS NULL;

– 11.查找用户表中user_nick为 not null的信息 SELECT * FROM user_info WHERE user_nick IS NOT NULL;

– 聚合函数练习 – 1. 查找订单表中最大的价格,查找订单表中最小的价格 SELECT MAX(price),MIN(price) FROM order_info;

– 2. 查找订单表中user_id=2的最小价格 SELECT MIN(price) FROM order_info WHERE user_id = 2;

– 3. 分别列出订单表中user_id=2的最小价格和最大价格 SELECT MIN(price),MAX(price) FROM order_info WHERE user_id = 2;

– 4. 分别列出订单表中user_id=2的最小价格和最大价格,并把最小价格的展示结果的列名改为”min_price” SELECT MIN(price) AS min_price,MAX(price) FROM order_info WHERE user_id = 2;

– 5. 求订单表的价格的平均值,求订单表中user_id=2的价格的平均值 SELECT AVG(price) FROM order_info; SELECT AVG(price) FROM order_info WHERE user_id = 2;

– 6. 分别列出订单表中user_id=2的价格的平均值、最小值、最大值 SELECT AVG(price),MIN(price),MAX(price) FROM order_info WHERE user_id = 2;

– 7. 求订单表中user_id=1的价格的总和 SELECT SUM(price) FROM order_info WHERE user_id = 1;

– 8. 求订单表中user_id=1或者user_id=3的价格总和 SELECT SUM(price) FROM order_info WHERE user_id = 1 OR user_id = 3;

讯享网– 分组练习 – 1.首先筛选状态为已支付的订单,然后按照user_id分组,分组后每一组对支付金额进行求和,最终展示user_id和对应组求和金额 SELECT user_id,SUM(price) FROM order_info WHERE order_status = ’pay’ GROUP BY user_id;

– 2.首先筛选状态为支付的订单,然后按照user_id分组,分组后每一组对支付金额进行求和,再过滤求和金额大于10的,最终展示user_id和对应组的求和金额 SELECT user_id,SUM(price) FROM order_info WHERE order_status = ’pay’ GROUP BY user_id HAVING SUM(price) &gt; 10;

– 数据表连接查询和子查询练习 – 1.查询订单表中的价格大于10元的用户的昵称(小提示:用户昵称在用户表中,订单价格在订单表中) SELECT a.user_nick FROM user_info a INNER JOIN order_info b ON a.user_id = b.user_id WHERE b.price &gt; 10; SELECT user_nick FROM user_info WHERE user_id IN (SELECT user_id FROM order_info WHERE price &gt; 10);

– 2.查询用户名以l开头的用户买过的所有订单id和对应价格(小提示:订单id和对应价格在订单表中,用户名在用户表中) SELECT o.order_id,o.price FROM order_info o WHERE o.user_id IN (SELECT user_id FROM user_info u WHERE u.user_name LIKE ’l%‘);

二、创建如下要求的表格,并完成相应的题目。

数据库MySQL(带你零基础入门MySQL)_MySQL_20

数据库MySQL(带你零基础入门MySQL)_MySQL_21

讯享网– 1.按照表定义创建商品表+供应商表 – 2.按照表数据插入所有数据

– 创建商品表 CREATE TABLE products_info (

product_id INT UNSIGNED ZEROFILL NOT NULL, product_name VARCHAR ( 30 ) DEFAULT 'water', classification VARCHAR ( 30 ), weight FLOAT ( 10, 2 ), supplier_id INT, 

PRIMARY KEY ( product_id )  );

– 向商品表插入数据 INSERT INTO products_info VALUES

讯享网( 1001, 'water', 'Daily_Necessities', 0.55, 1 ), ( 1002, 'soap', 'Daily_Necessities', 0.15, 2 ), ( 1003, 'paper', 'Daily_Necessities', 0.12, 3 ), ( 1004, 'pingpangqiu', 'sports', 0.05, 4 ), ( 1005, 'yumaoqiu', 'sports', 0.04, 6 );</pre><pre>-- 创建供应商表 

CREATE TABLE suppliers_info (

supplier_id INT NOT NULL AUTO_INCREMENT, supplier_name VARCHAR ( 30 ), Registration_number INT, contacts VARCHAR ( 30 ), contacts_phone_num CHAR ( 11 ), 

PRIMARY KEY ( supplier_id )  );

– 向供应商表插入数据 INSERT INTO suppliers_info VALUES

讯享网( 1, 'nongfushanquan', , 'mayun', '' ), ( 2, 'jiajieshi', , 'liuqiangdong', '' ), ( 3, 'qingfeng', , 'mahuateng', '' ), ( 4, '361du', , 'renzhenfei', '' ), ( 5, 'anta', , 'leijun', '' );</pre><pre>-- 3.修改供应商id为4的供应商名称为‘hongshuangxi’ 

UPDATE suppliers_info SET supplier_name = ’hongshuangxi’ WHERE supplier_id = 4;

– 4.查询商品重量大于0.10的商品的名称 SELECT product_name FROM products_info WHERE weight &gt; 0.10;

– 5.查询商品名称以字母p开头的商品的所有信息 SELECT * FROM products_info WHERE product_name like ’p%‘;

– 6.查询商品重量大于0.10,小于0.20的商品名称 SELECT product_name FROM products_info WHERE weight &gt; 0.10 AND weight &lt; 0.20;

– 7.按照商品分类统计各自的商品总个数,显示每个分类和其对应的商品总个数 SELECT classification,COUNT(classification) FROM products_info GROUP BY classification;

– 8.将所有商品的名称按照商品重量由高到低显示 SELECT product_name,weight FROM products_info ORDER BY weight DESC;

– 9.显示所有商品的信息,在右边显示有供应商的商品对应的供应商信息 SELECT * FROM products_info a LEFT JOIN suppliers_info b ON a.supplier_id = b.supplier_id;

– 10.显示重量大于等于0.15的商品的供应商的联系人和手机号 SELECT s.contacts,s.contacts_phone_num FROM suppliers_info s INNER JOIN products_info p ON s.supplier_id = p.supplier_id and p.weight &gt;= 0.15;


小讯
上一篇 2025-05-27 16:07
下一篇 2025-05-16 22:09

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/206833.html