[MYSQL / Mariadb]数据库学习-数据类型

数据类型

请添加图片描述

字符类型

1、有定长和变长两类。
2、通常赋值时,用双引号引起。

3、一个英语字母,就占用一个字符。

定长char

请添加图片描述

mysql> desc mysql.user;
+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                    | Type                              | Null | Key | Default               | Extra |
+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                     | char(255)                         | NO   | PRI |                       |       |
| User                     | char(32)                          | NO   | PRI | 
| ssl_cipher               | blob                              | NO   |     | NULL                  |       |
| x509_issuer              | blob                              | NO   |     | NULL                  |       |
| x509_subject             | blob                              | NO   |     | NULL                  |       |
| max_questions            | int(11) unsigned                  | NO   |     | 0                     |       |
| max_updates              | int(11) unsigned                  | NO   |     | 0                     |       |
| max_connections          | int(11) unsigned                  | NO   |     | 0                     |       |
| max_user_connections     | int(11) unsigned                  | NO   |     | 0                     |       |
| plugin                   | char(64)                          | NO   |     | caching_sha2_password |       |
| authentication_string    | text                              | YES  |     | NULL                  |       |

例:定义表结构的定长:

创建表,定义字符长度char

mysql> create table db1.st2( name char(5), address char(50) );
Query OK, 0 rows affected (0.17 sec)

mysql> show create table db1.st2 \G;
*************************** 1. row ***************************
       Table: st2
