数据库-数据类型&数据操作(插入&更新&删除数据)

数据类型:

整型:

在这里插入图片描述

浮点数类型和定点数类型

在这里插入图片描述
decimal型的取值范围与double型的取值范围相同。但是decimal的有效取值范围由m和d决定,而且decimal型的字节数为M+2。也就是说,定点数的存储空间是根据其精度决定的。m表示数据的总长度,小数点不占位置;d参数表示小数点后面的小树部分长度。

日期与时间类型:

在这里插入图片描述

  • time :

‘D HH:MM:SS’ :d表示天数,小时的值为d*24+HH,当然输入时可以不用这个形式,HH:MM:SS ,D HH:MM,HH:MM,D HH,SS,
'HHMMSS’格式的字符串或者HHMMSS格式的数据都会被转换为时间。

mysql> insert into hh values('2 25:23:55');
Query OK, 1 row affected (0.12 sec)

mysql> select * from hh;
+----------+
| time     |
+----------+
| 73:23:55 |
+----------+
1 row in set (0.00 sec)

mysql> insert into hh values(245959);
Query OK, 1 row affected (0.11 sec)

mysql> select * from hh;
+----------+
| time     |
+----------+
| 73:23:55 |
| 24:59:59 |
+----------+
2 rows in set (0.00 sec)
  • date:

‘YYYY-MM-DD’/‘YYYYMMDD’ ->年月日

  • datetime

‘YYYY-MM-DD HH:MM:SS’/‘YYYYMMDDHHMMSS’
使用now可以获得当前时间:

mysql> insert into hh values(22,now());
Query OK, 1 row affected (0.08 sec)

mysql> select * from hh;
+----------+---------------------+
| time     | datetime            |
+----------+---------------------+
| 73:23:55 | NULL                |
| 24:59:59 | NULL                |
| 00:00:22 | 2019-07-01 15:32:33 |
+----------+---------------------+
3 rows in set (0.00 sec)
  • timestamp:

使用四个字节记录日期和实现。其用法基本与datetime相同。但是仍有以下不同:

  1. 使用current_timestamp来数据当前日期与时间
  2. 输入为null时,系统会输入系统当前日期与时间
  3. 无任何输入时,系统会输入系统日期与时间
  4. timestamp时根据时区显示的,在不同的时区显示不同的时间。

字符串类型:

char和varchar

char和varchar类型都是在创建表时指定了最大长度。基本形式如:
字符串类型(M)
M指定了该字符串的最大长度为M。
char类型的长度是固定的,在创建时就指定了,varchar的长度时变化的,在创建时指定了最大长度。这样有利于节约系统的空间。

text类型:

text类型是一种特殊的字符串类型。text只能保存字符数据,如新闻的内容等。text包括以下几种类型:
在这里插入图片描述

ENUM类型:

ENUM又称为枚举类型。在创建表时,ENUM类型的取值范围就以列表的形式指定了。其基本形式如下:
属性名 ENUM(‘值1’,‘值2’,…‘值n’);
属性名参数指字段的名称,值n参数表示列表中的第n个值。这些值末尾的空格将被系统直接删除。ENUM类型的值只能取列表中的一个元素。
如果ENUM类型加上了not null 属性,那么默认取列表中第一个元素,如果不加not null属性,ENUM将允许插入null,而且null是默认值。

mysql> create table gg(Seex enum('nan','男','女'));
Query OK, 0 rows affected (0.40 sec)

mysql> insert into gg values('nan');
Query OK, 1 row affected (0.10 sec)

mysql> insert into gg values('nn');
ERROR 1265 (01000): Data truncated for column 'Seex' at row 1
mysql> insert into gg values(null);
Query OK, 1 row affected (0.18 sec)
SET类型:

在创建表时,SET类型的取值范围就以列表的形式指定了。其基本形式如下:
属性名 SET(‘值1’,…‘值n’);
其中,属性名参数指定字段的名称,‘值n’参数表示列表中第n个值,这些值末尾的空格将会被系统直接删除。其基本形式与ENUM一样。SET类型的值可以取列表中一个或者多个元素的组合 。取多个元素时,不同元素之间用逗号隔开。SET类型最多只能是有64个元素构成的组合。

二进制类型:下文长度都为bit长度,而不是字节长度

在这里插入图片描述
在这里插入图片描述

binary和varbinary:参照char和varchar
BIT类型:

BIT也在创建时指定了最大长度: BIT(M)

BLOB类型:

blob类型是一种特殊的二进制类型。blob可以用来保存数量很大的二进制数据,如图片,PDF文档等。其分为四种类型,如上图。

数据数据操作

插入数据:insert

为表的所有字段插入数据
  • insert语句中不指定具体的字段名:

