原则
1 所选择的类型越简单越好,能保存数字的类型越小越好;
2 较短的文本: char varchar(M)
M:最多的字符数
char:固定的长度;
varchar:可变的长度;
har:性能高:固定使用
varchar:变化比较大;节省空间;
binary:保存二进制;
enum:枚举类型;
日期类型
date:保存日期没有时间
datetime:和date相反;8字节;
timestamp:时间戳;市区有影响;
约束
1一种限制,为了保证表中数据的准确和可靠性;
2 防止重复;
六大约束
not null
default:默认约束;
primary key:组件约束;唯一,非空;
unique:唯一约束,保证字段的唯一性
check:检查约束;比如检查性别男或者女才能够添加
mysql和oracle不兼容;
foreign key:外检约束;
六大约束:列级约束
表级约束:除了非空和默认,都支持;
添加约束
gender char(1) check(gender=‘男’ or gender=‘女’) 检查约束;
age int default 18;
refrences:应用外键
查看所有的索引
show index from stuinfo;
直接在字段名和类型后面追加,约束类型就可以
仅仅支持:默认,非空,主键,唯一
添加表约束
constraint pk primary key(id),
constraint uq unique(seat),
constraint ck check(gender=‘男’ or gender=‘女’)
costraint fk_stuinfo_major foreign key(majored) refrences major(id);外键;
表的约束:在每个字段的最后面;
没有起名就是默认的;
外键一般放在表的约束上
主键,unique,放在列三就好了,
表的约束和列的约束效率问题???
主键和唯一的区别???
1 都能够保证唯一性
2 unique:可以非空,就是一个null;
3 主键可以有两个多个列组成;不能重复任意一个;
4 组合主键
5 组合不推荐
外键的特点
1 在从表三设置外键
2 列的类型和主表类型一致,兼容;
3 名称无要求;
4 主表的关联必须是一个key(主键…)
一般主键或者唯一;
5 插入数据的时候:主表优先;
6 删除:删除从表,不在应用方可删除主键;
一个列可以多个约束,空格隔离,顺序无关
修改表的时候添加约束:
原来的表没有约束:
添加非空约束:
alter table studentinfo modify column stuname varchar(20) not null;
-----去掉约束:把not去掉就好了;
添加默认的约束
alter table student_info modify column age int default 18;
列的约束:alter table stuinfo modify
column id int primary key;
表的约束
alter table stuinfo add primary key(id);
添加唯一
列的约束:alter table stuinfo modify
column seat int default;
表的约束:
alter table stuinfo add unique(seat);
添加外键
alter table stuinfo add foreign key(majorid) refrences major(id);
修改表的时候删除约束
1 删除非空约束
alter table stuuinfo modify column stuname;
2 删除默认约束
alter table stuinfo modify colum age int;
3 删除唯一约束
alter table stuinfo drop index seat;
4 删除最大的外键
事物的介绍
1 一个运行单元:要么同时成功,同时失败;
2 每一个mysql语句是相互依赖的
3 发生错误进行回滚;
4 show engines:查看支持的引擎;
5 事物的acid四个特点;
6 a:原子性,不可分割;一致性,隔离性互相不能干扰;持久性:一旦被提交就是永久性的改变,比如删除:
一旦提交,就是永久的对数据库的改变;