一、SQL介绍:(Structured Query Language)
结构化查询语言
SQL标准:SQL92(92年定制) SQL99(99年定制)
自5.7版本,加入严格的SQL_Mode严格模式。(必须按照SQL标准。)
二、SQL作用:
SQL用来管理和操作MySQL内部的对象
何为对象?库、表...
库:库名,库属性
表:表名,表属性,列,记录,列属性和约束
三、SQL语句的类型
DDL: 数据定义语言 data definition language
DCL: 数据控制语言 data control language
DML: 数据操作语言 data manipulation language
DQL: 数据查询语言 data query language
四、数据类型
1.作用:控制数据的规范性,让数据有具体的含义,在列上进行控制。
2.种类:字符串、数字、时间、二进制
主要是前三项 二进制(基本不用,俺也不懂)
2.1、字符串:
char、varchar、enum (这三类为重要常用类型)
char(32):
控制长度(可变最大长度255),当前定义最大字符长度为32(可变数字),立即分配32字符长度的存储空间,用不完空格填充
varchar(32):
控制长度 (最大长度65525),最大字符长度为32个(可变数字),但是在存储时,自动判断字符长度,按需分配存储空间(限制最大长度),另外会占用一个字节空间来记录此次的保存字符长度。字符长度超过255之后,需要两个字节长度记录字符长度
enum 枚举类型
长时间不变的数据,比如我们国家的34个省
(‘北京’河南‘山西’山东‘)提前定义好之后,会生成索引(下标或者序列号)
查询时候更快,更方便
数据行较多时,会影响到索引的应用
注意:数字列禁止使用enum类型
面试题:
1.char和varchar的区别?上边写的就是答案
2.char和varchar如何选择?
答:char类型,存放固定长度的字符串列,比如电话号,身份证号,银行卡号等
好处:速度快,不用每次都判断长度
节约一个字符(记录字符长度)的空间
varchar类型:不确定长度的字符串,可以使用
字符更多类型:

2.2数字类型
常用:
tinyint (极小数据类型 0-255)
int(常规大小整数数据类型 -2^31 到 2^31-1)
更多数值类型:

2.3时间类型:
常用:
DATETIME
范围为从 1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999
TIMESTAMP
1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999(会受时区影响)
更多时间类型:

五、表属性
存储引擎:engine = InnoDB (企业必须使用)
字符集 :charset = utf8mb4 (推荐大部分企业使用)
排序规则 (校对规则)collation : 针对英文字符串大小写问题
字符集区别:
utf8 中文 三个字节长度 (鱼的那个拼音拼不出来)
utf8mb4 中文 四个字节长度 (比utf8更厉害点)(支持emoji 表情符号)
六、表的列的属性和约束
主键:primary key (PK) *****
设置为主键的列,此列的值必须非空且唯一,主键在一个表中只能有一个,但是可以有多个列一起构成。是一种约束,也是一种索引类型
设置主键列的类型尽量是:数字列,整数列,与业务无关列,自增的。
非空 Not NULL ****
老师建议,对于普通列来讲,尽量设置not null ,就是必填项,就像注册qq时候打星号的选项,必填
默认值 default****
设置默认值,比如:default 0 设置默认值为零
唯一 unique *****
不能重复 但是可以为空(不对比空,所以空重复了,无所谓)
自增 auto_increment ****
针对数字列,自动生成顺序值
无符号 unsigned ****
针对数字列,不能有符号就是不能为负数
网友评论