中文乱码问题
设置服务器对客户端的字符集,可以使用快捷方式 set names 字符集
例如: setnames gbk
相当于同时设置了 character_set_client
character_set_results
character_set_connection
校对集问题
校对集:数据比较方式有三种
_bin:binary 二进制比较 就是取出二进制,一位一位的比较,区分大小写
_cs:case sensitive 大小写敏感,不区分大小写
查看数据库所支持的校对集 show collation
校对集应用
使用utf8 的_bin 和 _ci来验证不同校对集的效果
根据某个字段进行排序 order by 字段名【asc/desc】
数据类型
数据类型(列类型): 对数据进行头一的分类,从系统的角度出发 为了能够使用统一的方式进行管理,更好的利用有限的空间
SQL中将数据类型分为三类
数值类型
字符串类型
时间日期类型
数值型
整数型: 存放整型数据
tinyint 迷你整型 使用一个字节存储,表示的状态多为256种
smallint 小整型 使用两个字节存储,表示的状态最多有65536种
mediumint 中整型 使用三个字节存储
int 标准整型,使用四个字节存储
小数型: 带有小数点或者番位超出整型的数值类型
浮点型:小数浮动,精度有限,而且会丢失精度
定点型:小数点固定,精度固定,不会丢失精度
时间日期类型
datatime : 时间日期 格式是YYYY-mm-dd
HH:ii:ss 表示的范围是从1000到9999年,有0 值(0000-00-00 00:00:00)
data:日期 就是datetime中的date部分
time时间(段)指定的莫哥区间之间,比如-时间到+时间,或者过去的莫哥时间到将来的某个时间
timestamp 时间戳 但并不是时间戳,只是从1970年开始的,YYYY-mm-dd HH:ii:ss格式与datetime完全一致
year 年份 有两种形式 year(2)和year(4)
字符串类型
分为 char varchar text blob enumset
char (定长字符串):磁盘(二维表)在定义结构的时候就已经确定了最终数据的存储长度
char(L):L代表Length 可以存储的商都 单位为字符,只知道啊长度值可以为255
varchar(变长字符串) 在分配空间的时间,按照最大的空间分配 ,但是实际上最终用来多少,是根据具体的数据来确定
varchar(L): L表示自渎长度,理论长度是65536哥字符 但是会多出1到2 哥字节,来确定存储的实际长度
eg: 姓名 收获地址 邮箱 都是不固定长度 都使用变长
文本字符串:如果数据量非常大,通常超过255个字符就会使用文本字符串
文本字符串根据存储的数据的格式分为
text 存储文字,存储二进制数据的文件路径
blob 存储二进制数据(通常不用)
枚举字符串(enum)事先吧所有可能出现的结果都设计好,实际上存储的数据是规定好的数据中的一个
枚举的使用方式
enum(可能出现的元素列表)
例如 enum(男,女,不男不女,妖怪,保密)
集合字符串:跟枚举类似,实际存储的是数值,而不是字符串,但集合是多选
集合使用方式
set(元素列表)
可以使用元素列表中的多个元素,使用逗号分隔
MySQL记录长度
MySQL中规定:任何一条记录最长不超过65535个字节
varchar永远达不到理论值
utf8下carchar的实际顶配21844字符
GBK下varchar的实际顶配32766字符
列属性
列属性:真正约束字段的是数据类型,但是这种约束狠单一,需要有一些额外的约束,来更加保证数据的合法性,这就需要列属性
列属性包括 : NULL/NOT NULL , default , Primary key , unique key , auto_increment , comment
空属性 包括两个值
NULL(默认)
NOT NULL (不为空)
列描述:
comment 描述,没有实际含义,是专门用来描述字段, 会根据表创建语句保存,用来给程序员(数据库管理员)来进行来解
默认值:
default,某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值
主键: primary key
定义:主要的键,一张表只能有一个字段可以使用对应的键,用来唯一的约束该字段里的数据,不能重复,
增加主键:
方案一 在创建表时,直接在字段之后,跟primary key 关键字(主键本身不允许为空)
方案二 在创建表的时候,在所有的字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段座位主键,可以是符合主键
方案三 当表已经创建好之后,额外追加主键,可以通过修改表字段属性,也可以直接追加
alter tabel 表名 add primary key (字段列表)
主键约束
主键对应的字段中的数据不允许重复,一旦重复,数据操作(增和改)失败
更新主键&删除主键
alter table 表名 drop primary key
主键分类 分为业务主键 逻辑主键
create table my_student(
id int primary key auto_increment comment' 逻辑主键:自增长'
number char(10)not null comment'学号'
name varchar(10)not null )
自动增长:
auto_increment,当对应的字段,不给值,或给默认值、或给NULL值,会自动的被系统触发,系统会从当前字段中已有的最大值基础上,再进行+1操作,得到一个新的不同的数据
特点:
任何一个字段要做自增长,前提必须本身就是一个索引
自增长字段必须是数字,而且事情整型
一张表最多只能有一个自增长
修改自增长
alter table 表名 auto_increment = 值
查看自增长对应的变量:
show variables like
'auto_increnment%'
删除自增长: alter tabel 表名 modify 字段 类型
唯一键(umique key)
默认允许自动为空 , 而且可以多个为空
增加唯一键
方案一 在创建表的时候,字段之后直接跟unique/unique key
方案二 在所有的字段之后增加 unique key(字段列表)
方案三 在创建表之后增加唯一键
更新唯一键&删除唯一键
alter table 表名 drop index 索引名字
索引: 系统根据某种算法,开奖已有的数据,或未来可能新增的数据,单独建立一个文件,文件能够实现快速的匹配数据,并且能够快速的找到对应表中的记录
索引的意义/好处:
提升查询数据的效率
约束数据的有效性 唯一性等
MySQL中提供了多种索引
主键索引 primary key
唯一索引 unique key
全文索引 fulltext index
普通索引 index
创建
create【unique】index 索引名on 表名(字段名(长度))
alter 表名 add 【unique】 index 【索引名】on(字段名(长度))
删除
drop index 【索引名】on 表名
查看 show indexfrom 表名\G
使用alter命名添加数据表的索引
alter table 表名 add primary key (字段列表)添加一个主键 ,意味着索引值必须是唯一且不为空
alter table 表名 add unique 索引名(字段列表)创建索引值必须是唯一的 允许NULL 且 NULL可能出现多次
alter table 表名 add fulltext 索引名 (字段列表) 添加全文索引
alter table 表名 add index 索引名 (字段列表) 添加普通索引,索引值可能出现多次