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;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容

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