标签:就会 子查询 数值 大型 维表 逻辑性 toc mysql 事务
正文
【第一章】
表头 | 字段1 | 字段2 |
数据单元 | 数据1 | 数据2 |
姓名 | 性别 | 学号 | 学科 | 年龄 |
张三 | 男 | 001 | java | 23 |
李四 | 男 | 002 | MySQL | |
王二 | 003 | Linux | 17 |
姓名 | 性别 | 学号 | 学科 | 年龄 |
张三 | 男 | 001 | java | 23 |
李四 | 男 | 002 | MySQL | |
王二 | 003 | Linux | 17 |
班级名称 | 教室编号 |
java001 | A001 |
Linux002 | B005 |
姓名 | 性别 | 学号 | 学科 | 年龄 | 所属班级 |
张三 | 男 | 001 | java | 23 | java001 |
李四 | 男 | 002 | MySQL | MySQL005 | |
王二 | 003 | Linux | 17 | Linux002 |
create database 数据库名字 [库选项];
-- 单行注释,也可以用# # 创建数据库 CREATE DATABASE mydatabase CHARACTER SET utf8;
-- 查看所有数据库 show databases;
-- 查看指定部分的数据库 show databases like ‘pattern‘; -- pattern是匹配模式 %:表示匹配多个字符 _:表示匹配单个字符
-- 查看数据库的创建语句 show create database 数据库名字;
alter database 数据库名字 [库选项]。 character set [字符集] collate 绞对集
-- 删除数据库 drop database 数据库名字;
-- 新增数据表 create table [if not exists] 数据表名字( 字段名字 数据类型, 字段名字,数据类型 -- 最后一行不不要逗号 )[表选项]; if not exists:如果表名不存在,那么就创建,否则不执行创建。 表选项:控制表的表现。 字符集:charset/character set 具体字符集;--保证表中数据存在的字符集。 校对集:collate 具体校对集。 存储引擎:engine 具体的存储引擎(innodb和myisam)
-- 显示的指定表所在的数据库 create table 数据库名.表名( 字段1 数据类型, 字段2 数据类型 );
-- 进入到数据库环境 use 数据库名字; -- 创建数据表 create table 数据表名( 字段1 数据类型, 字段2 数据类型 );
-- 查看所有表 show tables
-- 查看部分表 show tables like ‘pattern‘;
-- 查看表的创建语句 show create table 表名;
-- 查看表结构 ①desc 表名; ②describe 表名; ③show columns from 表名;
-- 修改表名 rename table 老表名 to 新表名;
alter table 表名 [表选项];
alter table 表名 add [column] 字段名 数据类型[列属性][位置]; 位置:字段名可以存在表中的任意位置 first:第一个位置 after:在哪个字段之后,after 字段名,默认在最后
alter table 表名 modify 字段名 数据类型[列属性] [位置];
alter table 表名 change 旧字段名 新字段名 数据类型[列属性][位置];
alter table 表名 drop 字段名;
-- 删除表 drop table 表名1,表名2,……;
insert into 表名 values (值列表)[,(值列表)]; -- 可以一次性插入多条记录
insert into 表名 (字段列表) values (值列表);
select */字段列表 from 表名 [where 条件] ;
update 表名 set 字段1=值1,字段2=值2,……[where 条件];
delete from 表名 [where 条件];
show character set;
show variables like ‘character_set%‘;
-- 修改服务器认为的客户端数据的字符集为GBK set character_set_client=gbk;
set character_set_results=gbk;
set names 字符集;
show collation;
【第二章】
create table my_int( int_1 tinyint, int_2 smallint, int_3 mediumint, int_4 int, int_5 bigint )charset utf8;
-- 插入数据 insert into my_int(int_1,int_2,int_3,int_4,int_5) values(1,2,3,4,5);
select * from my_int;
alter table my_int add int_6 int unsigned;
insert into my_int (int_6) values (0);
alter table my_int add int_7 int(1) unsigned ;
alter table my_int add int_8 int(2) zerofill;
-- 浮点数表 create table my_float( f1 float, f2 float(10,2),--10位在精度范围之外 f3 float(6,2)--6位在精度范围之内 );
【第三章】
-- 增加主键 create table my_pri( id int primary key, name varchar(20) not null comment ‘姓名‘ )charset utf8;
create table my_pri2( number char(10) comment ‘学号‘, course char(10) comment ‘课程代码:3901+0000‘, score tinyint unsigned default 60 comment ‘成绩‘, -- 增加主键限制:学号和课程代码应该是唯一的 primary key (number,course) )charset utf8;
alter table 表名 add primary key (字段列表);
drop table 表名 drop primary key;
-- 修改表选项的值 alter table 表名 auto_increment = 值;
-- 不建议修改 set auto_increment_increment = 5;
alter table 表名 modify 字段 类型;
alter table 表名 drop index 索引名字;
id | 姓名 | 性别 | 年龄 | 身高 | 体重 | 籍贯 | 家庭住址 | 紧急联系人 | 婚姻 |
id | 姓名 | 性别 | 年龄 | 身高 | 体重 |
籍贯 | 家庭住址 | 紧急联系人 | 婚姻 |
id | 婚姻 | 籍贯 | 家庭住址 | 紧急联系人 |
id | 姓名 | 年龄 | 性别 |
id | 班级名字 |
id | 姓名 | 性别 | 年龄 | 班级id |
班级主键 | ||||
班级主键 |
t_id | 姓名 | 性别 | 工资 |
1 | A | 男 | 6000 |
2 | B | 女 | 8000 |
s_id | 姓名 | 性别 | 分数 |
1 | 张三 | 男 | 59 |
2 | 李四 | 男 | 95 |
T_ID | S_ID |
1 | 1 |
1 | 2 |
2 | 1 |
2 | 2 |
讲师 | 性别 | 班级 | 教室 | 代课时间 | 代课时间(开始时间、结束时间) |
朱元璋 | 男 | java001班 | B23 | 30天 | 2014-02-17 2014-05-05 |
朱元璋 | 男 | java002班 | C15 | 30天 | 2014-05-05 2014-05-30 |
李世民 | 男 | Linux003班 | C15 | 15天 | 2016-02-21 2014-06-20 |
姓名 | 性别 | 班级 | 教室 | 代课时间 | 开始时间 | 结束时间 |
朱元璋 | 男 | java001班 | C01 | 30天 | 2014-02-27 | 2014-05-05 |
朱元璋 | 男 | java002班 | B23 | 30天 | 2014-03-21 | 2014-05-30 |
李世民 | 男 | Linux003班 | A15 | 15天 | 2014-06-01 | 2014-06-20 |
id | 讲师 | 性别 | 班级 | 教室 | 代课时间 | 开始时间 | 结束时间 |
1 | 朱元璋 | 男 | java01班 | A03 | 30天 | 2014-02-27 | 2014-05-05 |
2 | 朱元璋 | 男 | Linux02班 | B23 | 30天 | 2014-03-21 | 2014-05-30 |
3 | 李世民 | 男 | java001班 | A03 | 30天 | 2014-06-01 | 2014-06-20 |
id | 讲师id | 班级id | 代课时间 | 开始时间 | 结束时间 |
1 | 1 | 10 | 30天 | 2014-02-27 | 2014-05-05 |
2 | 1 | 12 | 30天 | 2014-03-21 | 2014-05-30 |
3 | 2 | 12 | 30天 | 2014-06-01 | 2014-06-20 |
id | 讲师 | 性别 |
1 | 朱元璋 | 男 |
2 | 李世民 | 男 |
id | 班级 | 教室 |
10 | java01班 | A03 |
12 | Linux02班 | B23 |
【第四章】
create table 表名 like 数据库.表名;
insert into 表名 [(字段列表)] select 字段列表/* from 数据表名;
select 字段列表/* from 表名 [where 条件];
select [select 选项] 字段列表 [字段别名]/* from 数据源 [where 条件子句] [group by 子句] [having 子句][order by子句][limit 子句];
字段 [as] 别名;
select * from 表名;
select * from 表名1,表名2,……;
【第五章】
select * from 左表,右表;
select * from 左表 cross join 右表;
CREATE TABLE my_class( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), room VARCHAR(20) );
CREATE TABLE my_student( id INT PRIMARY KEY AUTO_INCREMENT, number VARCHAR(20), sex CHAR(1), NAME VARCHAR(10), age INT, height INT, cid INT, CONSTRAINT fk_id FOREIGN KEY (cid) REFERENCES my_class(id) );
-- 插入班级 INSERT INTO my_class VALUES (NULL,‘java001班‘,‘A05‘); INSERT INTO my_class VALUES (NULL,‘Linux班‘,‘B26‘); INSERT INTO my_class VALUES (NULL,‘C班‘,‘D11‘); -- 插入学生 INSERT INTO my_student VALUES (NULL,‘haha002‘,‘男‘,‘张三‘,20,185,1); INSERT INTO my_student VALUES (NULL,‘haha003‘,‘女‘,‘李四‘,15,175,2); INSERT INTO my_student VALUES (NULL,‘haha004‘,‘女‘,‘王五‘,35,180,3); INSERT INTO my_student VALUES (NULL,‘haha005‘,‘男‘,‘赵六‘,19,181,3); INSERT INTO my_student VALUES (NULL,‘haha006‘,‘女‘,‘田七‘,34,164,2); INSERT INTO my_student VALUES (NULL,‘haha007‘,‘女‘,‘王八‘,11,1519,1);
SELECT * FROM my_student CROSS JOIN my_class;
select * from 左表 [inner] join 右表 on 左表.字段 = 右表.字段;
SELECT * FROM my_student INNER JOIN my_class ON my_student.`cid` = my_class.`id`;
SELECT c.`id` 班级id,c.`name` 班级名字,c.`room` 班级教室,s.`id` 学生id,s.`name` 学生姓名,s.`sex` 学生性别,s.`number` 学号,s.`age` 学生年龄,s.`height` 学生身高 FROM my_student s INNER JOIN my_class c ON s.`cid` = c.`id`;
update my_student set cid = null where id = 5;
SELECT c.`id` 班级id,c.`name` 班级名字,c.`room` 班级教室,s.`id` 学生id,s.`name` 学生姓名,s.`sex` 学生性别,s.`number` 学号,s.`age` 学生年龄,s.`height` 学生身高 FROM my_student s INNER JOIN my_class c ON s.`cid` = c.`id`;
SELECT c.`id` 班级id,c.`name` 班级名字,c.`room` 班级教室,s.`id` 学生id,s.`name` 学生姓名,s.`sex` 学生性别,s.`number` 学号,s.`age` 学生年龄,s.`height` 学生身高 FROM my_student s INNER JOIN my_class c WHERE s.`cid` = c.`id`;
SELECT s.*,c.name ,c.room FROM my_student s LEFT OUTER JOIN my_class c ON s.`cid` = c.`id`;
SELECT * FROM my_student NATURAL JOIN my_class;
SELECT * FROM my_student NATURAL LEFT JOIN my_class;
【第六章】
-- 创建班级 CREATE TABLE my_class( id INT PRIMARY KEY AUTO_INCREMENT, c_name VARCHAR(20) NOT NULL, room VARCHAR(20) ); -- 创建学生表 CREATE TABLE my_student1( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) NOT NULL, c_id INT , CONSTRAINT fk_c_id FOREIGN KEY (c_id) REFERENCES my_class (id) );
alter table 表名 add [constraint 外键名字] foreign key (外键字段) references 父表(主键字段);
-- 创建班级 CREATE TABLE my_class( id INT PRIMARY KEY AUTO_INCREMENT, c_name VARCHAR(20) NOT NULL, room VARCHAR(20) ); -- 创建学生表 CREATE TABLE my_student2( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) NOT NULL, c_id INT ); ALTER TABLE my_student2 ADD CONSTRAINT fk_c_id FOREIGN KEY (c_id) REFERENCES my_class (id);
alter table 表名 drop foreign key 外键名;--一张表中可以有多个外键,但是名字不能相同
ALTER TABLE my_student2 DROP FOREIGN KEY fk_c_id;
constraint 外键名字 foreign key (外键字段) references 主表(主键) on delete set null;
constraint 外键名字 foreign key (外键字段) references 主表(主键) on update cascade;
constraint 外键名字 foreign key (外键字段) references 主表(主键) on delete set null on update cascade;
多条select语句构成:每一条select语句获取的字段必须严格一致(但是字段类型无关)
select 语句1 union [union 选项] 语句2……; -- union选项:与select选项一样有两个 -- all 保留所有(不管重复) -- distinct 去重(整个重复):默认的
SELECT * FROM my_class UNION SELECT * FROM my_class;
SELECT id,c_name,room FROM my_class UNION SELECT id,c_id,NAME FROM my_student2;
(SELECT * FROM my_student2 WHERE sex = ‘男‘ ORDER BY height ASC) UNION (SELECT * FROM my_student2 WHERE sex = ‘女‘ ORDER BY height DESC);
(SELECT * FROM my_student2 WHERE sex = ‘男‘ ORDER BY height ASC LIMIT 999999999) UNION (SELECT * FROM my_student2 WHERE sex = ‘女‘ ORDER BY height DESC LIMIT 999999999);
-- 创建班级表 CREATE TABLE my_class( id INT PRIMARY KEY AUTO_INCREMENT COMMENT ‘主键‘, c_name VARCHAR(20) NOT NULL COMMENT ‘班级名字‘, room VARCHAR(20) NOT NULL COMMENT ‘班级所在教室‘ ); -- 插入班级信息 INSERT INTO my_class VALUES (NULL,‘java001班‘,‘A01‘); INSERT INTO my_class VALUES (NULL,‘Linux003班‘,‘C15‘); INSERT INTO my_class VALUES (NULL,‘c005班‘,‘B23‘); -- 创建学生表 CREATE TABLE my_student( id INT PRIMARY KEY AUTO_INCREMENT COMMENT ‘主键‘, NAME VARCHAR(20) NOT NULL COMMENT ‘学生姓名‘, age INT NOT NULL COMMENT ‘学生年龄‘, gender VARCHAR(2) NOT NULL COMMENT ‘学生性别‘, c_id INT COMMENT ‘外键‘ , CONSTRAINT fk_c_id FOREIGN KEY (c_id) REFERENCES my_class (id) ); -- 插入学生信息 INSERT INTO my_student VALUES (NULL,‘张三‘,20,‘男‘,1); INSERT INTO my_student VALUES (NULL,‘李四‘,18,‘女‘,2); INSERT INTO my_student VALUES (NULL,‘王五‘,19,‘女‘,2); INSERT INTO my_student VALUES (NULL,‘赵六‘,25,‘男‘,3); INSERT INTO my_student VALUES (NULL,‘田七‘,14,‘女‘,1); INSERT INTO my_student VALUES (NULL,‘王八‘,19,‘男‘,3);
select * from my_student where c_id = ?;
SELECT id FROM my_class WHERE c_name = ‘java001班‘ ; -- 一行一列
SELECT * FROM my_student WHERE c_id = (SELECT id FROM my_class WHERE c_name = ‘java001班‘ );
SELECT *FROM my_student WHERE c_id IN (?);
SELECT id FROM my_class
SELECT *FROM my_student WHERE c_id IN (SELECT id FROM my_class);
ALTER TABLE my_student ADD height INT NOT NULL COMMENT ‘身高‘; UPDATE my_student SET height = 180 WHERE id = 1; UPDATE my_student SET height = 170 WHERE id = 2; UPDATE my_student SET height = 165 WHERE id = 3; UPDATE my_student SET height = 190 WHERE id = 4; UPDATE my_student SET height = 155 WHERE id = 5; UPDATE my_student SET height = 160 WHERE id = 6;
select * from my_student where age = ? and height = ?;
select max(age),max(height) from my_student;
SELECT * FROM my_student WHERE (age = (SELECT MAX(age) FROM my_student)) AND (height = (SELECT MAX(height) FROM my_student));
SELECT * FROM my_student WHERE (age,height) = (SELECT MAX(age),MAX(height) FROM my_student);
SELECT * FROM my_student ORDER BY height DESC
SELECT * FROM (SELECT * FROM my_student ORDER BY height DESC) AS student GROUP BY student.c_id;
SELECT * FROM my_student WHERE height IN (SELECT MAX(height) FROM my_student GROUP BY c_id);
SELECT * FROM my_student WHERE ?;
EXISTS(SELECT * FROM my_class)
SELECT * FROM my_student WHERE EXISTS(SELECT * FROM my_class);
【第七章】
CREATE TABLE my_class( id INT PRIMARY KEY AUTO_INCREMENT COMMENT ‘主键‘, c_name VARCHAR(20) NOT NULL COMMENT ‘班级名字‘, room VARCHAR(20) NOT NULL COMMENT ‘班级所在教室‘ ); -- 插入班级信息 INSERT INTO my_class VALUES (NULL,‘java001班‘,‘A01‘); INSERT INTO my_class VALUES (NULL,‘Linux003班‘,‘C15‘); INSERT INTO my_class VALUES (NULL,‘c005班‘,‘B23‘); -- 创建学生表 CREATE TABLE my_student( id INT PRIMARY KEY AUTO_INCREMENT COMMENT ‘主键‘, NAME VARCHAR(20) NOT NULL COMMENT ‘学生姓名‘, age INT NOT NULL COMMENT ‘学生年龄‘, gender VARCHAR(2) NOT NULL COMMENT ‘学生性别‘, c_id INT COMMENT ‘外键‘ , height INT COMMENT ‘身高‘, CONSTRAINT fk_c_id FOREIGN KEY (c_id) REFERENCES my_class (id) ); -- 插入学生信息 INSERT INTO my_student VALUES (NULL,‘张三‘,20,‘男‘,1,180); INSERT INTO my_student VALUES (NULL,‘李四‘,18,‘女‘,2,170); INSERT INTO my_student VALUES (NULL,‘王五‘,19,‘女‘,2,165); INSERT INTO my_student VALUES (NULL,‘赵六‘,25,‘男‘,3,190); INSERT INTO my_student VALUES (NULL,‘田七‘,14,‘女‘,1,155); INSERT INTO my_student VALUES (NULL,‘王八‘,19,‘男‘,3,160); INSERT INTO my_student VALUES (NULL,‘陈九‘,26,‘男‘,NULL,195);
create view 视图名字 as select 语句; -- select 语句可以是普通查询;可以是连接查询;可以是联合查询;可以是子查询
CREATE VIEW v1 AS SELECT * FROM my_student;
CREATE VIEW v2 AS SELECT * FROM my_class;
CREATE VIEW v3 AS SELECT * FROM my_student AS s LEFT OUTER JOIN my_class AS c ON s.c_id = c.id ;
为什么?我们知道两张表都有id字段,而我们又知道的是视图是有结构但没结果的虚拟表,既然它是虚拟表,怎么可能一张表有两个相同的字段呢?
CREATE VIEW v3 AS SELECT s.*,c.c_name,c.room FROM my_student AS s LEFT OUTER JOIN my_class AS c ON s.c_id = c.id ;
SELECT * FROM v1;
SELECT * FROM v2;
SELECT * FROM v3;
alter view 视图名字 as 新的select语句;
ALTER VIEW v1 AS SELECT id,NAME,age,gender FROM my_student;
SELECT * FROM v1;
drop view 视图名字;
CREATE VIEW v4 AS SELECT * FROM my_student; SHOW TABLES;
DROP VIEW v4; SHOW TABLES;
INSERT INTO v3 VALUES (NULL,‘呵呵‘,50,‘女‘,1,180,‘java002班‘,‘C05‘);
-- 给学生增加学号 ALTER TABLE my_student ADD number VARCHAR(5) NOT NULL AFTER id ; -- 修改学号 UPDATE my_student SET number = ‘001‘ WHERE id =1; UPDATE my_student SET number = ‘002‘ WHERE id =2; UPDATE my_student SET number = ‘003‘ WHERE id =3; UPDATE my_student SET number = ‘004‘ WHERE id =4; UPDATE my_student SET number = ‘005‘ WHERE id =5; UPDATE my_student SET number = ‘006‘ WHERE id =6; UPDATE my_student SET number = ‘007‘ WHERE id =7;
-- 单表视图插入:视图不包含所有不允许为空字段(学号) INSERT INTO v1 VALUES (NULL,‘张三丰‘,120,‘男‘);
SELECT * FROM v2;
SELECT * FROM my_class;
INSERT INTO v2 VALUES(NULL,‘C++007班‘,‘D13‘);
SELECT * FROM v2;
SELECT * FROM my_class;
SELECT * FROM v3;
DELETE FROM v3 WHERE id = 7;
DELETE FROM v2 WHERE id = 4;
SELECT * FROM v2;
SELECT * FROM v3;
UPDATE v3 SET c_id = 1 WHERE id = 7;
SELECT * FROM v3;
-- 视图:age字段限制更新 CREATE VIEW v4 AS SELECT * FROM my_student WHERE age >20 WITH CHECK OPTION; -- 表示视图的数据来源都是年龄大于20岁:where age > 20 -- -- with check option:决定通过视图进行数据更新的时候,不能将已经得到的数据 age > 20 改成小于20 的
SELECT * FROM v4;
UPDATE v4 SET age = 18 WHERE id = 4; --将视图可以查询到的改成小于20
UPDATE v4 SET age = 30 WHERE id = 1;
SELECT * FROM my_student;
-- 不使用视图 SELECT * FROM (SELECT * FROM my_student m ORDER BY m.`height` DESC) temp GROUP BY temp.c_id;
-- 不使用视图 SELECT * FROM my_student WHERE height IN ( SELECT MAX(height) FROM my_student m GROUP BY m.`c_id` );
-- 使用视图 CREATE VIEW v5 AS SELECT * FROM my_student m ORDER BY m.height DESC; SELECT * FROM v5 GROUP BY c_id;
create algorithm=指定算法 view 视图名字 as select语句;
-- 使用视图 CREATE ALGORITHM=TEMPTABLE VIEW v5 AS SELECT * FROM my_student m ORDER BY m.height DESC; SELECT * FROM v5 GROUP BY c_id;
CREATE TABLE my_isam( id INT )CHARSET utf8 ENGINE = MYISAM;
select */字段 into outfile ‘文件所在路径‘ from 数据源; --前提外部文件不存在
SELECT * INTO OUTFILE ‘e:/a.txt‘ FROM my_student;
LOAD DATA INFILE ‘文件所在路径‘ INTO TABLE 表名;
LOAD DATA INFILE ‘e:/a.txt‘ INTO TABLE my_student;
mysqldump -uroot -proot test > e:test.sql
mysql -uroot -proot 数据库名字 < 备份文件目录
source 备份文件所在路径
【第八章】
-- 创建一个账户表 CREATE TABLE my_account( id int primary key auto_increment, number CHAR(16) NOT NULL COMMENT ‘账户‘, NAME VARCHAR(20) NOT NULL COMMENT ‘姓名‘, money DECIMAL(10,2) DEFAULT 0.0 COMMENT ‘账户余额‘ ); -- 插入数据 INSERT INTO my_account VALUES (null,‘0000000000000001‘,‘张三‘,1000); INSERT INTO my_account VALUES (null,‘0000000000000002‘,‘李四‘,2000);
-- 张三转账 UPDATE my_account SET money = money - 1000 WHERE NAME = ‘张三‘;
-- 事务操作:1李四账户减少1000 UPDATE my_account SET money = money -1000 WHERE NAME = ‘李四‘;
SELECT * FROM my_account;
我们在开启一个客户端,会发现如下的状况。
-- 事务操纵:2张三账户增加1000 UPDATE my_account SET money = money +1000 WHERE NAME = ‘张三‘; SELECT * FROM my_account;
我们如果再开启一个客户端,会发生如下状况
-- 提交事务 COMMIT;
当提交完事务的时候,我们会发现再开启一个客户端,两边的数据是一样的。
-- 开启事务 START TRANSACTION; -- 事务处理1:张三发工资 UPDATE my_account SET money = money + 10000 WHERE NAME = ‘张三‘; -- 设置回滚点 SAVEPOINT sp1; -- 银行扣税 UPDATE my_account SET money = money - 10000 * 0.5 WHERE NAME = ‘李四‘; -- 回滚到回滚点 ROLLBACK TO sp1; -- 继续给张三扣税 UPDATE my_account SET money = money - 10000 * 0.5 WHERE NAME = ‘张三‘; -- 事务提交 COMMIT;
SHOW VARIABLES LIKE ‘autocommit‘;
SET autocommit = off;
-- 查看所有系统变量 SHOW VARIABLES;
select @@version,@@autocommit;
set 变量 = 值;
set global 变量名 = 值;
set @变量 = 值;
slect @变量;
select @变量名 := 字段名 from 数据源;-- 从字段中取值赋给变量名
select 字段名 from 数据源 [where 条件] into 变量列表
SELECT NAME FROM my_account WHERE id = 1 INTO @name; SELECT @name;
-- 临时修改语句结束符 DELIMITER 自定义符号:后续代码中只有碰到自定义符号才算结束 CREATE TRIGGER 触发器名字 触发时间 事件类型 ON 表名 FOR EACH ROW BEGIN -- 代表左大括号 开始 -- 里面就是触发器的内容:每行内容都必须使用;结束 END -- 代表右大括号 结束 -- 语句结束符 自定义符号 -- 将邻水修改修正过来 DELIMITER ;
CREATE TABLE goods( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) NOT NULL, price DECIMAL(10,2) DEFAULT 1, inv INT COMMENT ‘库存数量‘ ); INSERT INTO goods VALUES (NULL,‘iphone6‘,2680,100); INSERT INTO goods VALUES (NULL,‘iphone6s‘,2880,100); CREATE TABLE `order`( id INT PRIMARY KEY AUTO_INCREMENT, g_id INT NOT NULL COMMENT ‘商品id‘, g_number INT COMMENT ‘商品数量‘ );
-- 触发器:订单生成一个,商品库存减少一个 -- 临时修改语句结束符 DELIMITER / CREATE TRIGGER after_order AFTER INSERT ON `order` FOR EACH ROW BEGIN UPDATE goods SET inv = inv -1 WHERE id = 2; END -- 结束触发器 /
-- 修改临时语句结束符 DELIMITER ;
show triggers like ‘pattern‘;
show create trigger after_order;
SELECT * FROM goods;
INSERT INTO `order` VALUES (NULL,1,2);
SELECT * FROM goods;
drop trigger 触发器名字;
DELIMITER $$ CREATE TRIGGER `after_order` AFTER INSERT ON `order` FOR EACH ROW BEGIN UPDATE goods SET inv = inv -new.g_number WHERE id = new.g_id; END; $$ DELIMITER ;
SELECT * FROM goods;
INSERT INTO `order` VALUES (NULL,1,2);
原载:http://www.cnblogs.com/xuweiweiailixing/
标签:就会 子查询 数值 大型 维表 逻辑性 toc mysql 事务
原文地址:http://www.cnblogs.com/cyjs1988/p/7439851.html