MySQL基本语句(三)

 

目录

 

约束

1.创建表时候加约束

2.修改表时添加约束

3.标识列

事务

索引

视图

1.建立视图

2.修改视图

3.删除视图

4.查看视图

5.更新视图

delete和truncate

视图和表的区别

变量


约束

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就算回滚了数据也删除了。

视图和表的区别

变量

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值