Create Table: CREATE TABLE `st2` (
  `name` char(5) DEFAULT NULL,
  `address` char(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.01 sec)

ERROR:
No query specified

mysql> select * from db1.st2;
Empty set (0.00 sec)

mysql> insert into db1.st2 values ("tom","USA");
Query OK, 1 row affected (0.00 sec)

mysql> select * from db1.st2;
+------+---------+
| name | address |
+------+---------+
| tom  | USA     |
+------+---------+
1 row in set (0.00 sec)

mysql> insert into db1.st2 values ("BOB","USA");
Query OK, 1 row affected (0.07 sec)

mysql> select * from db1.st2;
+------+---------+
| name | address |
+------+---------+
| tom  | USA     |
| BOB  | USA     |
+------+---------+
2 rows in set (0.00 sec)


创建超过5个字符的内容,报错数据太长
mysql> insert into db1.st2 values ("zhangsan","USA");
ERROR 1406 (22001): Data too long for column 'name' at row 1

变长 varchar

字符<=65532个字符

请添加图片描述

例:创建表,定义变长

mysql> create table db1.st3 (name char(6),email varchar(30));
Query OK, 0 rows affected (0.26 sec)

mysql> select * from db1.st3;
Empty set (0.03 sec)

mysql> insert into db1.st3 values ("BOB","guangdong-zhenzhen-baoan-xixiang");
ERROR 1406 (22001): Data too long for column 'email' at row 1
mysql> insert into db1.st3 values ("BOB","666777888.qq.com");
Query OK, 1 row affected (0.04 sec)

mysql> select * from db1.st3;
+------+------------------+
| name | email            |
+------+------------------+
| BOB  | 666777888.qq.com |
+------+------------------+
1 row in set (0.00 sec)

mysql> insert into db1.st3 values ("tom","444555666777888.qq.com");
Query OK, 1 row affected (0.07 sec)

mysql> select * from db1.st3;
+------+------------------------+
| name | email                  |
+------+------------------------+
| BOB  | 666777888.qq.com       |
| tom  | 444555666777888.qq.com |
+------+------------------------+
2 rows in set (0.00 sec)

mysql> insert into db1.st3 values ("TOM","222333444555666777888.qq.com");
Query OK, 1 row affected (0.00 sec)

mysql> select * from db1.st3;
+------+------------------------------+
| name | email                        |
+------+------------------------------+
| BOB  | 666777888.qq.com             |
| tom  | 444555666777888.qq.com       |
| TOM  | 222333444555666777888.qq.com |
+------+------------------------------+
3 rows in set (0.00 sec)

练习字符类型

请添加图片描述

mysql> create table db1.test1(name char(5),mail varchar(10),homeaddr varchar(50));
Query OK, 0 rows affected (1.06 sec)

mysql> show create table db1.test1;
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                      |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| test1 | CREATE TABLE `test1` (
  `name` char(5) DEFAULT NULL,
  `mail` varchar(10) DEFAULT NULL,
  `homeaddr` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

mysql> select * from db1.test1;
Empty set (0.00 sec)

mysql> desc db1.test1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| name     | char(5)     | YES  |     | NULL    |       |
| mail     | varchar(10) | YES  |     | NULL    |       |
| homeaddr | varchar(50) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.05 sec)


数值类型

1、分整数、浮点数

整数(tinyint, smallint, mediumint, int, bigint, unsigned)

请添加图片描述

以mysql> desc mysql.user; 为例

| max_questions            | int(11) unsigned                  | NO   |     | 0                     |       |
| max_updates              | int(11) unsigned                  | NO   |     | 0                     |       |
| max_connections          | int(11) unsigned                  | NO   |     | 0                     |       |
| max_user_connections     | int(11) unsigned                  | NO   |     | 0                     |       |
| plugin                   | char(64)                          | NO   |     | caching_sha2_password |       |
| authentication_string    | text                              | YES  |     | NULL                  |       |
| password_expired         | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed    | timestamp                         | YES  |     | NULL                  |       |
| password_lifetime        | smallint(5) unsigned              | YES  |     | NULL         


这里有int(11)位,无符号范围,小整数smallint(5)位,无符号范围

例:建个字段类型为微小整数的结构

mysql> create table db1.test2 (name char(10), age tinyint unsigned);
Query OK, 0 rows affected (2.86 sec)

mysql> desc db1.test2;
+-------+---------------------+------+-----+---------+-------+
| Field | Type                | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| name  | char(10)            | YES  |     | NULL    |       |
| age   | tinyint(3) unsigned | YES  |     | NULL    |       |
+-------+---------------------+------+-----+---------+-------+
2 rows in set (0.11 sec)


1、这里的 tinyint(3),3表示字长3位,0-255。

2、超过255,就会报错。
mysql> insert into db1.test2 values ("haha","100"),("hehe","800");
ERROR 1264 (22003): Out of range value for column 'age' at row 2



mysql> insert into db1.test2 values ("haha","100"),("hehe","80");
Query OK, 2 rows affected (0.31 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from db1.test2;
+------+------+
| name | age  |
+------+------+
| haha |  100 |
| hehe |   80 |
+------+------+
2 rows in set (0.00 sec)


3、如果是小数,会四舍五入
mysql> insert into db1.test2 values ("haha","100"),("hehe","80.22");
Query OK, 2 rows affected (0.19 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> insert into db1.test2 values ("haha","100"),("hehe","80.56");
Query OK, 2 rows affected (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from db1.test2;
+------+------+
| name | age  |
+------+------+
| haha |  100 |
| hehe |   80 |
| haha |  100 |
| hehe |   80 |
| haha |  100 |
| hehe |   81 |
+------+------+
6 rows in set (0.00 sec)

在没有定义无符号范围时,字长还要算上“—”负号,多占一位

mysql> create table db1.test3 (name char(10), age tinyint );
Query OK, 0 rows affected (0.33 sec)

mysql> desc db1.test3;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| name  | char(10)   | YES  |     | NULL    |       |
| age   | tinyint(4) | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.18 sec)


mysql> insert into db1.test3 values ("haha","-100"),("hehe","80");
Query OK, 2 rows affected (0.21 sec)
Records: 2  Duplicates: 0  Warnings: 0


mysql> select * from db1.test3;
+------+------+
| name | age  |
+------+------+
| haha | -100 |
| hehe |   80 |
+------+------+
2 rows in set (0.00 sec)


浮点型(float单精度、double双精度)

请添加图片描述

例:建表,type定义浮点型

mysql> desc db1.test4;
+-------+--------+------+-----+---------+-------+
| Field | Type   | Null | Key | Default | Extra |
+-------+--------+------+-----+---------+-------+
| pay   | float  | YES  |     | NULL    |       |
| id    | double | YES  |     | NULL    |       |
+-------+--------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> select * from db1.test4;
+-------------+-----------+
| pay         | id        |
+-------------+-----------+
|      152.69 | 1542.2453 |
| 15452100000 | 1542.2453 |
|     6442570 | 1542.2453 |
|     12572.7 | 1542.2453 |
|     12572.7 | 1542.2453 |
|      953.81 | 1542.2453 |
+-------------+-----------+
6 rows in set (0.00 sec)


1、不指定float的小数位,默认四舍五入,保留一位小数
mysql> insert into db1.test4 values (27898.67,15422453.98);
Query OK, 1 row affected (0.06 sec)

mysql> select * from db1.test4;
+-------------+-------------+
| pay         | id          |
+-------------+-------------+
|      152.69 |   1542.2453 |
| 15452100000 |   1542.2453 |
|     6442570 |   1542.2453 |
|      953.81 |   1542.2453 |
|     27898.7 | 15422453.98 |
+-------------+-------------+
7 rows in set (0.00 sec)



2、定义浮点型的宽度和小数位
宽度就是整数位+小数位的和

mysql> create table db1.test5 (pay float(6,3),id double(6,2));
Query OK, 0 rows affected, 2 warnings (0.39 sec)

mysql> desc db1.test5
    -> ;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| pay   | float(6,3)  | YES  |     | NULL    |       |
| id    | double(6,2) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)


mysql> insert into db1.test5 values (278.67,1553.98);
Query OK, 1 row affected (0.00 sec)

mysql> select * from db1.test5;
+---------+---------+
| pay     | id      |
+---------+---------+
| 278.670 | 1553.98 |
+---------+---------+
1 row in set (0.00 sec)



mysql> insert into db1.test5 values (27.1467,155.398);
Query OK, 1 row affected (0.05 sec)

mysql> select * from db1.test5;
+---------+---------+
| pay     | id      |
+---------+---------+
| 278.670 | 1553.98 |
| 278.670 |  155.40 |
| 278.467 |  155.40 |
|  27.147 |  155.40 |
+---------+---------+
4 rows in set (0.00 sec)


mysql> insert into db1.test5 values (-67.146,5.328);
Query OK, 1 row affected (0.09 sec)

mysql> select * from db1.test5;
+---------+---------+
| pay     | id      |
+---------+---------+
| 278.670 | 1553.98 |
| 278.670 |  155.40 |
| 278.467 |  155.40 |
|  27.147 |  155.40 |
| -67.146 |    5.33 |
+---------+---------+
5 rows in set (0.00 sec)

日期时间类型

请添加图片描述
请添加图片描述

例,按要求创建表

mysql> create table db1.test6 ( name char(10), start year, up_class time, birthday date, party datetime );
Query OK, 0 rows affected (0.25 sec)

09
mysql> desc test6
    -> ;
+----------+----------+------+-----+---------+-------+
| Field    | Type     | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| name     | char(10) | YES  |     | NULL    |       |
| start    | year(4)  | YES  |     | NULL    |       |
| up_class | time     | YES  |     | NULL    |       |
| birthday | date     | YES  |     | NULL    |       |
| party    | datetime | YES  |     | NULL    |       |
+----------+----------+------+-----+---------+-------+
5 rows in set (0.00 sec)



mysql> insert into test6 values ("bob","1997","09:00:00","20210516","20210716203000");
Query OK, 1 row affected (0.07 sec)

mysql> select * from test6;
+------+-------+----------+------------+---------------------+
| name | start | up_class | birthday   | party               |
+------+-------+----------+------------+---------------------+
| bob  |  1997 | 09:00:00 | 2021-05-16 | 2021-07-16 20:30:00 |
+------+-------+----------+------------+---------------------+
1 row in set (0.00 sec)

请添加图片描述

mysql> insert into test6 values ("bob","1999","09:00:00","20210516",now());
Query OK, 1 row affected (0.09 sec)

mysql> select * from test6;
+------+-------+----------+------------+---------------------+
| name | start | up_class | birthday   | party               |
+------+-------+----------+------------+---------------------+
| bob  |  1997 | 09:00:00 | 2021-05-16 | 2021-07-16 20:30:00 |
| bob  |  1999 | 09:00:00 | 2021-05-16 | 2023-05-06 15:29:15 |
+------+-------+----------+------------+---------------------+
2 rows in set (0.01 sec)


mysql> insert into test6 values ("bob","2004",curtime(),curdate(),now());
Query OK, 1 row affected (0.09 sec)

mysql> select * from test6;
+------+-------+----------+------------+---------------------+
| name | start | up_class | birthday   | party               |
+------+-------+----------+------------+---------------------+
| bob  |  1997 | 09:00:00 | 2021-05-16 | 2021-07-16 20:30:00 |
| bob  |  1999 | 09:00:00 | 2021-05-16 | 2023-05-06 15:29:15 |
| bob  |  2004 | 15:30:53 | 2023-05-06 | 2023-05-06 15:30:53 |
+------+-------+----------+------------+---------------------+
3 rows in set (0.00 sec)

显示时间:

mysql> select day(now());
+------------+
| day(now()) |
+------------+
|          6 |
+------------+
1 row in set (0.02 sec)

mysql> select month(now());
+--------------+
| month(now()) |
+--------------+
|            5 |
+--------------+
1 row in set (0.02 sec)

mysql> insert into test6 values ("tom",year(now()), time(now()),date(now()),now());
Query OK, 1 row affected (0.13 sec)

mysql> select * from test6;
+------+-------+----------+------------+---------------------+
| name | start | up_class | birthday   | party               |
+------+-------+----------+------------+---------------------+
| bob  |  1997 | 09:00:00 | 2021-05-16 | 2021-07-16 20:30:00 |
| bob  |  1999 | 09:00:00 | 2021-05-16 | 2023-05-06 15:29:15 |
| bob  |  2004 | 15:30:53 | 2023-05-06 | 2023-05-06 15:30:53 |
| tom  |  2023 | 15:37:04 | 2023-05-06 | 2023-05-06 15:37:04 |
+------+-------+----------+------------+---------------------+
4 rows in set (0.01 sec)

请添加图片描述

mysql> create table test7 (meeting datetime,party timestamp);
Query OK, 0 rows affected (0.36 sec)

mysql> desc test7;
+---------+-----------+------+-----+---------+-------+
| Field   | Type      | Null | Key | Default | Extra |
+---------+-----------+------+-----+---------+-------+
| meeting | datetime  | YES  |     | NULL    |       |
| party   | timestamp | YES  |     | NULL    |       |
+---------+-----------+------+-----+---------+-------+
2 rows in set (0.05 sec)


mysql> insert into test7 values(now(),now() );
Query OK, 1 row affected (0.10 sec)

mysql> select * from test7;
+---------------------+---------------------+
| meeting             | party               |
+---------------------+---------------------+
| 2023-05-06 16:15:42 | 2023-05-06 16:15:42 |
+---------------------+---------------------+
1 row in set (0.00 sec)



mysql> insert into test7(meeting) values(20211223112634);
Query OK, 1 row affected (0.07 sec)

mysql> select * from test7;
+---------------------+---------------------+
| meeting             | party               |
+---------------------+---------------------+
| 2023-05-06 16:15:42 | 2023-05-06 16:15:42 |
| 2021-12-23 11:26:34 | NULL                |
+---------------------+---------------------+
2 rows in set (0.00 sec)



mysql> insert into test7(party) values(20211223112634);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test7;
+---------------------+---------------------+
| meeting             | party               |
+---------------------+---------------------+
| 2023-05-06 16:15:42 | 2023-05-06 16:15:42 |
| 2021-12-23 11:26:34 | NULL                |
| NULL                | 2021-12-23 11:26:34 |
+---------------------+---------------------+
3 rows in set (0.00 sec)

年,默认4位,如果写2位,会自动补全

mysql> insert into test7(party) values(191223112634);
Query OK, 1 row affected (0.12 sec)

mysql> select * from test7;
+---------------------+---------------------+
| meeting             | party               |
+---------------------+---------------------+
| 2023-05-06 16:15:42 | 2023-05-06 16:15:42 |
| 2021-12-23 11:26:34 | NULL                |
| NULL                | 2021-12-23 11:26:34 |
| NULL                | 2019-12-23 11:26:34 |
+---------------------+---------------------+
8 rows in set (0.01 sec)



mysql> insert into test6(name,start) values("susi",15),("lisi",89);
Query OK, 2 rows affected (0.08 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from test6;
+------+-------+----------+------------+---------------------+
| name | start | up_class | birthday   | party               |
+------+-------+----------+------------+---------------------+
| bob  |  1997 | 09:00:00 | 2021-05-16 | 2021-07-16 20:30:00 |
| bob  |  1999 | 09:00:00 | 2021-05-16 | 2023-05-06 15:29:15 |
| bob  |  2004 | 15:30:53 | 2023-05-06 | 2023-05-06 15:30:53 |
| tom  |  2023 | 15:37:04 | 2023-05-06 | 2023-05-06 15:37:04 |
| tom  |  2023 | 16:07:36 | 2023-05-06 | 2023-05-06 16:07:36 |
| susi |  2015 | NULL     | NULL       | NULL                |
| lisi |  1989 | NULL     | NULL       | NULL                |
+------+-------+----------+------------+---------------------+
7 rows in set (0.00 sec)

枚举类型(让表头的值在列举的范围里选)

单选:enum(值列表)

多选:set(值列表)

请添加图片描述

请添加图片描述

mysql> create table test8 (name char(5),likes set('eat','game','film','music'), sex enum('boy','girl','unknow'));
Query OK, 0 rows affected (0.56 sec)

mysql> desc test8;
+-------+----------------------------------+------+-----+---------+-------+
| Field | Type                             | Null | Key | Default | Extra |
+-------+----------------------------------+------+-----+---------+-------+
| name  | char(5)                          | YES  |     | NULL    |       |
| likes | set('eat','game','film','music') | YES  |     | NULL    |       |
| sex   | enum('boy','girl','unknow')      | YES  |     | NULL    |       |
+-------+----------------------------------+------+-----+---------+-------+
3 rows in set (0.02 sec)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值