关系型数据库mysql(一)

本文介绍了MySQL数据库的基础知识,包括关系型数据库结构、Mysql的数据类型(如int、float、decimal、varchar、char、text和日期类型)、数据类型的操作方法、算术、关系、逻辑运算符、聚合函数以及编码集问题,为初学者提供了全面的MySQL学习指南。
摘要由CSDN通过智能技术生成

提示:以下是本篇文章正文内容,下面案例可供参考

一、关系型数据库

(1)关系数据库:通过具有行列关系的表进行数据存储。

(2)关系型数据库主要的类型:mysql,oracle,sqlserver等。

(3)mysql数据库的特点:免费的,跨平台的;在数据库中有默认的三个表:information_schema,mysql,performance_schema。

二、Mysql的数据类型

1.数字类型

1.1 int

与java整数类型的对应:

java的整数类型byteshortintlong
mysql的整数类型tinyint(1个字节)samallint(2个字节)int(4个字节)bigint(8个字节)

1.2 浮点类型

(1)flloat:小数位少,精确度比较低

(2)double:小数位多,精确度比较高

double类型的数据在进行运算时,结果可能不精确。

(3)decimal

格式:decimal(数字1,数字2)

数字1:当前的数最多一共有几位

数字2:小数占几位

mysql> create table t4(age decimal(5,2));--age中的数最多5位,其中小数点后面有2位
Query OK, 0 rows affected (0.04 sec)

mysql> insert into t4(age) values(1.22);
Query OK, 1 row affected (0.02 sec)

mysql> select * from t4;
+------+
| age  |
+------+
| 1.22 |
+------+
1 row in set (0.00 sec)

mysql> insert into t4(age) values(333.22);
Query OK, 1 row affected (0.00 sec)

mysql> insert into t4(age) values(3313.22);
ERROR 1264 (22003): Out of range value for column 'age' at row 1--插入的数是6位超出范围
mysql> insert into t4(age) values(333);--存入虽然是整数,但是存入后默认有两位小数
Query OK, 1 row affected (0.00 sec)

mysql> select * from t4;
+--------+
| age    |
+--------+
|   1.22 |
| 333.22 |
| 333.00 |
+--------+
3 rows in set (0.00 sec)
mysql> insert into t4(age) values(1.222435435465765);--虽然小数位数超出2位,但还是可以存,默认只存小数点后两位
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> select * from t4;
+--------+
| age    |
+--------+
|   1.22 |
| 333.22 |
| 333.00 |
|   1.22 |
+--------+
4 rows in set (0.00 sec)

2.字符串类型

2.1 varchar类型

(1)varchar在进行数据存储时,没有默认长度,必须指定长度,不然会报错

mysql> create table t5(age varchar);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

(2)varchar类型进行字符串存储时,存储容量大。

2.2 char类型

char类型进行数据存储时,有默认长度为1,可以不指定长度,char类型的最大长度为255.

mysql> create table t5(age char);
Query OK, 0 rows affected (0.04 sec)

mysql> desc t5;--查询表中各字段的详细信息
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| age   | char(1) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)


mysql> create table t6(age char(99999));
ERROR 1074 (42000): Column length too big for column 'age' (max = 255); use BLOB or TEXT instead

  如果没有指定字段类型,默认为char类型


varchar和char的区别:

(1)varchar是变长字符串,在进行数据存储时会根据字符串的实际长度进行空间的占用,剩下空间释放。

优点:可以节省空间;缺点:释放时浪费时间

(2)char是定长字符串,创建时分配的空间会进行全部占用,即使字符串实际长度不够占用全部空间,也会有空间磁盘占用 

优点:节省时间   缺点:占用空间

3.text类型

优点:不用指定长度,若不知道字符串的长度,使用text类型

4. 日期类型

(1)用数字表示日期时,插入数据需要保证数据的位数:年份4位,月份2位,日期2位;

