Mysql 基础 [3]之数据类型 常见约束 TCL语言

常见类型

数值型

整型:
小数:
    浮点型
    定点型
字符型:短文本 长文本
日期型: 
Blob类型:较长的二进制数据 

整型

整型

如何不设置有符号和无符号默认有符号
UNSIGNED 这是无符号
如果数据超出范围,会报警告 而且插入临界值
如果不设置长度有默认的长度 对于整型,是由前面的类型决定的
ZEROFILL 零填充 比如 int(4) 对于插入数据 11 为,0011
长度代表了显示的最大宽度
小数

小数

特点:
double(M,D)
M:整数位和小数位一共多少位数
D:保留的几位小数
超过范围,插入临界值
缺省情况:
如果是decimal 则M默认值是10,D默认是0
如果是float和double,默认值是插入的数值的长度精度
定点型插入数据精度高

选择的原则:越简单越好,能保存的数据范围越小越好

字符型
char是固定长度(默认为1) varchar 是可变长度 长度必须写
set保存集合

char 和 varchar

binary

枚举类型

长文本 text blob (存储较大的二进制)

日期类型

日期类型

datetime和timestamp的区别

datetime和timestamp的区别
常见约束

含义:用来限制表中的数据,围殴了保证数据的一致性
分类:
1.NOT NULL 非空约束 用于保证该字段的值不能为空 比如姓名学号
2.DEFAULT 默认约束 用于保证该字段有默认值
3.PRIMARY KEY 主键 保证字节的值具有唯一性,而且非空
4.UNIQUE 唯一,用于保证该字段的为一直,可以为空
5.CHECK 检查约束 Mysql 不支持 年龄性别
6.FOREIGN KEY 外键约束 用于限制两个表的关系,用于保证此字段的值必须来自另一个表的一个列的值 从表添加外键约束 用于引用主表的某列的值

添加约束的时机
1.创建表的时候
2.需改表的时候

约束添加的分类
1.列级约束 : 六大约束都可以写 但是外键约束没有效果
2.表级约束 : 除了非空,默认,其他都支持

列级约束 : 六大约束都可以写 但是外键约束没有效果

CREATE TABLE stuinfo(
    id INT PRIMARY KEY, #主键
    stuName VARCHAR(20) NOT NULL, #非空
    gender CHAR(1) CHECK(gender='男' OR gender='女') , # 检查
    seat INT UNIQUE, #唯一
    age INT DEFAULT 18 #默认
);
SHOW INDEX FROM stuinfo;
//查看表索引 主键 外键 唯一 以及自己创建的索引
查看表索引

添加表级约束
语法: 在各个字段的下面
CONSISTENT 约束名 约束类型(字段名)

CREATE TABLE stuinfo2(
    id INT,
    username VARCHAR(20),
    gender CHAR(1),
    seat INT,
    age INT,
    majorid INT,
    
    CONSISTENT pk PRIMARY KEY(id),#主键
    CONSISTENT uq UNIQUE(seat), #唯一约束
    CONSISTENT ck CHECK(gender = '男' OR gender = '女') ,#检查
    CONSISTENT fk_stuinfo_major FOREIGN KEY(major) REFERENCES major(id) # 外键
)

主键和唯一的对比
1.都可以保证唯一性
2.主键不允许为空 唯一可以为空 但是唯一只能有一个为null
3.主键至多有一个 唯一可以有多个
4.是否允许组合 组合主键(但是不推荐) 组合唯一键

外键:
1.要求在从表设置外键关系
2.从表的外键列类型必须和主表的关联列相同,名称无要求
3.主表的关联列必须是一个key(一般是主键或者是唯一)
4.插入数据的时候,先插入主表,然后再删除从表
5.删除数据的时候,需要先删除从表,然后再删除主表

修改表的时候添加约束

CREATE TABLE stuinfo3(
    id INT,
    username VARCHAR(20),
    gender CHAR(1),
    seat INT,
    age INT
    );

#添加非空约束
ALTER TABLE stuinfo3 MODIFY COLUMN username VARCHAR(30) NOT null;
#添加默认约束
ALTER TABLE stuinfo3 MODIFY COLUMN age INT DEFAULT 18;
#添加主键
#列级约束
ALTER TABLE stuinfo3 MODIFY COLUMN id INT PRIMARY KEY;
#表级约束
ALTER TABLE stuinfo3 ADD PRIMARY KEY(id);
#添加唯一键
#列级约束
ALTER TABLE stuinfo3 MODIFY COLUMN seat INT UNIQUE;
#表级约束
ALTER TABLE stuinfo3 ADD UNIQUE(seat);
#添加外键
ALTER TABLE stuinfo3 ADD FOREIGN KEY(majorid) REFERENCES major(id);
ALTER TABLE stuinfo3 ADD CONSTRAINT fk_stuinfo3_major FOREIGN KEY(majorid) REFERENCES major(id);

