MySQL学习笔记2

Posted 冷雨落

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL学习笔记2相关的知识,希望对你有一定的参考价值。

表的相关操作

1 ALTER TABLE 表名 ADD 字段名 数据类型 约束 属性(字段) ; 1添加字段

2 ALTER TABLE 表名 DROP 字段名 ; 2 删除字段

3 ALTER TABLE 表名 MODIFY 字段名 数据类型 字符集; 3修改字段

4 ALTER TABLE 旧表名 RENAME TO 新表名 ; 4 更改表名

5 ALTER TABLE CHANGE 旧字段名 新字段名 数据类型 ; 5 更改字段名

6 SHOW VARIABLES LIKE “%char%” ; 6查看当前数据库

7 ALTER DATABASE 库名 CHARSET 字符集 7更改库的字符集

8 ALTER DATABASES 库名 engin=引擎 8更改引擎

9 SHOW CREATE TABLE 表名 ; 9查看字段

10 ALTER TABLE 表名 CHARSET 字符集 ; 10 更改表的字符集11mysql> DELETE FROM loaddata; #删除表的所有内容

外键

设置外键准备工作
1,查看主表的连接 字段、数据类型、字段字符集、表的字符集、存储引擎(设置外键字段)
2.建立从表或者查看从表字段、数据类型、字段字符集、表的字符集、存储引擎 与主表一致

3,添加外键

ALTER TABLE laborclub ADD CONSTRAINT fk_laboclou_teacher FOREIGN KEY (tno) REFERENCES reacher(tn)

库的导入

source f:\\MySQL\\mysqldump\\books.sql

库的导出

C:\\Users\\小赖>d:
D:>cd D:\\Wampserver\\wamp\\BIN\\mysql\\mysql5.6.12\\BIN
D:\\Wampserver\\wamp\\BIN\\mysql\\mysql5.6.12\\BIN>mysqldump -u root -p software2 books>“f:/MySQL/mysqldump/books.sql”
Enter PASSWORD:
D:\\Wampserver\\wamp\\BIN\\mysql\\mysql5.6.12\\BIN>
-A dao

表的导出

mysql> SELECT * FROM student INTO OUTFILE “f:/MySQL/outfile/student10.txt”
-> CHARSET utf8
-> FIELDS
-> TERMINATED BY “\\t” #制表符
-> LINES
-> TERMINATED BY “\\r\\t”; # 换行符

表的导入

LOAD DATA INFILE ‘F:/MySQL/infile/test.txt’ INTO TABLE loaddata
CHARSET utf8
FIELDS
TERMINATED BY “\\t” # 制表符一定要写上
IGNORE 1 LINES;

transaction事物

1 START TRANSACTION 1开启事物
2 ROLLBACK 2回滚事物
3 COMMIT 3 提交事物

view视图

1 CREATE VIEW view_degree; 1创建视图
2 SELECT * FROM view_degree; 2.调用视图
3 DROP VIEW view_degree; 3删除视图
4 SELECT * FROM information_schema.VIEWS; $ 查看所有视图
#例1:创建成绩>90的视图 view_degree,再在该视图中查询>95的成绩信息(sc)
CREATE VIEW view_degree
AS
SELECT * FROM sc WHERE degree>95;
#例2创建一个选修了”大学英语”的学生的学号,名字,系别,成绩的视图,视图名为view_English;
CREATE VIEW view_english
AS
SELECT student.sno,sname,sdept,degree FROM student,sc,course WHERE student.sno=sc.sno AND
sc.cno=course.cno AND cname=“大学英语”;

SELECT * FROM stuent; #(视图设计到多表连接)
SELECT * FROM sc;
SELECT * FROM course;
#例3创建视图
CREATE VIEW view_grils
AS
SELECT * FROM student;
# 插入记录
INSERT INTO view_grils
(sno,sname,ssex)
VALUES
(‘2020200111’,‘李媛媛’,‘女’);

procedure存储过程

