mysql自学笔记七(Navicat Premium 15)

#常见的数据类型
/*
数值型:
				一、整型:TINYINT、SMALLINT、MEDIUMINT、int/INTEGER、BIGINT(字节数从左到右:1 2 3 4 8 )
				特点:
						①如果不设置无符号数还是有符号,默然是有符号的,如果想设置无符号的,需要添加unsigned关键字
						②如果插入的数值超过了整型的范围,会报out of range 异常,并且插入临界值
						③如果不设置长度,会有默认的长度,长度代表着下面是的最大宽度,如果不够会用0在左边填充,搭配zerofill使用

				二、小数:
								定点数:DEC、DECIMAL
								浮点数:float、double(字节数从左到右:4 8)
字符型:
				较短的文本:char、varchar
				较长的文本:test、blob(较长的二进制文件)

日期型:
*/

#小数说明
f(M,D)
create table test(
		f1 FLOAT(5,2),  #整数部分和小数部分和为5,小数部分不超过2
		f2 double(5,2),
		f3 DECIMAL(5,2)
#DECIMAL默认M为10,D默认为0,如果是float和double则会根据插入的数值决定精度

#定点型相对而言精确度高点,如果要求插入数值的精确度较高如货币运算等则考虑使用
)

#原则
/*
所选择的类型越简单越好,能保存数值的类型越小越好
*/

#字符型
/*
特点:

				   写法  		  M的意思          特点        空间耗费  效率
char      char(M)    最大的字符数,可以省略,默认为1   固定长度的字符  比较耗费   高
varchar  varcahr(M)  最大的字符    可变长度的字符  比较节省   低

枚举:
			f1 ENUM('a','b','c') #枚举只能选一个插入
集合:
			f1 SET('a','b','c','d') #集合可以选择多个插入

*/

#日期型:
/*
分类:
date 只保存日期
time 只保存时间
year 只保存年份

datetime 保存 日期-时间
timestamp 保存 日期+时间

特点:

           字节       范围      时区等的影响
datetime    8      1000——9999       不受
timestamp   4      1970——2038        受

*/


#常见约束
/*

含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性

分类:六大约束
			not null:非空,用于保证该字段的值不能为空
				比如姓名、学号等
			DEFAULT:默认,用于保证该字段有默认值
				比如性别
			PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空
				比如学号、员工编号等
			UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空
				比如:座位号
			CHECK:检查约束【mysql中不支持】
				比如年龄、性别
			FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
				在从表添加外键约束,用于引用主表中的某列的值
				比如学生表的专业编号、员工表的部门编号,员工表的工种编号
				
添加约束的时机:
			1、创建表时
			2、修改表时

添加约束的分类:
			列级约束:
							六大约束语法上都支持,但外键约束没有效果
							语法:直接在字段名和类型后面追加约束类型即可
			表级约束:
							除了非空、默认,其他都支持
							语法:各个字段的最下面
							constraint 约束名 约束类型 (字段名)
							
主键和唯一性的大对比:
				保证唯一性  是否允许为空  一个表中可以有多个  是否允许组合
主键				√           ×								至少有一个   √,但不推荐
唯一				√						√								可以有多个   √,但不推荐

外键:
			1、要求在从表设置外键关系
			2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
			3、主表的关联列必须是一个key(一般是主键或唯一键)
			4、插入数据时,先插入主表再插入从表;删除数据时,先删除从表再删除主表

*/

#通用写法:
create table if exists stuinfo(
			id int PRIMARY KEY,
			stuname VARCHAR(20) not null,
			sex char(1),
			age int default 18,
			seat int UNIQUE,
			majorid int,
			CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)
);

/*
标识列

又称为增长列
含义:可以不用手动的插入值,系统提供默认的序列值

特点:
1、标识列必须和主键搭配吗?不一定但是要求同一个key
2、一个表可以有几个标识列?至多一个
3、标识列的类型只能是数值型
4、标识列可以通过 set auto_increment_increment=3;设置步长 可以通过 手动插入值,设置起始值

*/

#TCL
/*
事物控制语言

事物:
一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。


事物的特性:
ACID
原子性:一个事务不可在分割,要么都执行要么都不执行
一致性:一个事务执行会使数据从一个一致状态切换到另外一个一致状态
隔离性:一个事务的执行不受其他事务的干扰
持久性:一个事务一旦执行,则会永久的改变数据库的数据

事务的创建
隐式事务:事务没有明显的开启和结束的标记
比如:insert、update、delete语句

显式事务:事务具有明显的开启和结束的标记
前提:必须要先设置自动提交的功能为禁用

set autocommit=0; 只针对当前事务有效

步骤1:开启事务
set autocommit=0; 必须的
start transcation; 可选的
步骤2:编写事务中的sql语句(一般指select insert update delete)
语句1;
语句2;
......

步骤3:结束事务
commit; 提交事务
rollback; 回滚事务

事务的隔离级别:

										脏读  不可重复读 幻读
read uncommitted:		√      √        √
read committed:			×      √        √
repeatable read:			×      ×        √
serislizable:				×      ×        ×

mysql中默认 第三个隔离级别 repeatable read
oracle中默认 第二个隔离级别 read committed

查看隔离级别
select @@tx_isolation;
设置隔离级别
set session|global transaction isolation level 隔离级别;

*/
show VARIABLES like 'autocommit';
show engines;

#演示事物的使用步骤

#开启事务
set autocommit=0;
start TRANSACTION;
#编写一组事务的语句
update account set balance=1000 where username='张无忌';
update account set balance=1000 where username='赵敏';

#结束事务
ROLLBACK;
#COMMIT;

select * from account;

#查看隔离级别
select @@tx_isolation;


#建表语句
create table account(
id int PRIMARY key auto_increment,
username varchar(20),
balance DOUBLE
)ENGINE=INNODB DEFAULT CHARSET='utf8';

insert into account(username,balance)
VALUES ('张无忌',1000),('赵敏',1000);

#演示savepoint的作用
set autocommit=0;
start transaction;
delete from account where id=1;
SAVEPOINT a; #设置保存点
delete from account where id=7;

ROLLBACK to a; #回滚到保存点

select * from account;


#delete和truncate在事务使用时的区别

		#演示delete
		set autocommit=0;
		start transaction;
		delete from account;
		rollback; #delete可以回滚

		#演示truncate
		set autocommit=0;
		start transaction;
		TRUNCATE table account;
		rollback; #truncate不可以回滚
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

友培

数据皆开源!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值