对数据操作
增加数据
语法:
insert into 表名【(字段列表)】 values(值列表), (值列表);
说明:
- 如果省略字段列表,那么则是全部字段插入数据,此种情况,要求值列表中值的顺序与表中字段的顺序,个数要一致
- 如果有字段列表,那么则是部分字段数据插入,此种情况,要求值列表中值的个数与字段列表中的字段的个数一致,顺序也要一致
- 值列表中字符型值需加引号(建议单引号)
- 可以有多个值列表,表示一次插入多行数据。
数据查询
select *|字段列表|字段1 as 别名 from 表名【where子句】【group by子句】【having 子句】【order by 子句】【limit子句】
数据的更改
update 表名 set 字段=值, 字段=值,.... 【where子句】
数据删除
delete from 表名 【where子句】
提示:对于更改与删除一定要注意,where条件是否正确。
字符集
gbk
utf8
gb2312
MySQL一种C/S结构,从C通过网络向S发送数据,那么就需两者之间通讯的字符要一致(S 要明白C使用的是何种字符编码向S发送数据)
MySQL对通讯字符集的设置是通过变量来实现的。
字符编码问题:
1、创建表
2、出现错误
出现问题的原因是当前客户端与服务器通信的字符编码,与服务器默认的不一致。
解决:
查看与通信相关的字符集变量:
示例:
说明:
character_set_client 用于告诉服务器当前客户端与之通讯所使用的编码。MySQL服务器不知道未来连接的客户端使用的什么编码,所以默认所有的客户端都是utf8与MySQL进行通信(猜测,猜测往往是不准的)
对应my.ini中的配置如下图:
解决办法:
由于cmd窗口的字符集,固定是GBK无法更改,所以需要告诉服务器端当前客户端使用的是gbk与你通信。
语法:
set character_set_client = '字符编码集';
3、插入数据成功
尝试查看表中的数据。出现乱码
原因:服务器不知道当前客户端所需的显示编码,如下图
说明:
上一步中的set character_set_client只是告诉了服务器,客户传递给服务器的编码方式,服务器现在默认,客户所有的编码方式都是默认是UTF8
解决办法:还需告诉服务器,当前客户端接收的编码格式
语法:
set character_set_results = '编码方式';
示例:
再查询数据:
character_set_connection 变量只是在MySQL服务器内部为了实现数据转换的平滑过度,而设立一个变量,一般使用时,character_set_connection不能低于character_set_client变量的字符编码。
MySQL编码的转换过程
查看MySQL支持的字符集
语法:
show charset;
示例:
character_set_* 都是进程级的,只在当前连接有效,如果关闭当前连接再重新开启,又是一个新的连接,MySQL DBMS还会使用变量的默认值与客户端进行通信。
注意:
数据库的存储编码与character_set_*三个变量没有任何关系。只要DBMS能正常接收到数据,那么就可以在内部自动转换。
列类型(字段类型)
create table 表名(
字段名 字段类型 【附加属性】,
字段名 字段类型 【附加属性】,
....
)【表选项】
整型
类型 | 字节 | 最小值(有符号) | 最大值(有符号) |
最小值(无符号) | 最大值(无符号) | ||
TINYINT | 1 | -128 | 127 |
0 | 255 | ||
SMALLINT | 2 | -32768 | 32767 |
0 | 65535 | ||
MEDIUMINT | 3 | -8388608 | 8388607 |
0 | 16777215 | ||
INT | 4 | -2147483648 | 2147483647 |
0 | 4294967295 | ||
BIGINT | 8 | -9223372036854775808 | 9223372036854775807 |
0 | 18446744073709551615 |
unsinged
默认MySQL认为整型数据是分正负数,在现实的需求,有时是不需负数,所以,可以使用unsigned关键字指定,整型数据为无符号位。
显示宽度
主要是用于在显示时的一个位数,并不对真实的数据位数进行限制。
示例:
零填充
zerofill
当为某个字段仅设置了显示宽度时,在显示的时没有任何效果,显示宽度必须配合zerofill。当设置了显示宽度的字段,在显示时数据没有达到显示的宽度时,会在数值前使用'0'进行填充。
小数型
float单精度
double双精度
类型 | 字节 | 最小值 | 最大值 |
Float | 4 | -3.402823466 E+38 | 3.402823466E+38 |
Double | 8 | -1.7976931348623157E+308 | 1.7976931348623157E+308 |
0 000 0000 0 1.000 0000 0000 0000 0000 0000
float(m,n);
m表示总位数
n表示小数位
整数位m-n
浮点数的特点:
- 浮点数只能精确到7位左右,由于浮点数的存储格式(000 0000 0000 0000 0000 0000)全为1时,能够表示的十进制数只有6至7位。
- 整数位不能超过m-n
- 小数位可以超过n
- 浮点数不可以人为的越过设置的位数,但是由于系统自动进位产生超过的情况,mysql认可。
示例:
定点型(货币型)
decimal(m,n);
m也是表示全部数位
n表示小数
文本型
char定长
char(L),L长度,表示的是字符,L最大是255
如果实际存储的数据小于L个,那么所占存储空间也是L个字符的空间
varchar变长
varchar(M),M最大长度,M最大的理论值是65535
如果实际存储的数据小于M,那么所占存储空间是,实际字符个数所占的空间,还需加1或2个字节。
存储空间:示例如下
f1所占的存储空间:
10*2=20字节
f2所占的存储空间:
6*2=12字节+1字节=13字节
MySQL记录长度
MySQL中一条记录的最大的长度是65535个字节。
一条记录中可能存储多种数据类型。
原因:
MySQL会为每个字段的默认值设置为null,所以需要有一个字节来记录Null值
varchar需要1或2个字节记录数据的长度,所以65535-2=65533
text
tinytext 255
text 65535
mediumtext
longtext
blob 主要用于存储二进制数据,比如:图片文件内容、视频、音频文件内容,但是不会使用数据库存储二进制数据。