目录
约束
1.创建表时候加约束
USE test;
DROP TABLE IF EXISTS major;
CREATE TABLE major(
id INT PRIMARY KEY,
majorName VARCHAR(20)
);
#列级约束
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
id INT PRIMARY KEY,
stuName VARCHAR(20) NOT NULL,
seat INT UNIQUE,
age INT DEFAULT 18,
majorId INT
);
#表级约束
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo (
id INT,
stuname VARCHAR(20),
gender char(1),
seat INT,
age INT,
majorid INT,
PRIMARY KEY(id),
CONSTRAINT uq UNIQUE(seat), #命名为uq
CONSTRAINT fk FOREIGN KEY(majorid) REFERENCES major(id)
);
SHOW INDEX FROM stuinfo;
六大约束:
主键key和唯一unique唯一键和外键的异同:
相同:主键和唯一键都是唯一的,可以有组合主键和组合唯一键。
i
不同:主键不可以为空,唯一键可以插入多个为null 的值,
一个表中只能由一个主键,可以有多个唯一键
外键: 1.要求再从表设置外键关系。
2.从表的外键列的类型和主表的关联列的类型要求一致或者兼容,名称无要求。
3.主表的关联列必须是一个键(一般是主键或者唯一,几乎没有外键)
4.插入数据时先插入主表,删除数据时先删除从表。
2.修改表时添加约束
#列级约束格式:
alter table stuinfo modify column stuname varchar(20) not null;
alter table stuinfo modify column age int default 18;
alter table stuinfo modify column id int primary key;
alter table stuinfo modify column seat int unique;
#表级约束:
alter table stuinfo add unique(seat);
alter table stuinfo add primary key(id);
#外键:
alter table stuinfo add foreign key(majorid) references major(id)
修改表时删除约束:
只要不写约束就行,相当于再重新建一次表。额外的有删除主键时:
alter table stuinfo drop primary key;
删除唯一键:
alter table stuinfo drop index seat;
3.标识列
create table tab_identity( #标识列,又称为自增长列,可以不用手动插入值系统提供默认序列值。默认起始值是1.
id int primary key auto_increment,
name varchar(20)
);
可以通过
SHOW VARIABLES LIKE '%auto_increment%';
set auto_increment_increment = 3;
SHOW VARIABLES LIKE '%auto_increment%';#可以通过show来查看初始值和步长,初始值不能改,步长可以改。改是对所有表的更改
#如果想改变起始值就在插入第一个数据的时候插入值。后面插入的数据这一列不插入值。
insert into tab_identity(id,name)values(10,John);
insert into tab_identity(id,name)values(null,Lina);
事务
事务的属性:原子性,一致性,隔离性,持久性。
可以设置savepoint a1;
只有DML语句(Insert delete update)会放到缓存才有事务回滚什么的
Create 直接操作文件,不会有回滚的。
事务的隔离级别:
第一级别:读未提交(read uncommitted)当前事务可以读取到对方未提交的数据操作(读的不是内存中的是缓存中的)。会产生脏读,不可重复读,幻读。
第二级别:读已提交(read committed)对方事务提交之后的数据我方可以读取到会产生:不可重复读,幻读。(我的事件一直没关,然后对方修改了数据,修改提交了。我方读出来的数据不一样了)
第三级别:可重复读(repeatable read)会出现幻读(对方把数据都删了,我这还读出原先有的数据)
第四级别:串行化 解决了三个问题,但是效率低,需要事务排队
Oracle默认的隔离级别是读已提交。
MySQL默认的隔离级别是可重复读。
MySQL的事务默认情况是自动提交的。
(自动提交就是:只要执行一次DML语句就提交一次)要想演示事务,就先关闭自动提交
jdbc中:持久化:把数据保存到可掉电存储设备中员工以后使用。
模式一:提交会执行两个update
模式二:回滚 不会执行两个update
索引
creat index student_index on student(name);
drop index student_index on student;
视图
1.建立视图
2.修改视图
3.删除视图
drop view myv1,myv2;
4.查看视图
desc myv3;
show create view myv3; #第一个常用
5.更新视图
对视图的增删改可以对原来的表数据的增删改,但是以下类型不能更新。
常量视图不能更新。
delete和truncate
delete可以回滚,不执行操作
truncate就算回滚了数据也删除了。
视图和表的区别
变量