第二阶段(后端) 25天 144学时
第3章 SQL高级语法(12)
[学习课时] 本章共需要学习 课时
[目的要求]
- 掌握数据库高级语法操作
- 掌握MySQL存储过程编程
- 掌握MySQL事件的编程
- 掌握MySQL触发器的使用
[教学内容]
ALTER语句
先创建一个数据库:
create database databasename DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
可以看见默认的字符集是UTF-8
- alter修改数据库默认字符集:
查看数据库的字符集
show create database databasename;
修改字符集为gbk:
alter database databasename DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
修改字符集为utf-8:
alter database databasename DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
- alter修改表数据引擎
使用数据库:
use databasename;
创建数据表:
create table if not exists tabename(
id int(5) primary key auto_increment,
name varchar(60) not null,
pswd varchar(60) not null
);
查看表的创建结构:
show create table tabename;
或者:
show table status from databasename where name='tabename';
可见表的数据引擎是MyISAM
修改数据引擎:
alter table tabename engine=innodb;
这样表的数据引擎已经变成InnoDB了
- alter添加表的列
alter table tabename add sex varchar(10) not null;
- alter修改表的列
alter table tabename modify column name varchar(255);
- alter删除表的列
alter table tabename drop column sex;
- alter修改索引
先创建索引:
create [UNIQUE|FULLTEXT|PRIMARY|SPATIAL] index indexname on tabename(name,pswd);
create index indexname on tabename(name,pswd);
show index from tabename;
修改索引应该先删除再创建:
alter table tabename drop index indexname;
alter table tabename add index indexname(name(8));
- alter修改外键
先创建新表:表类型tabletype
create table tabletype(
id int(5) primary key not null,
type varchar(60) not null,
status int(1) not null default 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
再给tabename表添加type_id字段:
alter table tabename add column type_id int(5) not null;
再添加外键:
alter table tabename add constraint foreignkeyname foreign key(type_id) references tabletype(id);
再查看表创建结构:
show create table tabename;
再查看外键:
show index from tabename;
alter删除外键:
alter table tabename drop foreign key foreignkeyname;
MySQL存储过程与函数
存储过程的优点:允许组件式编程,较快的执行速度,减少网络流量,安全
常用流程控制语句:
MySQL事件
- 创建事件任务
创建事件使用CREATE EVENT `database`.`even_name`语句
例句:
DELIMITER $$
-- SET GLOBAL event_scheduler = ON$$ -- 开起数据库公共事件执行器
DROP EVENT IF EXISTS `uniadmin`.`test`$$
CREATE EVENT `uniadmin`.`test`
ON SCHEDULE EVERY 1 SECOND
DO
BEGIN
UPDATE uni_menu SET `sort` = `sort`+1 WHERE `id`='1';
END$$
DELIMITER ;
- 开起事件任务
alter event `uniadmin`.`test` ON COMPLETION PRESERVE ENABLE;
- 关闭事件任务
alter event `uniadmin`.`test` ON COMPLETION PRESERVE DISABLE;
- 查看事件开起状态
SHOW VARIABLES LIKE '%sche%';
或者
SHOW GLOBAL VARIABLES LIKE 'event%';
- 关闭事件执行器
SET GLOBAL event_scheduler = 0;
MySQL触发器
[作业实验]
- 购物车系统数据模型设计