简述:
复习一下数据库基本操作创建表和触发器
1. 创建一张表
注意: 一个表只能有一个PRIMARY KEY
例如下面我加了两个primary key
create table table1(
id1 int primary key,
id2 int primary key,
name varchar(8)
);
就会出现,下面错误,因为只能有一个主键primary key
如果想创建联合主键,就需要使用关键字constraint
create table table1(
id1 int,
id2 int,
name varchar(8),
constraint table_id1_id2_primarykey primary key(id1, id2)
);
之后调用
describe table1;
查看表信息,
上面是建表的样例,下面的person是一个实用的表
新建了一个人的表
create table person(
id int NOT NULL AUTO_INCREMENT primary key,
name varchar(8) not null,
sex bit,
age int check(age > 0 and age < 200),
addr varchar(100) default '' not null
);
之后
插入了一条数据,
insert into person(name, sex, age, addr) values('Jeremy', 1, 20, 'SH');
输出:
2. 建一个触发器TRIGGER
实现每一次在上面Person表中添加一条记录,之后都可修改countPerson表中人员的总数+1
新建countPerson表以及插入初始值totalNum = 0
drop table if exists countPerson;
create table countPerson(
totalnum int default 0
);
insert into countPerson(totalnum) values(0);
创建触发器TIRGGER
DROP TRIGGER IF EXISTS insertTrigger;
delimiter //
CREATE TRIGGER insertTrigger
AFTER INSERT ON person
FOR EACH ROW
BEGIN
update countPerson set totalNum = totalNum + 1;
END;//
测试(从头开始走一遍流程):
1)创建Person表:
drop table person;
create table person(
id int NOT NULL AUTO_INCREMENT primary key,
name varchar(8) not null,
sex bit,
age int check(age > 0 and age < 200),
addr varchar(100) default '' not null
);
select * from person;
此时Person表为空
2)创建countPerson表
drop table if exists countPerson;
create table countPerson(
totalnum int default 0
);
insert into countPerson(totalnum) values(0);
select * from countPerson;
此时初始totalNum = 0
3) 创建触发器
DROP TRIGGER IF EXISTS insertTrigger;
delimiter //
CREATE TRIGGER insertTrigger
AFTER INSERT ON person
FOR EACH ROW
BEGIN
update countPerson set totalNum = totalNum + 1;
END;//
4)在Person表中添加记录insert
insert into person(name, sex, age, addr) values('Jeremy', 1, 20, 'SH');
insert into person(name, sex, age, addr) values('Hellon', 1, 22, 'SH');
select * from person;
此时Person表中记录如下,
5)看一下触发器有没有起作用
select * from countPerson;
发现有作用了。
附:
此外使用下面语句可以看到数据库的触发器信息
SELECT * FROM information_schema.`TRIGGERS`;