标签:就会 子查询 数值 大型 维表 逻辑性 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