1 creae PROCEDURE proce_sno(ssno VARCHAR(10) CHARSET gbk)
2 DROP PROCEDURE proce_sno; 2删除存储过程
3 CALL proce_sno(“2007010104”) 3调用存储函数
4 SHOW CREATE PROCEDURE proce_sno; 4查看存储过程
5 SHOW PROCEDURE STATUS; 查看数据库所有的存储函数
#例1储存函数
#conat用法,创建一个存储过程根据输入的学号,读出该学生的所有选修课的平均分,如果
平均分不小于90分,显示:恭喜您“”名字,您的平均成绩为:如果平均分小90分显示很遗憾
“名字”,您的平均成绩为:“平均分”
DELIMITER //
CREATE PROCEDURE proce_sno(ssno VARCHAR(10) CHARSET gbk)
BEGIN
DECLARE avg_degree FLOAT;
DECLARE NAME VARCHAR(10) CHARSET gbk;
SELECT AVG(degree) INTO avg_degree FROM sc WHERE sno=ssno;
SELECT sname INTO NAME FROM student WHERE sno=ssno;
IF avg_degree>90 THEN
SELECT CONCAT(“恭喜你”,NAME,“您的平均成绩为:”,avg_degree) AS 成绩;
ELSE
SELECT CONCAT(“很遗憾”,NAME,“您的平均成绩为:”,avg_degree)AS 成绩;
END IF;
END //

function存储函数

1 CREATE FUNCTION func_lass(sno INT(10)) 创建存储函数

2 DROP FUNCTION func_class; 删除存储函数

3 SHOW CREATE FUNCTION func_class; 查看存储函数

#列2创建存储函数,根据输入学生的学号,返回该省的班级编号 #存储函数一定有返回值

DELIMITER //

CREATE FUNCTION func_saddress(ssno INT(10))

RETURNS VARCHAR(8) CHARSET utf8

READS SQL DATA

BEGIN

DECLARE dress VARCHAR(50) CHARSET utf8;

SELECT saddress INTO dress FROM student WHERE sno=ssno;

RETURN dress ;

END //

DELIMITER ;

#列二创建存储函数,求1到n的和

DELIMITER //

CREATE FUNCTION func_qiuhe(num INT)

RETURNS INT(10)

READS SQL DATA

BEGIN

DECLARE i INT DEFAULT 1;

DECLARE j INT DEFAULT 0;

WHILE i<num DO

SET j=j+i;

SET i=i+1;

END WHILE;

RETURN j;

END //

trigger触发器

1,SHOW TRIGGERS; 查看所有的触发器

2,DROP TRIGGER trg_update ; 删除触发器

#1建表

create table trade(

商品编号 int(10) primary key,

商品名称 varchar(10),

库存数量 int(10))charset utf8;

#2插入数据

insert into trade

values

(1,“小白兔”,5),

(2,“糖宝”,20),

(3,“小黄人”,100),

(4,“小胡巴”,30),

(5,“小娜扎”,60),

(6,“葫芦娃”,50),

(7,“皮卡丘”,200);

#3订单表indent

create table indent(

订单编号 int primary key auto_increment,

商品编号 int(10),

订单数量 int(10))charset utf8;

#4创建触发器

问题1:订单表(indent)中现有购买2号商品记录,购买了8件,

购买后,对trade表有什么影响?

#5插入数据触发器 问题1:订单表(indent)中现有购买2号商品记录,购买了8件,

delimiter //

create trigger trg_insert

after insert on indent

for each row

begin

update trade set 库存数量=库存数量-new.订单数量 where 商品编号=new.商品编号;

end //

delimiter ;

#6删除触发器 问题2 买家由于特殊原因要取消订单1,对trade表有什么影响?

delimiter //

create trigger trg_delete

after delete on indent

for each row

begin

update trade set 库存数量=库存数量+old.订单数量 where 商品编号=old.商品编号;

end //

delimiter ;

#7更改触发器 问题3 本来购买2号商品8件,但现在要增加到10件,对trade表有什么影响?

delimiter //

create trigger trg_update

after update on indent

for each row

begin

update trade set 库存数量=库存数量+old.订单数量-new.订单数量 where 商品编号=new.商品编号;

end //

delimiter ;

#更改触发器 问题3 原先订单数量购买7号商品100件,现在改为购买5号商品10件,触发器创建

#9插入记录

insert into indent

(商品编号,订单数量)

values

(2,8);

#10更改记录

update indent

set 商品编号=3,订单数量=50;

#11触发器before 分两步走 1.前 后

DELIMITER //

CREATE TRIGGER trg_4

BEFORE INSERT ON indent

FOR EACH ROW

BEGIN

SELECT 库存数量 INTO @num FROM trade WHERE 商品编号=new.商品编号; #1查看库存量