添加列级约束
alter table 表名 modify column 字段名 字段类型 新约束
添加表级约束
alter table 表明 add [constraint 约束名] 约束类型 (字段名) [外键的引用]

修改表的时候删除约束

#删除非空约束
ALTER TABLE stuinfo3 MODIFY COLUMN username VARCHAR(20) NULL;
#删除默认约束
ALTER TABLE stuinfo3 MODIFY COLUMN age INT;
#删除主键 
ALTER TABLE stuinfo3 DROP PRIMARY KEY;
#删除唯一键
ALTER TABLE stuinfo3 DROP INDEX seat;
#删除外键约束
ALTER TABLE stuinfo3 DROP FOREIGN KEY fk_stuinfo3_major;
标识列 又称为自增长列

创建表的时候设置标识列

CREATE TABLE stuinfo4(
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(20),
    gender CHAR(1),
    seat INT,
    age INT
);

特点:
1.标识别必须和key(主键,唯一键)搭配
2.一个表只有一个标识列
3.标识列的类型,只能是数值型
4.标识列可以通过 SET auto_incrment_increment = 3; 设置增加的大小
5.可以手动设置起始值

#修改表的时候设置标识列
ALTER TABLE stuinfo5 MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT;
#修改表的时候删除标识列
ALTER TABLE stuinfo5 MODIFY COLUMN id INT PRIMARY KEY;
TCL 事务控制语言
事务

概念
SHOW ENGINES; //查询引擎

事务的特点


事务的AICD属性

事务的分类:
隐式事务,没有明显的开启和结束事务的标志
比如
insert、update、delete语句本身就是一个事务
显式事务,具有明显的开启和结束事务的标志
1、开启事务
取消自动提交事务的功能
2、编写事务的一组逻辑操作单元(多条sql语句)
insert
update
delete
3、提交事务或回滚事务
使用到的关键字
set autocommit=0;
start transaction;
commit;
rollback;
savepoint 断点
commit to 断点
rollback to 断点
SHOW VARIABLES LIKE '%autocommit%';//查询事务是否开启 或者查询其他的

数据库的隔离级别
事务并发问题如何发生?
当多个事务同时操作同一个数据库的相同数据时
事务的并发问题有哪些?
脏读:一个事务读取到了另外一个事务未提交的数据
不可重复读:同一个事务中,多次读取到的数据不一致
幻读:一个事务读取数据时,另外一个事务进行更新,导致第一个事务读取到了没有更新的数据

并发问题和隔离级别

数据库提供的四种事务隔离级别

如何避免事务的并发问题?
通过设置事务的隔离级别
1、READ UNCOMMITTED
2、READ COMMITTED 可以避免脏读
3、REPEATABLE READ 可以避免脏读、不可重复读和一部分幻读
4、SERIALIZABLE可以避免脏读、不可重复读和幻读
设置隔离级别:
set session|global transaction isolation level 隔离级别名;
查看隔离级别:
select @@tx_isolation;

事务中的一个关键词 savepoint 回滚点,设置 只能搭配 rollback 使用

语句1
savepoint a;
语句2
rollback to  a;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 手动不易,转发请注明出处 --Trance 数据库系统命令: (1).查看存储过程状态:show pro...
    Trance_b54c阅读 1,720评论 0 8
  • 回顾 字段类型(列类型):数值型,时间日期型和字符串类型 数值型:整型和小数型(浮点型和定点型) 时间日期型:da...
    翊溪阅读 982评论 0 0
  • 1、登录SQL plus 使用系统用户登录: 首先系统用户有:sys和system,这两个用户权限较高; 其中sy...
    方研梅阅读 727评论 0 0
  • 数据库的基本是概念名词解释: 数据库名词解释 元组:可以理解为表的每一行就是一个元组 候选码:若关系中的某一属性组...
    杰伦哎呦哎呦阅读 1,148评论 0 6
  • 一、列属性 真正的对列的约束是依赖于数据的类型,但是这种约束比较单一,所以需要更多的约束,整个时候就是用到了字段的...
    满天繁星_28c5阅读 639评论 0 2