(2)插入字符串表示年月日("xxxx-x-x"),时分秒("x:x:x")可以不严格保证数据的位数,例如1999年1月1日,用数字插入必须写成:19990101,用字符串表示:“1999-1-1”就可以

  1.  date 

    表示年月日,可以表示生日

  2. time

    表示时分秒,可以用来线上考试计时

  3. datetime 和 timestamp

    表示年月日时分秒

  4. year

    年份的存储

三、数据类型相关的方法

1.数字类型方法

mysql> select pi();--查询π的值
+----------+
| pi()     |
+----------+
| 3.141593 |
+----------+
1 row in set (0.00 sec)

mysql> select floor(9.9999);--向下取整
+---------------+
| floor(9.9999) |
+---------------+
|             9 |
+---------------+
1 row in set (0.00 sec)

mysql> select ceil(2.0001);--向上取整
+--------------+
| ceil(2.0001) |
+--------------+
|            3 |
+--------------+
1 row in set (0.00 sec)

mysql> select round(4.5);--四舍五入取整
+------------+
| round(4.5) |
+------------+
|          5 |
+------------+
1 row in set (0.00 sec)


mysql> select pow(2,3);--计算平方
+----------+
| pow(2,3) |
+----------+
|        8 |
+----------+
1 row in set (0.00 sec)

mysql> select sqrt(9);--求平方根
+---------+
| sqrt(9) |
+---------+
|       3 |
+---------+
1 row in set (0.00 sec)

2.字符串类型方法

mysql> select length("中");-- 求字节长度
+--------------+
| length("中") |
+--------------+
|            3 |
+--------------+
1 row in set (0.18 sec)


mysql> select char_length("中");-- 求字符长度
+-------------------+
| char_length("中") |
+-------------------+
|                 1 |
+-------------------+
1 row in set (0.12 sec)


mysql> select substr("abcd",1,3);-- 1是截取的位置,3是截取的个数;字符串位置是从1开始的
+--------------------+
| substr("abcd",1,3) |
+--------------------+
| abc                |
+--------------------+
1 row in set (0.17 sec)



mysql> select substr("123456789",-1);-- 截取最后一个字符
+------------------------+
| substr("123456789",-1) |
+------------------------+
| 9                      |
+------------------------+
1 row in set (0.09 sec)



mysql> select right("fdgfdgfdgfhgfd",3);-- 截取倒数三个字符
+---------------------------+
| right("fdgfdgfdgfhgfd",3) |
+---------------------------+
| gfd                       |
+---------------------------+
1 row in set (0.09 sec)

mysql> select left("fdgfdgfdgfhgfd",3);-- 截取前三个字符
+--------------------------+
| left("fdgfdgfdgfhgfd",3) |
+--------------------------+
| fdg                      |
+--------------------------+
1 row in set (0.16 sec)


mysql> select concat("a",24,3,5,4,65,76,8,7);-- 字符串拼接
+--------------------------------+
| concat("a",24,3,5,4,65,76,8,7) |
+--------------------------------+
| a24354657687                   |
+--------------------------------+
1 row in set (0.09 sec)

mysql> select concat_ws("-","a",24,3,5,4,65,76,8,7);-- 字符串拼接,以及拼接的分隔符为-
+---------------------------------------+
| concat_ws("-","a",24,3,5,4,65,76,8,7) |
+---------------------------------------+
| a-24-3-5-4-65-76-8-7                  |
+---------------------------------------+
1 row in set (0.10 sec)

mysql> select replace("abc","b","B");-- 字符替换
+------------------------+
| replace("abc","b","B") |
+------------------------+
| aBc                    |
+------------------------+
1 row in set (0.10 sec)

mysql> select upper("abc");-- 字母转大写
+--------------+
| upper("abc") |
+--------------+
| ABC          |
+--------------+
1 row in set (0.15 sec)

mysql> select lower("ABC");-- 字母转小写
+--------------+
| lower("ABC") |
+--------------+
| abc          |
+--------------+
1 row in set (0.15 sec)

3.日期类型

