MySql 数据库入门笔记

        -- 数据库入门笔记
  -- 我来入个门
CREATE DATABASE db;
-- 使用数据库
USE db;

-- 创建表
CREATE TABLE t(
    tid DECIMAL(4,2)
);
INSERT INTO t VALUES(3);

-- 查询表
SELECT * FROM t;

DROP TABLE dd;
--id INT(6) UNSIGNED 说明id不能有负数
CREATE TABLE dd(
    id INT(6) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
    sname VARCHAR(20),
    sgender ENUM('男','女','保密'),
    PRIMARY KEY(id)
)ENGINE=MYISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

INSERT INTO dd VALUES(NULL,'赵刘保','男');
INSERT INTO dd VALUES(NULL,'小明','保密');

SELECT * FROM dd;

-- 查看数据库信息
SHOW DATABASES;

-- 建立数据库
 CREATE DATABASE aa;
 CREATE DATABASE `database`;
-- 判断数据库是否存在 如果不存在则建立该数据库,并且设置编码字符集为utf8
 CREATE DATABASE IF NOT EXISTS `aa` DEFAULT CHARACTER SET utf8;

-- 删除数据库
DROP DATABASE aa;
DROP DATABASE IF EXISTS `database`;

-- 修改数据库

ALTER DATABASE `aa`  DEFAULT CHARACTER SET gbk;
ALTER DATABASE `aa`  DEFAULT CHARSET utf8;


-- 建立数据库
CREATE DATABASE ff;
CREATE DATABASE IF NOT EXISTS `ff`;
CREATE DATABASE IF NOT EXISTS `ff` DEFAULT CHARACTER SET utf8;
CREATE DATABASE IF NOT EXISTS `ff` DEFAULT CHARSET SET gbk;

-- 使用数据库
USE ff;
USE `ff`;

-- 删除数据库
DROP DATABASE `ff`;
DROP DATABASE IF EXISTS `ff`;

-- 修改数据库的字符集
ALTER DATABASE `ff` DEFAULT CHARSET gbk;

-- 查看建立数据库的语句

SHOW CREATE DATABASE `ff`;

CREATE DATABASE `ff` /*!40100 DEFAULT CHARACTER SET gbk */

-- MySQL数据库的注释
-- (1)--
-- (2)/**/
-- (3)#


        -- 数据表的操作

-- 建立表
CREATE TABLE  person(


)ENGINE=INNODB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8;

USE ff;

CREATE TABLE t(i INT);

SHOW CREATE TABLE t;

CREATE TABLE emp(
    eid INT(6) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
    ename VARCHAR(10) NOT NULL,
    PRIMARY KEY (eid)
)ENGINE=MYISAM AUTO_INCREMENT=2014 DEFAULT CHARSET=utf8;

-- 批量删除表
DROP TABLE t,emp;

-- 修改表名
RENAME TABLE t1 TO student;
-- 等价
ALTER TABLE student RENAME t1;
ALTER TABLE student RENAME TO t1;

DESC student;

-- 修改列名
ALTER TABLE student CHANGE eid id INTEGER;
ALTER TABLE student CHANGE ename sname VARCHAR(30) NOT NULL;

-- 增加一列
ALTER TABLE student ADD score TINYINT ;
ALTER TABLE student ADD address VARCHAR(100) AFTER score;

-- 删除列
ALTER TABLE student DROP COLUMN score;
ALTER TABLE student DROP COLUMN address;

-- 修改表的字段数据类型
ALTER TABLE student MODIFY sid BIGINT UNSIGNED NOT NULL AUTO_INCREMENT;


DROP DATABASE aa;

DROP TABLE student;



        -- 数据表增删改查
CREATE TABLE student(
    sno INT(6) UNSIGNED ZEROFILL AUTO_INCREMENT NOT NULL,
    
    sname VARCHAR(20) NOT NULL,
    
    sbirthday DATETIME,
    
    saddress VARCHAR(50),
    
    sscore TINYINT UNSIGNED,
    
    PRIMARY KEY(sno)

)ENGINE=INNODB AUTO_INCREMENT=2000 DEFAULT CHARSET=utf8;

