mysql
一,字符串类型
a)char和varchar
i.都需要指定字符的长度,char中的长度是字符的长度,而varchar的长度是字节的长度
ii.char中指定的长度就是实际占用的长度,而varchar指定的长度只是一个范围,所以varchar还要拿1-2个字节存储该字符串到底有多少个字节,并且varchar中能够实际存储的字符跟编码有关(utf8编码20000多,gbk编码30000多)
iii.varchar对存储空间的占用更灵活,但是char的效率更高
iv.如果字符串的长度是固定已知的,就用char,如果字符串的长度是可变的,就用varchar
b)text:文本类型,使用起来类似于varchar,只不过这里不需要指定长度,其中longtext认为文本没有限制
c)enum:枚举类型,类似于单选!实际存储的是原选项的位置,位置用1,2,3,4来代替,理论上最多可以表示65535个选项
d)set:集合类型,类似于多选!实际存储的是也原选择的位置,位置用1,2,4,8来代替,然后把所有选项的位置相加,理论上最多可以表示64个多选项
e)binary、varbinary、blob:二进制文本类型,就是字节流的char、varchar和text,在实际的项目中,很少使用
二,列属性
a)null|not null,缺省值是null,也就是允许为空,如果是not null而又没有给该字段赋值的话,系统会首先查询该字段有没有默认值
b)default:给一个字段一个默认值,如果没有给该字段填充数据,就用该默认值来代替,通常就是配合not null一起使用
c)primary key:主键,唯一可区别其他记录的字段,一个表中只能有一个主键,也可以很多个字段组合成一个组合主键,而且不允许为空!
d)unique key:唯一键,与主键的区别是唯一键可以有很多个,而且允许为空
e)auto_increment:自动增长,使用这个属性有两个条件,第一该字段必须为整型,第二该字段必须存在索引,通常就是配合主键一起使用,也可以通过修改表选项设置自动增长的默认初始值
f)comment:列注释
三,索引
a)索引的本质就是在“原始表”的基础之上根据某个或某些字段进行排序后的“内置表”
b)索引的最大优势可以极大的提高查询速度
c)在提高查询速度的同时也降低了增删改的速度
四,实体与实体关系
a)一对一:主要用来做数据表的优化(垂直分割)
b)一对多:在多的那一方增加一个字段,用于指向1的那一方
c)多对多:增加一个中间表,就是将一个多对多的关系拆分成两个一对多的关系
五,外键
a)只有InnoDB存储引擎才可以使用
b)关键字:foreign key
c)定义方式:foreign key(本表字段名) references 父表(主键) on delete[cascade|set null|restrict] on update [cascade|set null|restrict]
六,存储引擎
七,范式
其他数据操作
插入数据
标准语法:
insert into 表名[字段列表]values(值列表);
蠕虫复制
就是在已有的数据的基础之上,将原来的数据进行复制,插入到相对应的表中!
语法规则:
insert into 表名select *|字段列表 from 表名
注意:
当一个表中的数据复制到另一个表中的时候,需要注意数据的来源要与被插入的表的字段数量和类型要保持一致
总结蠕虫复制的优点:
1,可以以最快的速度复制另外一张表的数据
2,在短期内产生大量的数据,以测试服务器的压力
主键重复有两种方法:
方法1:insert into 表名[字段列表]values(值列表)on duplicate key update 字段1=值1,字段2=值2.....
方法2:replacre into 表名[字段列表]values(值列表);
修改数据
标准语法:
update 表名 set 字段1=值1,字段2=值2……where条件;
update 表名 set 字段1=值1,字段2=值2……[where条件][order by 字段名 asc|desc][limit 数据量]
删除数据
标准语法:
delete from 表名 [where条件] [order by 字段名 asc|desc][limit 数据量]
truncate table 表名; 或 truncate 表名;
查询数据
select [select选项] *|字段列表 [as 字段别名] from 数据源 [where子句][group by子句][having子句][order by子句][limit子句];
别名
字段|表达式|表|子查询 [as] 别名
语法和使用流程
语法:where 表达式
功能:通过限定的表达式的条件对数据进行过滤,得到我们想要的结果
流程:逐一取出每一条记录,先通过当前记录来计算where后面表达式的值,如果计算的结果为真(非0),就返回来记录,如果计算的结构为假(0),则不返回记录!相当于对所有的记录做了一次遍历!
模糊查询
select *|字段列表from 表名 where 字段名 [not] like ‘通配符字符串’;
group by 字段1[,字段2]……
统计查询
回溯统计就是向上统计!
在进行分组统计的时候,往往需要做上级统计!
limit就是限制的意思,所以,limit子句的作用就是限制查询记录的条数!
limit offset,length
其中,offset是指偏移量,默认为0,而length是指需要显示的记录数!
联合查询
语法形式
select语句1
union[union选项]
select 语句2
union[union选项]
select 语句3
union[union选项]
……
作用:
所谓的联合查询,就是将多个查询结果进行纵向上的拼接,也就是select语句2的查询结果放
在select语句1查询结果的后面。依次类推!