SQL分类:
DDL数据定义语言,用来维护存储数据的结构。
代表指令:create,drop,alter
DML数据操纵语言,用来对数据进行操纵(表中的内容)。
代表指令:insert delete update
DML中有单独分了一个DQL
数据查询语言如select
DCL数据控制语言,主要负责权限管理和事务
代表指令:grant revoke commit
大写的表示关键字
CHARACTER SET:制定数据库采用的字符集。
COLLATE:制定数据库字符集的比较方式(默认utf8_general_ci,一般不指定)
显示数据库创建语句
说明:
(1)MySQL建议我们关键字使用大写,但是不是必须的。
(2)数据库名字的反引号' ',是为了防止使用的数据库名称刚好是关键字。
(3)/*..*/这个不是注释,表示当前mysal版本大于4.01版本,就执行这句话。
查看当前MySQL数据库的连接情况
可以告诉我们当前有哪些用户连接到我们的MySQL.
备份和恢复数据库
表的操作
修改表 alter
在users表中添加一个字段 alter table 表名 类型;
查看表的结构 desc 表名;
数据类型
数值类型
bit字段在显示时,是按照ASCII码对应的值显示。
如果我们有这样的值,只存放0或1,这时可以定义bit(1)这样可以节省空间。
小数的基本使用
float[(m,d)][unsigned] M指定小数位数,占用空间四个字节
小数:float(4,2)表示的范围是-99.99~99.99,MySQL在保存值会进行四舍五入
demical和float很像,但是它两的精度不同
发现demical的精度更高
float表示的精度大约是7位
decimal整数最大位数m为65.支持小数最大位数d是30.如果d被省略,默认为0,m默认为10.
如果希望小数的精度高,推荐使用decimal.
字符串
char(L)
varchar(L):编码是utf8时,varchar(n)n最大值是65532/3=21844(因为utf8中,一个汉字占用3个字节)
如果是gbk,varchar(n) n最大值时65532/2=32766(因为gbk中,一个汉字占用2字节)
char和varchar存储空空间比较
如何选择定长或变长字符串?
1.如果数据确定长度都一样,就使用定长,比如身份证,手机号,,,
2.如果数据长度有变化,就使用变长,比如,名字,地址,但是你要保证最长的能存进去。
3.定长的磁盘空间比较浪费,但是效率高
4.变长的磁盘比较节省,但是效率低
日期和时间类型
常用的日期有如下三个:
1.datetime 时间日期格式 yyyy-mm-dd HH:ii:ss'表示的范围从1000到9999,占用八字节。
2.date:日期 yyyy-mm-dd 占用三字节
3.timestamp:时间戳,从1970年开始的yyyy-mm-dd HH:ii:ss格式和datetime完全一致,占用四字节。
枚举和set
表的约束
真正约束字段的是数据类型,但是数据类型约束很单一,需要一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。
空属性
两个值:null(默认值)和not null(不为空)
数据库默认字段基本都是字段为空,但是实际开发中,尽可能保证字段不为空,因为数据为空没办法参与运算。
set和enum不能设置默认值。
自增长
auto_increment:当对应的字段不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键
自增长的特点:
1.任何一个字段要做自增长,前提是本身是一个索引(key——栏有值)
2.自增长字段必须是整数。
3.一张表最多只能有一个自增长。
唯一键
一张表中往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。
唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。
表的增删改查
增加:
字符和日期类型应该包含在单引号中。
插入空值,不指定或insert into table values(null)
insert into table values(),(),() 一次性添加多条记录。
如果给表中的所有字段添加数据,可以不写前面的字段名称。
如果只给表中的某几个字段赋值,则需要制定字段名。
在数据插入的时候,假设主键对应的值已经存在(duplicate key),可以选择性地进行处理:
1.更新操作
2.替换
select
先建一张表:
distinct 如果结果中有完全相同的行,就去除重复行
在select语句中可以使用表达式对查询的列进行运算
select语句中可以使用as起别名。
select的order by 子句
order by 指定排序的列,排序的列可以是表中的列名,也可以是select语句后指定的别名
asc升序 desc降序 默认是升序
order by 子句应该位于select语句的结尾
count
count(*)会统计一共的记录数,cougnt(列名)会排出为null的情况。