decimal型的取值范围与double型的取值范围相同。但是decimal的有效取值范围由m和d决定,而且decimal型的字节数为M+2。也就是说,定点数的存储空间是根据其精度决定的。m表示数据的总长度,小数点不占位置;d参数表示小数点后面的小树部分长度。
‘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)
‘YYYY-MM-DD’/‘YYYYMMDD’ ->年月日
‘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)
使用四个字节记录日期和实现。其用法基本与datetime相同。但是仍有以下不同:
char和varchar类型都是在创建表时指定了最大长度。基本形式如:
字符串类型(M)
M指定了该字符串的最大长度为M。
char类型的长度是固定的,在创建时就指定了,varchar的长度时变化的,在创建时指定了最大长度。这样有利于节约系统的空间。
text类型是一种特殊的字符串类型。text只能保存字符数据,如新闻的内容等。text包括以下几种类型:
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(‘值1’,…‘值n’);
其中,属性名参数指定字段的名称,‘值n’参数表示列表中第n个值,这些值末尾的空格将会被系统直接删除。其基本形式与ENUM一样。SET类型的值可以取列表中一个或者多个元素的组合 。取多个元素时,不同元素之间用逗号隔开。SET类型最多只能是有64个元素构成的组合。
BIT也在创建时指定了最大长度: BIT(M)
blob类型是一种特殊的二进制类型。blob可以用来保存数量很大的二进制数据,如图片,PDF文档等。其分为四种类型,如上图。
insert into 表名 values(值1,值2,…值n);
表中定义了几个字段,就应该插入几个字段,并且插入顺序与表中字段顺序相同,而且取值类型要与表中对应字段的数据类型一致。
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 条件表达式;
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 条件表达式];
如果没有表达式,则会删除表中所有数据。
删除过程不会有任何提示,因此做好在删除前先查询一下在进行删除。