DESC student;



-- 插入数据
INSERT INTO student VALUES(NULL,'赵刘保','1995-01-14','湖北武汉',100);

INSERT INTO student VALUES(NULL,'赵刘保','1995-01-14','湖北武汉',100),(NULL,'赵刘保','1995-01-14','湖北武汉',100);

INSERT INTO student(sname,sbirthday,saddress,sscore)
SELECT sname,sbirthday,saddress,sscore FROM student;

INSERT student(sname,sscore) VALUES('Jack',80),('Andy',85);

REPLACE INTO `student`(sname,sscore) VALUES('Terry',90);

-- replace可以替换也可以插入
REPLACE INTO `student`(sno,sname,sscore) VALUES(2005,'Terry',90);

-- 修改数据
UPDATE `student` SET `sscore`=99 WHERE `sno`=2004;

-- 删除数据
DELETE FROM `student` WHERE `sno`=2003;
DELETE FROM `student`; -- 无条件删除所有数据
TRUNCATE TABLE `student`; -- 清空数据表的全部记录,auto_increment 从1开始(但是保留表结构)
SELECT * FROM student;

-- 使用数据库
USE `ff`;

-- 查询条件 != (不等于)、<>(不等于) 、= 、between...and (范围查询) 、not between...and
SELECT * FROM `student` WHERE `sscore`=100;

-- 模糊查询 like %
SELECT * FROM student WHERE sname LIKE '%保%';

-- % 不再是任意符号 因为条件是= 号
SELECT * FROM student WHERE sanme='%保';

-- in(x1,x2...xn)取符合条件的值

UPDATE `student` SET sscore=90 WHERE sno=2000;






             -- 聚合函数与分组查询

-- 常用聚合函数avg(), sum(), max(), min(),count()(统计个数)

-- 垮库查询的要求 只要写出数据库名.表名 即可
USE db;

SELECT * FROM ff.`student`;-- 跨库查询

USE ff;

SELECT * FROM student;

SELECT COUNT(*) FROM student;

-- 聚合函数主要用来统计和分析,配合group by 使用

SELECT COUNT(*) FROM student WHERE sscore>90;

SELECT AVG(sscore) AS '平均分' FROM student; -- 空值不参与运算
SELECT MAX(`sscore`) '最高分' FROM `student`;
SELECT MIN(`sscore`) 最低分 FROM `student`;

-- group by
SELECT `sname`,saddress AS '地区' ,COUNT(8) FROM student
WHERE saddress IS NOT NULL
GROUP BY `saddress`
HAVING COUNT(*)>4 -- having 为分组条件 必须跟在group by后面
ORDER BY COUNT(*) DESC;-- asc(升序)

-- union 的使用
-- eg:查出武汉和上海地区最高分学生的各项信息
SELECT * FROM student WHERE sscore IN(SELECT MAX(`sscore`) FROM student WHERE saddress='湖北武汉')
UNION
SELECT * FROM student WHERE sscore IN(SELECT MAX(`sscore`) FROM student WHERE saddress IS NULL);



