对数据操作

对数据操作

增加数据

语法:

    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    主要用于存储二进制数据,比如:图片文件内容、视频、音频文件内容,但是不会使用数据库存储二进制数据。

 

posted @ 2016-04-05 21:35  尼农小道  阅读(211)  评论(0编辑  收藏  举报