IF new.订单数量>@num THEN

SET new.订单数量=@num; # 2更改插入数据

END IF;

UPDATE trade SET 库存数量=库存数量-new.订单数量 # 3进跟新

WHERE 商品编号=new.商品编号;

END //

DELIMITER ;

#12题目1:

现有数据表trade和indent表(上课测试用的两张表),现在该商店限购,每件购买数量不

能超过20件,又考虑到实际的需求,购买数量也不能超过库存。请根据题目要求,创建一个触发器,

使得购买数量既不超过限购数量又不超过库存数量;

delimiter //

create trigger trg_insert

before insert on indent

for each row

begin

declare num int(4);

SELECT 库存数量 INTO num FROM trade WHERE 商品编号=new.商品编号;

IF num>20 THEN

if new.订单数量>20 then

set new.订单数量=20;

end if;

else

if new.订单数量>num then

set new.订单数量=num;

end if;

end if ;

update trade set 库存数量=库存数量-new.订单数量 where 商品编号=new.商品编号;

end //

delimiter ;

#13题目2

现有一个记录商品信息的商品表tb_dity,该表包含的字段有商品号(cno)、商品名(cname)、商品类型(ctype)、

产地(origin)、生产日期(birth)、价格(price)。

1.请创建一个名为tri_price的触发器,再插入新的商品记录时,能够根据商品的品名和产地自动设置商品的价格,

具体规则如下:若商品为上海的电视机,则价格设置为2800,其他商品价格的设置可为缺省。

DELIMITER $$

CREATE TRIGGER tri_price

BEFORE INSERT ON tb_dity

FOR EACH ROW

BEGIN

IF new.cname=“电视机” AND new.origin=“上海” THEN

SET new.price=2800;

END IF;

END $$

DELIMITER ;

#题目3

现有两个数据表职工表tb_employee和部门表tb_dept.

1.表的备份文件分别为tb_employee.sql和tb_dept.sql(在给你的文件夹当中),请将备份文件还原到数据库中.

Source 路径

2.设计一个名为tr_empt的触发器,完成的功能为:当删除部门表中某个部门的记录时,将职工表中该部门信息置空。

DELIMITER //

CREATE TRIGGER tr_empt

AFTER DELETE ON tb_dept

FOR EACH ROW

BEGIN

UPDATE tb_employee SET deptno=""

WHERE deptno=old.deptno;

END //

DELIMITER ;

3.测试该触发器的效果。

event事件===

#创建事件1

例1:创建一个事件lsj_ent,将员工表student的数据备份

到f:\\MySQL\\student.txt文件夹下;

delimiter //

create event lsj_event

on schedule every 1 minute

do

begin

select * from student into outfile “f:/MySQL/student.txt”

charset utf8

fields

terminated by “;”;

end //

DELIMITER //

例2:创建一个事件lsj_event2,2分钟后将员工表course的数据备份

到f:\\MySQL\\course.txt文件夹下;

#创建事件2

delimiter //

create event lsj_event2

on schedule at current_timestamp+interval 1 minute

on completion preserve

do

begin

select * from course into outfile “F:/MySQL/course.txt”

charset utf8;

end //

delimiter ;

1.事件创建 CREATE EVENT 事件名

2.select @@event_scheduler; 查看事件总开关

3.set global event_scheduler=1; 开启事件总开关

4.show events ; 查看事件

5.drop event lsj_event; 删除事件

6.alter event lsj_event disable; 停用事件

7.on completion preserve ; 事件处理后不会删除表

=index索引================

#创建创表索引1

create table lsj_index(

sno varchar(10) PRIMARY KEY comment “学号”,

nam varchar(10) comment “名字”,

age int(4),event_name``event_name1

INDEX lsj_index(sno(10)))CHARSET utf8;

#创建创表后索引2

alter table sshome add index lsj_index2(Id(18));

1.show index from sshome; 1.查看索引

2.alter table sshome drop index lsj_index2; 2删除索引

3.alter table sshome drop primary key; 3删除主键

以上是关于MySQL学习笔记2的主要内容,如果未能解决你的问题,请参考以下文章

Mysql学习笔记

vue视频学习笔记05

AngularJS入门学习笔记一

JSP学习笔记:JSP语法和指令

python学习笔记012——pdb调试

DOM探索之基础详解——学习笔记