-- 数据的高级查询和连接查询
CREATE TABLE teacher(
    tid INT(4) ZEROFILL UNSIGNED AUTO_INCREMENT,
    tname VARCHAR(20) NOT NULL,
    PRIMARY KEY(tid)
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

INSERT INTO teacher VALUES(NULL,'李老师'),(NULL,'张老师');
SELECT * FROM teacher;

CREATE TABLE stu(
    sid INT(4) ZEROFILL UNSIGNED AUTO_INCREMENT,
    sname VARCHAR(20) NOT NULL,
    score TINYINT UNSIGNED,
    sgender ENUM('男','女','保密'),
    smajor VARCHAR(30) DEFAULT '通信工程',
    tid INT,
    PRIMARY KEY(sid)
)ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
DROP TABLE stu;
INSERT INTO stu VALUES(NULL,'小明',80,'男',NULL,1);
INSERT INTO stu VALUES(NULL,'小红',82,'女',NULL,1);
INSERT INTO stu VALUES(NULL,'小张',85,'保密','软件工程',2);
-- 插入时可以使用默认值
INSERT INTO stu(sname,`score`,`sgender`) VALUES('小强',70,'男'),('小磊',90,'女');

SELECT * FROM stu;
UPDATE  stu SET smajor='通信工程' WHERE smajor IS NULL;
-- 多表查询(内连接)
SELECT s.`sid`,s.`sname`,t.`tname`
FROM stu s ,teacher t
WHERE s.`tid`=t.`tid`;-- 这时tid为null则查询不出来,所以使用外连接

-- 外连接 join、 left join ...on 、right join...on
SELECT s.`sid`,s.`sname`,t.`tname`
FROM stu s LEFT JOIN teacher t ON s.`tid`=t.`tid`;

-- 自连接(同一个表多次使用)



                             -- 表的约束
-- 跟据旧表,快速建立新表,只包括表的结构,不包括数据
USE ff;
CREATE TABLE tt LIKE stu;
SELECT * FROM TT;
-- 默认约束:default '男' default 18
-- 非空约束: not null
-- 主键约束: primary key(主键自带索引,一个表只能有一个主键)
-- 外键约束:foreign key references 要求使用外键约束的表,存储引擎必须是innodb
-- check 约束
-- 利用主键约束建立表
CREATE TABLE t1(
 tid INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
 tname VARCHAR(30),-- 变长字符串
)ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE t3(
 tid INT UNSIGNED AUTO_INCREMENT,
 tname VARCHAR(30),-- 变长字符串
 PRIMARY KEY(tid)
)ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


CREATE TABLE t4(
 tid INT UNSIGNED AUTO_INCREMENT,
 tname VARCHAR(30),-- 变长字符串
 CONSTRAINT mypk PRIMARY KEY(tid)-- mypk 约束名
)ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;



-- 利用符合主键建立表(复合主键的意思是只要有一个不重复就可以,复合主键约束实质上还是一个主键)
CREATE TABLE t2(
 tid INT UNSIGNED AUTO_INCREMENT ,
 tname VARCHAR(30),-- 变长字符串
 PRIMARY KEY(tid,tname)
)ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

-- 利用默认约束建立表
CREATE TABLE s(
    sid INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
    tname VARCHAR(30),
    tage INT UNSIGNED DEFAULT 18
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO s(sid, tname) VALUES(1,'zlb');
SELECT * FROM s;

-- mysql 系统时间函数
SELECT NOW();
SELECT CURDATE();
SELECT CURRENT_TIMESTAMP();-- 时间戳

CREATE TABLE s1(
    sid INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
    tname VARCHAR(30),
    tage INT UNSIGNED DEFAULT 18,
    tdate DATETIME DEFAULT NOW()
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO s1(sid, tname) VALUES(1,'zlb');
SELECT * FROM s1;

-- 利用check约束建表(check约束能识别但是mysql数据库不执行)
CREATE TABLE si(
    id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    sname VARCHAR(20),
    sage TINYINT UNSIGNED CHECK(age>18)
)ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO si(sage) VALUES(3);
SELECT * FROM si;

CREATE TABLE st(
    id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    sname VARCHAR(20),
    sage TINYINT UNSIGNED ,
    CONSTRAINT st_sage_ck CHECK(age>18)
)ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO st(sage) VALUES(3);
SELECT * FROM st;

DROP TABLE si,st,t1,t2,t3,t4,tt;
DROP TABLE s1,stu,s,emp;

-- 演示外键约束
USE db;
CREATE TABLE teacher(
    tid INT UNSIGNED NOT NULL AUTO_INCREMENT,
    
    tname VARCHAR(30) NOT NULL,
    
    KEY(tname),-- 建立表的时候同时在tname列建立索引
    
    PRIMARY KEY(tid) -- 当建立索引时必须要指明主键
    
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;-- 如果要使用外键则数据库的引擎必须为innodb
DROP TABLE teacher ;

INSERT INTO teacher VALUES(NULL,'张老师'),(NULL,'李老师'),(NULL,'赵老师');

SELECT * FROM teacher;

CREATE TABLE student(
    sid INT UNSIGNED NOT NULL AUTO_INCREMENT,
    sname VARCHAR(30) NOT NULL,
    tid INT UNSIGNED,
    PRIMARY KEY(sid),
    CONSTRAINT fk FOREIGN KEY (tid) REFERENCES teacher(tid) -- 建立外键 关联到teacher表
    -- CONSTRAINT fk FOREIGN KEY (tid) REFERENCES teacher(tid) ON DELETE CASCADE;-- on delete cascade级联删除
    -- constraint fk foreihn key(tid)  references theacher(tid) on delete set null -- 级联置空
)ENGINE=INNODB AUTO_INCREMENT=201421112001 DEFAULT CHARSET=utf8;

-- 修改表的字段数据类型
ALTER TABLE student MODIFY sid BIGINT UNSIGNED NOT NULL AUTO_INCREMENT;

INSERT INTO student VALUES(NULL,'张三',1),(NULL,'李四',2),(NULL,'王五',1),(NULL,'赵六',2)
USE db;
SELECT * FROM student ;

DELETE FROM teacher WHERE tid =3;
ROLLBACK;
SELECT * FROM teacher;
DELETE FROM teacher WHERE tid=2;-- Cannot delete or update a parent row: a foreign key constraint fails


        -- 索引的使用  
SHOW TABLES;-- 查看数据库中的所有表
SHOW  FULL COLUMNS FROM `student`;-- 查看数据表的所有列的详细信息
DESC student;-- 没有上一个函数全面

-- 增加主键
 SELECT * FROM t;
 DROP TABLE t;
 CREATE TABLE t(
    tid INT(10)
 );
ALTER TABLE t ADD CONSTRAINT PRIMARY KEY(tid);
ALTER TABLE t ADD CONSTRAINT pk PRIMARY KEY(tid);

-- 删除约束
ALTER TABLE t DROP PRIMARY KEY;

-- 索引:检索目录

-- 建立索引
CREATE INDEX ix ON teacher(tname DESC);
ALTER TABLE teacher ADD INDEX (tname DESC);

-- 删除索引
DROP INDEX ix ON teacher;
ALTER TABLE `teacher` DROP INDEX tname;

DESC teacher;

         -- 建表时建立索引

CREATE TABLE root(
    rid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,-- 主键会自动建立索引
    rname VARCHAR(40) NOT NULL UNIQUE,-- 自动建立唯一约束会自动建立唯一索引
    address VARCHAR(50) NOT NULL,
    rbook VARCHAR(20),
    KEY(rname),-- 建表时自动建立索引
    KEY(rbook)
    
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
DROP TABLE root;

-- pk 唯一且非空
-- uk 可以为空,但是不可以重复
-- fk 一个表的外键一般指向另一个表的主键或者唯一约束建,并且类型一致


             -- 常用函数
    -- length()函数
SELECT LENGTH('abc');
SELECT LENGTH('abc是');-- 返回字符的字节数
SELECT CHAR_LENGTH('abc');-- 返回字符的个数
-- 注意 utf8 编码中汉字是3个字节,gbk编码汉字是3个字节

SELECT * FROM student WHERE CHAR_LENGTH(sname)=2;-- 与
SELECT * FROM student WHERE sname LIKE '__';-- 表示的含义一样

-- 随机函数
SELECT RAND();-- 返回0~1之间的随机小数
SELECT ROUND(RAND());-- 返回0~1之间的随机整数
SELECT ROUND(RAND()*3+1);-- 返回0~4之间的随机整数

-- 随机查询出2条数据
SELECT * FROM student ORDER BY RAND() LIMIT 2;


-- 日期函数
-- 查看10天的会员记录
SELECT COUNT(*) FROM member WHERE regdate BETWEEN DATE_ADD(NOW(),INTERVAL-10 DAY) AND NOW();

SELECT DATE_ADD(NOW(),INTERVAL-10 DAY);-- 查看10天前的日期
SELECT NOW();-- 查看现在的日期

SELECT DATEDIFF(CURDATE(),'1995-2-13');-- 返回两个日期之间相差的天数

-- 格式化日期函数
SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日');

-- 格式化日期的运用
CREATE TABLE ss(
    sid INT NOT NULL,
    sname VARCHAR(20),
    sbirthday DATETIME
);
INSERT INTO ss VALUES(1,'小张','1995-01-14');
DELETE FROM ss WHERE sid=1;
SELECT * FROM ss;
INSERT INTO ss VALUES(1,'小张','1995-01-14 06:14:06'),(2,'小何','1883-11-8'),(3,'小猪','1996-04-13');
SELECT sid id ,sname AS '姓名' ,DATE_FORMAT(sbirthday,'%Y年%m月%d日')  出生年月 FROM ss;

 USE db;
 -- 返回两个对象之间的时间差(小时)
 SELECT TIMESTAMPDIFF(HOUR,'2014-09-01',NOW());
 -- 返回两个对象之间的时间差(分钟)
SELECT TIMESTAMPDIFF(MINUTE,'2017-08-17 9:00:00',NOW());
 -- 返回两个对象之间的时间差(天)
 SELECT TIMESTAMPDIFF(DAY,'2017-08-17 9:00:00',NOW());
 
 -- 返回某一天处于当年的第几周
 SELECT WEEKOFYEAR(NOW());
 
 -- 使用该函数可以在存储过程中使用 int unsigned 类型 而不必须使用datetime类型
 -- SELECT FROM_UNIXTIME() 将数字表达的日期转化为标准的 "yyyy-mm-dd h:i:s"
 SELECT FROM_UNIXTIME(137655100);
-- UNIX_TIMESTAMP() 将日期转化为int型
 SELECT FROM_UNIXTIME(UNIX_TIMESTAMP()), UNIX_TIMESTAMP();
 SELECT FROM_UNIXTIME(1417253607),FROM_UNIXTIME(1417253607,'%T');
 SELECT FROM_UNIXTIME(1417253607),FROM_UNIXTIME(1417253607,'%m月%d日');
 SELECT FROM_UNIXTIME(1417253607),FROM_UNIXTIME(1417253607,'%Y');
 
 -- 字符串连接函数
 SELECT CONCAT('姓名:',sname) FROM ss;-- 姓名:小何
 SELECT CONCAT('手机号:','15927030097');-- 手机号:15927030097
 SELECT CONCAT_WS('-','aa','bb',sname) FROM ss;-- aa-bb-小张
 SELECT * FROM ss;
 SELECT CONCAT_WS('-',sid,sname,sbirthday) FROM ss;-- 1-小张-1995-01-14 06:14:06
 
 -- 重复函数
 SELECT REPEAT('*',3);
 -- 空格函数
 SELECT CONCAT ('aaa',SPACE(5),'aaa');
 
 -- 字符串处理函数
 -- uper() 转换成大写 lower() 转换成小写
 SELECT UPPER('acd');
 SELECT LOWER('DD');
 -- 字符串截取函数
 SELECT sname, LEFT(sname,1) FROM ss;-- 从左开始截取一个
 SELECT sanme ,RIGHT(sname,2) FROM ss;-- 从右截取二个
 SELECT sname, MID(sname,2,1) FROM ss;-- 从第二个位置截取一个  
 
 
 -- ifnull函数的使用
 SELECT IFNULL(NULL,'保密');
 SELECT IFNULL('男','保密');
 
 -- if 函数的使用
 USE ff;
 SELECT * FROM student;
 
 SELECT sno, sname,sscore,IF(sscore>=90,'优秀',IF(sscore>=70,'良好',IF(sscore>60,'良好','补考'))) '等级' FROM student;
 
 -- 注意:需要更新的数据一般不写死
 
          -- 密文函数
 -- md5 32位,sha1 40位 他们都是单向加密
 SELECT MD5('admin'),SHA1('admin');
 
 PASSWORD('aaa');-- 返回41位密文字符串
 
 -- uuid 36位16进制的全球唯一字符串
 SELECT UUID(),LENGTH(UUID());
 
 -- format()函数
 SELECT FORMAT(12345,6189);
 /*
 将数字X 的格式写为'#,###,###.##',以四舍五入的方式保留小数点后 D 位,
  并将结果以字符串的形式返回。若  D 为 0, 则返回结果不带有小数点,或不含小数部分。

 */
 
 -- 将ip 地址转化为数字 同时也能把数字转换为ip
 SELECT INET_ATON('192.168.1.1');
 
 
    -- 存储过程(没有返回值和oracle一样):编译后在服务器上运行,速度比较快
   /*
    存储过程(Stored Procedure)是在大型数据库系统中,
    一组为了完成特定功能的SQL 语句集,存储在数据库中,
    经过第一次编译后再次调用不需要再次编译,
    用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
    存储过程是数据库中的一个重要对象。  
   */
   USE ff;
   -- 创建一个简单的存储过程
   DELIMITER // -- 将MySql的结束符设置为//,避免与存储过程中的SQL语句的结束符号互相冲突
        -- DELIMITER 与结束符之间一定要有一个空格
   CREATE PROCEDURE pro()
   BEGIN
    SELECT * FROM student;
END//

DELIMITER //

-- 创建一个使用变量的存储过程
DELIMITER //
CREATE PROCEDURE mypro()
BEGIN
  DECLARE id1 INT DEFAULT 1;
  SELECT * FROM student WHERE sid=id1;
END//
-- 创建一个带参数的存储过程mypro([in/out/inout],参数名,参数类型)

-- 使用存储过程
CALL pro();

-- 查看数据库的存储过程信息
SHOW PROCEDURE STATUS WHERE Db='ff';
   
   
   
                           -- 函数
  -- 创建函数
  DELIMITER //
  CREATE FUNCTION lever(score TINYINT)
  RETURNS VARCHAR(30)
  BEGIN
    DECLARE lve VARCHAR(30);
    CASE
    WHEN score>=90 THEN SET lve='优秀';
    WHEN score>=70 THEN SET lve='良好';
    WHEN score>=60 THEN SET lve='及格';
    ELSE SET lve='补考';
    END CASE;
    RETURN lve;
   
  END//
  DELIMITER ;
  -- 调用函数
  SELECT sname,sscore,lever(sscore) FROM student;
 
  -- 删除函数
  DROP FUNCTION lever;
 
 
        -- 触发器的使用
 -- 创建触发器
 USE db;
 SELECT * FROM ss;
 SELECT * FROM student;
 SELECT * FROM ff.`student`;
 SHOW CREATE TABLE ff.`student`;
 USE ff;
 CREATE TABLE studebtbac LIKE student;
 
CREATE TABLE `studentbac` (
  `sno` INT(6) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
  `sname` VARCHAR(20) NOT NULL,
  `sbirthday` DATETIME DEFAULT NULL,
  `saddress` VARCHAR(50) DEFAULT NULL,
  `sscore` TINYINT(3) UNSIGNED DEFAULT NULL,
  PRIMARY KEY (`sno`)
) ENGINE=INNODB AUTO_INCREMENT=2009 DEFAULT CHARSET=utf8;
 
  DELIMITER //
  CREATE TRIGGER tt1 AFTER INSERT ON student FOR EACH ROW
  BEGIN
    DECLARE ss TINYINT ;
    SET ss=`student`.`sscore`;
    IF ss<60 THEN
          INSERT INTO `studentbac` VALUES(student.`sno`,student.`sname`,student.`sbirthday`,student.`saddress`);
    END IF;
END//


INSERT INTO student(sname,sscore) VALUES('MM',40),('And',45);
INSERT INTO ff.`student`VALUES(NULL,'赵刘保','1995-01-14','湖北武汉',30);
    
    -- 删除触发器
DROP TRIGGER tt1;

SELECT * FROM `studentbac`;
SELECT * FROM student;
DELETE FROM student WHERE sno>2008;

                
                
                -- MySQL事件
  -- 事件:在特定的时间自动执行数据库语句
  SHOW VARIABLES LIKE 'event_scheduler'; -- event_scheduler    OFF
 
  SET GLOBAL event_scheduler=1;-- 开启事件功能
  SET GLOBAL event_scheduler=0;-- 关闭事件功能
  SET GLOBAL event_scheduler=ON;
  SET GLOBAL event_scheduler=off;
 
  -- 创建事件
  CREATE EVENTS

猜你喜欢

转载自blog.csdn.net/zhaoliubao1/article/details/79553172