-- 数据库入门笔记
-- 我来入个门
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
-- 我来入个门
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