mysql> select now();-- 获取现在时间
+---------------------+
| now()               |
+---------------------+
| 2024-03-01 11:01:38 |
+---------------------+
1 row in set (0.17 sec)

mysql> select year(now());-- 获取现在的年份
+-------------+
| year(now()) |
+-------------+
|        2024 |
+-------------+
1 row in set (0.21 sec)

mysql> select month(now());-- 月
mysql> select day(now()); --日
mysql> select hour(now()); --时
mysql> select mimute(now()); --分
mysql> select second(now());-- 秒


mysql> select current_date()或者curdate();-- 获取现在的日期
+----------------+
| current_date() |
+----------------+
| 2024-03-01     |
+----------------+
1 row in set (0.08 sec)


mysql> select current_time();或者curtime();-- 获取现在是几点几分
+----------------+
| current_time() |
+----------------+
| 11:05:14       |
+----------------+
1 row in set (0.10 sec)

--获取到指定日期当前月份最后一天
mysql> select last_day(now());
+-----------------+
| last_day(now()) |
+-----------------+
| 2024-03-31      |
+-----------------+
1 row in set (0.15 sec)


mysql> select last_day("2023-2-1");
+----------------------+
| last_day("2023-2-1") |
+----------------------+
| 2023-02-28           |
+----------------------+
1 row in set (0.10 sec)


计算日期之间相差的年/月/日
select timestampdiff(year,过去的日期,now()) from ts --获取指定时间的间隔

四、运算符运算

1.算术运算符

  1. 加法:+
  2. 减:-
  3. 乘:*
  4. 除:/    会有小数
  5. 整除://或DIV
  6. 取余:% 或 MOD(m,n)

一般字符串(报错)和日期(不报错,结果不是想要的)不能做算术远算符的运算,但是如果两个字符串第一个是数字可以做加减法运算,否则都为0;例如“1fjdijf”+"2fso"结果是3;日期可以做加减法但是结果不是想要的结果。

2.符号运算符

  1. +数字:表示正数
  2. -数字:表示负数

3.关系运算符

>,<,>=,<=,=,!=,<>计算结果会用0和1表示,0表示正确,0表示错误

使用关系运算符不能进行null值的查询,null值特殊,需要使用特殊的关键词进行查询。字符串可以进行大小比较,但一般不用;日期可以进行大小比较。

4.逻辑运算符

  1. and :同时满足条件
  2. or :可以满足任意一个条件
  3. not :取反

5.关键词运算符

  1. is null :进行null数据值的查询
  2. is not null :进行不是null数据值的查询
  3. between 小值 and 大值 :表示一个从小到大的范围  (between 15 and35:表示包括15和35之间的数)
  4. not between 小值 and 大值 :表示不在一个从小到大的范围
  5. in :例如in (值1,值2,.......),表示在我们构造的范围内
  6. not in :表示不在我们构造的范围内
  7. like (not like):模糊查询,一般和通配符搭配使用
通配符%___like
释义任何字符可以出现任何次

只能匹配单个字符

,但不能没有字符

匹配字符数量不限相当于=

     8.as :为表或者字段名起别名

     9.distinct :去重,格式:distinct 去重的列


小结:运算符,关键词,方法运算都是基于行运算的

五、聚合函数

  1. sum(列名):求特定列的和
  2. max(列名):求特定列最大值
  3. min(列名):求特定列最小值
  4. avg(列名):求列平均值,不对null值进行计算
  5. coun(列名):求特定列的数据个数,会对null值进行统计

六、mysql数据库编码集问题

(1)mysql在安装时,默认的编码集是Latin1,不能存储中文;

(2)可以存储中文的编码集

  • utf-8:一个中文字符3个字节(utf8不能存储表情包,utfmb4可以)
  • gbk:一个中文2个字节
  • Unicode:一个中文4个字节

注意:在创建数据库时,必须指定具体的编码集;表在创建时,不指定编码集,表的编码集默认和数据库一致;数据库的编码及改变后,已经创建的数据库中的表编码集不会随着改变。

总结

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猿F

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值