MySQL的数据类型
刚才我们在创建表的时候,说到了一个字段类型,所谓的字段类型就是这个字段能存放的数据的数据类型,在MySQL中有以下几种数据类型:
数据类型 | 大小(字节) | 用途 | 格式 |
INT | 4 | 整数 | |
FLOAT | 4 | 单精度浮点类型 | |
DOUBLE | 8 | 双精度浮点类型 | |
ENUM | - | 单选,比如性别 | ENUM('a','b','c') |
SET | - | 多选 | SET('1','2','3') |
DATE | 3 | 日期 | YYYY-MM-DD |
3 | 时间点或持续日期 | HH:MM:SS | |
YEAR | 1 | 年份值 | YYYY |
CHAR | 0~255 | 定长字符串 | |
VARCHAR | 0~255 | 变长字符串 | |
TEXT | 0~65535 | 长文本数据 |
整形
除了可以使用INT表示整形之外,还可以使用TINYINT,SMALLINT,MEDIUMINT,BIGINT。区别在于占用的字节大小的不同
CHAR和VARCHAR的区别
CHAR的长度是固定的,而VARCHAR的长度是可以变化的,比如,存储字符串“abc",对于CHAR(10),表示存储的字符将占10个字节(包括7个空字符),而同样的VARCHAR(12)则只占用4个字节的长度,增加一个额外字节来存储字符串本身的长度,12只是最大值,当你存储的字符小于12时,按实际长度存储。
ENUM和SET的区别
ENUM类型的数据的值,必须是定义时枚举的值的其中之一,即单选,而SET类型的值则可以多选。
插入数据
首先我们要查看数据,使用查看数据的命令:
select * from 表名;
表示查看表中的所有数据:
此时我们的表因为是新创建的所有是没有数据的,我们需要向里面插入数据,使用插入数据的命令:
insert into 表名 values ('数据1','数据2','数据3','数据4'.……);
使用这种格式表示我们向表中所有的字段插入数据,数据的个数与格式必须和表中的字段数量和字段类型对应匹配才可以:
然后我们再次查看表中的所有数据:
然后就可以在表中看到我们刚才插入的一行数据。
插入数据的格式
在插入数据的时候,valus关键字后面括号中的值就是我们要插入到表中的值,可以看到我们在写值的时候,有一些值被引号包含着,有一些则没有。根据MySQL的规定,我们在向表中插入数据的时候,CHAR,VARCHAR,TIME,DATA,TEXT,ENUM这些类型需要使用单引号包裹,而INT,FLOAT,DOUBLE这些类型则不用。
根据字段插入数据
在插入数据的时候,出了向全部的列插入数据,还可选择想要插入数据的列,而没有选择的列则不会被插入数据
insert into 表名(列名1,列名2,列名3) values ('数据1','数据2','数据3');
然后我们使用查询命令查看表中的数据:
可以看到,我们插入数据的列会存在数据,没有选择的列中则不会有数据。
MySQL修改与删除
删除数据库
drop database 数据库的名字;
在删除之前先查看一下我们已有的这些数据库,我们先创建一个空的数据库:
然后我们删除这个数据表:
drop database test;
然后这个数据库就被删除了。
关于修改数据库
目前MySQL没有提供修改数据库名称的方法,因为这曾导致一系列安全问题。
在老版本中 RENAME DATABASE可以修改数据库名称,这条命令在MySQL 5.1.7中被加入,但官方很快就发现这条命令所带来的危险,于是在MySQL 5.1.23中把这条命令移除。
事实上,数据库名几乎不会遇到必须修改的情况,如果你一定要这么做,比较安全的做法是重新建一个新库,然后将旧库中的数据转移到新库中,并且暂时不要删除l旧的数据库,以防数据遗失。
对一张表的修改
重命名
rename table 原名 to 新名字; alter table 原名 rename 新名字; alter table 原名 rename to 新名字;
这三种方式都可以做到修改数据表的名字,在修改之前,我们先来看一下原有的数据表:
可以看到我们现在又很多的数据表,现在我们要把user表的名字修改成client:
rename table user to client; alter table user rename client; alter table user rename to client;
三种方式选择其中一种使用即可,但是不能三种方式一起使用。
删除一张表
删除表的方式可以直接参考之前我们删除数据库的方式:
drop table 表名;
使用drop关键字进行删除,比如现在我要删除client表:
现在client表就已经被删除了。
对一列的修改(既对表结构的修改)
对表结构的修改,是本节实验的难点,有时候一些小的错误会造成不可挽回的后果,所以请细心操作。另外需要注意,非必要情况不要修改表结构。
增加一列
在已经创建好的表中增加一列使用以下命令
alter table 表名 add column 列名 数据类型 [约束];
现在book表中已经存在四列,现在要添加一列可以使用以下命令:
现在我们就在已经创建好的表中新添加了一列。
现在我们创建一个新的列,并添加一个约束:
对于约束的查看方式和表数据的查看方式略有不同,如果要查看表中的约束要使用另一种方法:
使用查看表结构的方式可以查看部分的约束。
在添加列的时候决定列的位置
在我们添加列的时候,默认新添加的列是在最后一个,但是如果我们想让添加的列向前移动,那么就需要使用一个新的关键字:after
alter table 表名 add 列名 数据类型 [约束] after 列名1;
当我们使用这个语句之后,我们新创建的列就会排在after关键字后面的列之后:
在上面的图中,我们新建了一列叫做information,并在最后添加了after name,那么我们创建的列就会在name之后出现。
除了使用after来调整创建列的时候列的位置,还可以使用first将创建的列直接放在第一个:
删除一列
删除表中的一列和刚才使用的新增─列的语句格式十分相似,只是把关键词ADD改为DROP,语句后面不需要有数据类型、约束或位置信息。具体语句格式:
alter table 表名 drop 列名;
在上图中我们删除了book表的job列,执行之后这个列就被删除了。
修改一列
这条语句其实不只可用于重命名一列,准确地说,它是对一个列做修改(CHANGE):
alter table 表名 change 原列名 新列名 数据类型 [约束];
现在我们要把class列修改成c_class:
当原列名和新列名相同的时候,指定新的数据类型或约束,就可以用于修改数据类型或约束。需要注意的是,修改数据类型可能会导致数据丢失,所以要慎重使用。
注意在修改列名的时候一定要带上数据结构,否则会修改失败。
先看一下现在的表结构:
现在要把sex列的数据类型修改成int,但是列名不变:
这样就完成了对一列数据库的修改。
修改表中的数据
先看一下现在表中的数据
使用命令对表中的数值进行修改:
update 表名 set 列名 = 值 , 列名 = 值 , 列名 = 值 where 条件;
现在我添加一条数据:
现在要修改第二列数据的address的值:
并且可以同时修改多个列的值:
这样就完成了对列中数据的修改。
注意这里在修改的时候一定要加where条件,否则会将所有的列都进行修改。