1.详细的建表语句
Create table 表名字(字段 类型(长度),约束条件)
数据的分类: a)可以更精准的描述数据 b) 节省内存空间
2.数据的类型?
整数类型:
默认是有符号的 设置为无符号的1.create table t (age tinyint unsigned) 2.建表后修改 alter table t modify age tinyint unsigned
注意:对整数来说,长度不是所占的字节数 是显示数据时的宽度(字符数)
默认情况下 存储的数值为十进制 小于设置的宽度时,不会填充
可以加上zerofill 填充
浮点型: 最大长度
float 4字节 (255,30)
double 8字节 (255,30)
decimal 不固定 (65,30)
例子:create table t(num float(m,d));m表示总长度 d:表示小数点部分的长度
26.333的m=5 d=3
区别:float 与double的精度不同 小数部分都不准 decimal的小数是准确的 不会有丢失
Decimal的默认是(10,0)可以看成取整
字符串类型:
常用的两种:
Char 定长字符串
Varcher 可变长度字符串
注意:字符串中 长度指的是数据的字符长度 与字节没有关系
Create table t (c1 char, c2 varchar(10))
在创建时 varchar必须指定长度 char有默认值
不同点:
1) Char类在去数据的时候,就根据长度来获取,不关心真实数据的长度,每次取固定的长度会造成空间的浪费
2) Varchar类在去数据时,先获取数据的长度,在根据长度获取真实的数据,解决了存储空间的浪费,但是存取的速度变慢了
相同点:
括号中的数字都是表示存储的最大字符长度
mysql会在存储数据时自动将数据末尾的空格去掉
如果必须要存空格 需要修改sql_mode 增加 PAD_CHAR_TO_FULL_LENGTH 意思是把空格当作有效数据
由于自动去除空格这个机制 在使用等于符号 和like时有区别
select *from t1 where name = "yh "; 会自动去除空格
select *from t1 where name like "yh "; 不会自动去除空格
like 用于模糊匹配 使用%表示0或任意个任意字符 使用_表示一个任意字符
日期和 时间
Year time date datetime timestamp
Timestamp 特点:可以输入null 会自动输出当前时间 记录被修改时会自动更新时间
枚举:enum 可以指定一堆字符串的值 在插入数据时,必须选一个
集合:set 可以指定一堆数据 在插入数据时 必须选一个或多个
共同点:数据都是字符串
3.严格模式
什么是严格模式?
对插入的数据严格要求,不在范围内的直接报错
什么是非要个模式?
不在范围内的数据插入也不报错,只是存储的时候存储的是最大值
5.6默认的是非严格模式 5.7 默认的是严格模式
查看SQL模式
Select @@sql_mode;
Show variables like ”sql_mode”;
修改SQL模式
Set @@sql_mode=’值’; 一般不改
4. 约束
约束是一种数据的限制
比如:unsigned无符号 字符串的长度 浮点的长度
作用:保护数据的正确性和完整性
额外的约束
语法:创建时指定约束:create table t (字段名 类型(长度) 约束名1 约束名n…)
后期修改:alter table t modify 字段名 类型(长度) 约束名1 约束名n…
NOT NULL :非空约束
UNIQUE:唯一性约束
DEFAULT:默认值约束
PRIMAULT KEY:主键约束:限制该字段 不能为空 并且是唯一的 可以唯一标识一条数据
FOQREIGN KEY:外键约束:用来指向另一个表的主键
每一个表都应该有一个主键 需要唯一标识 否则可以可能出现完全相同的两个数据 无法区分
UNIQUE 不能重复 但是可以为空 这样也不能唯一标识
UNIQUE NOT NULL 不能为空且唯一 可以唯一标识一条数据 书写顺序无所谓
UNIQUE NOT NULL 与 主键的区别
UNIQUE NOT NULL 不能被其他表引用 (不能作为其它表的外键)
UNIQUE NOT NULL 约束一个表中可以有多个 但是主键只能有一个
索引:用于加速查询
InnoDB 中的索引是树形结构
为了提高查询效率 InnoDB为找一个不为空 且唯一的字段作为主键
如果表中不存在这样的字段 会自动帮你建一个隐藏主键字段 但是无法提升查询效率
只要是使用innoDB 就应该为每个表指定一个非空 且唯一的字段
InnoDB阻止数据时 首先使用主键 如果没有主键 找一个非空且唯一 如果也没有 建一个隐藏字段
多字段联合主键: 不常用
学生表 stu_id course_id 做为联合主键
1 1 已有数据
1 2 可以插入
2 1 可以插入
1 1 不能插入
只有当两个字段都重复才算重复
当一个表中 由于业务需求没有一个非空且唯一的字段时 我们可以建一个新的字段专门作为主键
管理主键的值挺麻烦的 你得记录上一次的主键值
mysql可以帮你自动管理主键 auto_increment 自动增长
auto_increment 只能用于整型字段 并且该字段必须具备索引
所以 通常 主键都会加上auto_increment
手动修改自动增长计数
alter table 表名 auto_increment 新的值;
注意:如果新的值小于当前的最大值 是无效的
通常建一个表就要建一个主键 主键的类型通常是整型
5. 存储引擎
发动机
汽油机
柴油机 柴油价格便宜 动力还强 噪音大 不完全燃烧
电机 加速快 噪音小 续航问题
一个产品或服务的核心部分称之为引擎
mysql的核心功能存取数据
mysql存储引擎就是负责存取数据那一段代码