insert into 表名 values(值1,值2,…值n);
表中定义了几个字段,就应该插入几个字段,并且插入顺序与表中字段顺序相同,而且取值类型要与表中对应字段的数据类型一致。

  • insert语句中列出所有字段:

insert into 表名(属性1,属性2,…属性n) values(值1,值2,…值n);
方法相对灵活,可以随意地设置字段的顺序,而不需要按照表定义时的顺序。但是值得顺序必须和属性的顺序一致。

为表的指定字段插入数据:

insert into 表名(属性1,属性2,…属性n) values(值1,值2,…值n);
和上文无区别。

同时插入多条记录

insert into 表名[(属性列表)] values(取值列表1,取值列表2,…取值列表n);
属性列表为可选参数,指定哪些字段插入数据,没有指定时向所有字段插入数据。取值列表表示要插入的记录,每条记录用逗号隔开。

mysql> desc hh;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| SID   | int(11) | NO   |     | NULL    |       |
| score | int(11) | NO   |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> insert into hh values(0,0),
    -> (1,0),(2,0);
Query OK, 3 rows affected (0.13 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from hh;
+-----+-------+
| SID | score |
+-----+-------+
|   1 |    66 |
|   2 |    77 |
|   3 |    77 |
|   4 |    77 |
|   0 |     0 |
|   1 |     0 |
|   2 |     0 |
+-----+-------+
7 rows in set (0.00 sec)
将查询结果插入表中

insert into 表名1 (属性列表1) select 属性列表2 from 表名2 where 条件表达式;
表名1说明记录插入到哪个表中,表名2表示记录是从哪个表查询出来的,属性列表1表示为哪些参数赋值,属性列表2 表示 从表中查询出哪些字段的数据,条件表达式设置了select语句的查询条件。
使用此方法时,必须保证属性列表1和属性列表2中的字段个数是一致的。而且每个对应的字段数据类型也是一样的。

mysql> desc Student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| SID   | int(11)     | NO   | PRI | NULL    |       |
| Sname | varchar(20) | YES  | MUL | NULL    |       |
| Sage  | int(11)     | YES  |     | NULL    |       |
| Ssex  | char(1)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> insert into hh(SID,score) select SID,Sage from Student where Ssex='男';
Query OK, 3 rows affected (0.10 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from hh;
+-----+-------+
| SID | score |
+-----+-------+
|   1 |    66 |
|   2 |    77 |
|   3 |    77 |
|   4 |    77 |
|   0 |     0 |
|   1 |     0 |
|   2 |     0 |
|   1 |    20 |
|   2 |    20 |
|   3 |    21 |
+-----+-------+
10 rows in set (0.00 sec)

mysql> select * from Student;
+-----+-------+------+------+
| SID | Sname | Sage | Ssex |
+-----+-------+------+------+
|   1 | 赵雷  |   20 ||
|   2 | 钱电  |   20 ||
|   3 | 孙风  |   21 ||
|   4 | 吴兰  |   18 ||
|   5 | 孙兰  |   17 ||
+-----+-------+------+------+
5 rows in set (0.04 sec)

更新数据:

更新数据是更新表中已存在的记录。
update 表名 set 属性名1=取值1,属性名2=取值2,…属性名n=取值n where 条件表达式;

  • 不给where条件时,全部更新
mysql> update hh
    -> set score=88
    -> ;
Query OK, 10 rows affected (0.10 sec)
Rows matched: 10  Changed: 10  Warnings: 0

mysql> select * from hh;
+-----+-------+
| SID | score |
+-----+-------+
|   1 |    88 |
|   2 |    88 |
|   3 |    88 |
|   4 |    88 |
|   0 |    88 |
|   1 |    88 |
|   2 |    88 |
|   1 |    88 |
|   2 |    88 |
|   3 |    88 |
+-----+-------+
10 rows in set (0.00 sec)
  • 范围更新多条数据:
mysql> update Student
    -> set Sage=16,Ssex='n'
    -> where SID between 2 and 5;
Query OK, 4 rows affected (0.08 sec)
Rows matched: 4  Changed: 4  Warnings: 0

mysql> select * from Student;
+-----+-------+------+------+
| SID | Sname | Sage | Ssex |
+-----+-------+------+------+
|   1 | 赵雷  |   20 ||
|   2 | 钱电  |   16 | n    |
|   3 | 孙风  |   16 | n    |
|   4 | 吴兰  |   16 | n    |
|   5 | 孙兰  |   16 | n    |
+-----+-------+------+------+
5 rows in set (0.00 sec)

删除数据

delete from 表名 [where 条件表达式];
如果没有表达式,则会删除表中所有数据。

注意:

删除过程不会有任何提示,因此做好在删除前先查询一下在进行删除。

猜你喜欢

转载自blog.csdn.net/Fly_Fly_Zhang/article/details/94390404
今日推荐