第1章 初涉MySQL
1.1 MySQL文件
(1)MySQL目录结构
(2)MySQL配置向导文件(安装后配置时使用)
(3)MySQL配置文件(配置后改配置时使用)
主要配置:(默认安装为C盘,本人安装在D盘)
1.2基本命令
操作命令位置:
cmd:
在系统命令提示符执行
MySQL Command Line Client:
在MySQL命令行客户端执行
mysql>
, MySQL登录状态,以上两者内执行都可
- 启动服务:
cmd:net start mysql
停止服务:cmd:net stop mysql
- MySQL版本:
cmd:mysql -V
- MySQL登录:
-
cmd:mysql -uroot -p***(-P*** -h***)
-u 用户名 -p 密码 -P端口号 -h服务器名称 MySQL Command Line Client:Enter password:***
- MySQL退出:
mysql>exit
或mysql>quit
或mysql>\q
- 修改提示符:
cmd:mysql -uroot -p***(-P*** -h***)--prompt 提示符
-
mysql>prompt 提示符
含义提示符:
\D 完整日期 \d 当前数据库 \h 服务器名称 \u 当前用户
- 清屏:
cmd:cls
1.3常用命令及规范
注意:关键字、函数小写也可执行,但大写便于区分。
"{}"必写,“|”多选一,“[]”可选,
版本查看:
SELECT VERSION();
当前日期:SELECT NOW();
当前用户:SELECT USER();
创建数据库并规范编码格式:
CREATE{DATABASE|SCHEMA}[IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name;
数据库修改:
ALTER {DATABASE|SCHEMA} [db_name] [DEFAULT] CHARACTER SET [=] charset_name;
删除数据库:
DROP {DATABASE|SCHEMA} [IF EXISTS] db_name;
查看数据列表:
SHOW {DATABASES|SCHEMAS} [LIKE 'pattern'| WHERE expr] ;
查看警告信息:SHOW WARNINGS;
查看编码方式:SHOW CREATE DATABASE db_name;
第2章 数据类型与操作数据表
2.1 数据类型
2.2 数据表操作
2.2.1 操作
- 打开数据库:
USE 数据库名称;
显示当前打开的数据库:SELECT DATABASE();
- 创建数据表:
CREATE TABLE [IF NOT EXISTS] table_name( column_name data_type [NOT NULL] [AUTO_INCREMENT PRIMARY KEY] [PRIMARY KEY|KEY] [UNIQUE KEY] [DEFAULT *], //每行以“,”结尾 ... //最后一行不加“,” )
- 查看数据表创建命令(可查看引擎,编码格式等):
SHOW CREATE TABLE tb_name;
- 查看数据表列表:
SHOW TANLES [FEOM db_name] [LIKE 'pattern'|WHERE expr];
- 查看数据表结构:
SHOW COLUMNS FROM tb_name;
- 插入记录:
INSERT [INTO] tb_name [(col_name,...)] VALUES(val,...);
- 记录查找:
SELECT expr,... FROM tb_name;
- 删除某记录:
DELETE FROM tb_name WHERE expr;
2.2.2 约束
第3章 外键约束以及修改数据表
3.1 外键约束:
-
编辑数据表默认存储引擎
创建provinces(父表,id为参照列),users(子表,pid为外键列)
//创建provinces数据表 CREATE TABLE provinces( id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, pname VARCHAR(20) NOT NULL );
//创建users数据表 CREATE TABLE users( id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, username VARCHAR(20) NOT NULL, pid SMALLINT UNSIGNED, FOREIGN KEY (pid) REFERENCES provinces(id) );
注意:有外键的表为子表。-
验证—查询数据表索引:
3.1 provinces数据表内有一个索引——主键列
SHOW INDEXES FROM provinces //表格形式显示
SHOW INDEXES FROM provinces\G //网格形式显示
3.2 users数据表内有两个索引——主键列及外键列
SHOW INDEXES FROM users\G
注意:1)主键创建时自动创建索引。2)外键列自动创建索引。
SHOW CREATE TABLE users;
-
参照操作
以CASCADE(父表删除,子表自动对应删除)为例:
//创建users1数据表 CREATE TABLE users1( id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, username VARCHAR(20) NOT NULL, pid SMALLINT UNSIGNED, FOREIGN KEY (pid) REFERENCES provinces(id) ON DELETE CASCADE );
注意:
1)插入信息时先插父表(provinces)信息再插子表(users1)信息
2)外键列(users1.pid)的值不能超出参照列(provinces.id)值的范围
3)没有写入成功,id依然递增1
INSERT provinces(pname) VALUES('A');
INSERT provinces(pname) VALUES('B');
INSERT provinces(pname) VALUES('C');
INSERT users1(username,pid) VALUES('Tom',3);
INSERT users1(username,pid) VALUES('Rose',2);
INSERT users1(username,pid) VALUES('John',1);
DELETE FROM provinces WHERE id=3;
3.2 修改数据表
- 插入单列(FIRST:该列放于最前位置;AFTER col_name:该列放于某列之后;默认为最后位置):
ALTER TABLE tb_name ADD [COLUMN] col_name col_definition [FIRST|AFTER col_name];
- 添加多列(不能指定位置)
ALTER TABLE tb_name ADD [COLUMN] (col_name col_definition,...);
- 删除列
ALTER TABLE tb_name DROP [COLUMN] col_name;
- 主键约束
//添加主键约束 ALTER TABLE tb_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name);
//删除主键约束(因为只有一个主键所以不用指定名称) ALTER TABLE tb_name DROP PRIMARY KEY;
- 唯一约束
//添加唯一约束 ALTER TABLE tb_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...);
//删除唯一约束 ALTER TABLE tb_name DROP {INDEX|KEY} index_name
- 外键约束
//添加外键约束 ALTER TABLE tb_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name) REFERENCE refer_table(index_col_name);
//删除外键约束 ALTER TABLE tb_name DROP FOREIGN KEY fk_symbol;
注意:fk_symbol可通过SHOW CREATE TABLE tb_name;
查询数据表结构获得,例如:
- 添加/删除默认约束
ALTER TABLE tb_name ALTER [COLUMN] col_name {SET DEFAULT default_value|DROP DEFAULT};
- 修改列定义(定义/位置)
ALTER TABLE tb_name MODIFY [COLUMN] col_name col_defionition [FIRST|AFTER col_name];
- 修改列名称(名称/定义/位置)
ALTER TABLE tb_name CHANGE [COLUMN] old_col_name new_col_name col_defionition [FIRST|AFTER col_name];
- 数据表更名
// 一个数据表更名 ALTER TABLE tb_name RENAME [TO|AS] new_tb_name;
// 可多个数据表更名 RENAME TABLE tb_name TO new_tb_name [,tb_name2 TO new_tb_name2];
第4章 操作数据表中的记录
- 插入记录
//可插入多个记录 INSERT [INTO] tb_name [(col_name,...)] {VALUES|VALUE} ({expr|DEFAULT|NULL},...),(...),...;
//仅插入一个记录 INSERT [INTO] tb_name SET col_name = {exper|DEFAULT},..;
//将查询结果插入指定数据表 INSERT [INTO] tb_name [(col_name,...)] SELECT ...;
- 更新记录
//单表更新(where省略更新所有记录) UPDATE [LOW_PRIORITY] [IGNORE] tb_name SET col_name1 = {expr1|DEFAULT} [,col_name2 = {expr1|DEFAULT}]... [WHERE where_condition];
- 删除记录
//单表删除 DELETE FROM tb_name [WHERE where_condition];
- 查找记录
SELECT select_expr [,select_expr...][ FROM table_name [WHERE where_condition] [GROUP BY {col_name|position} [ASC|DESC],...]//查询结果分组 [HAVING where_condition]//分组条件(对部分做分组):条件为聚合函数(min,max,...)或出现在SELECT语句当中的字段 [ORDER BY {col_name|expr|position} [ASC|DESC],...]//分组结果排序 [LIMIT {[offset,] row_count|row_count OFFSET offset}]//限制结果返回数量 ]
第5章 子查询与连接(操作)
5.1子查询
CREATE TABLE IF NOT EXISTS tdb_goods( goods_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, goods_name VARCHAR(150) NOT NULL, goods_cate VARCHAR(40) NOT NULL, brand_name VARCHAR(40) NOT NULL, goods_price DECIMAL(15,3) UNSIGNED NOT NULL DEFAULT 0, is_show BOOLEAN NOT NULL DEFAULT 1, is_saleoff BOOLEAN NOT NULL DEFAULT 0 );
INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('R510VC 15.6英寸笔记本','笔记本','华硕','3399',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('Y400N 14.0英寸笔记本电脑','笔记本','联想','4899',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('G150TH 15.6英寸游戏本','游戏本','雷神','8499',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('X550CC 15.6英寸笔记本','笔记本','华硕','2799',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('X240(20ALA0EYCD) 12.5英寸超极本','超级本','联想','4999',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('U330P 13.3英寸超极本','超级本','联想','4299',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('SVP13226SCB 13.3英寸触控超极本','超级本','索尼','7999',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('iPad mini MD531CH/A 7.9英寸平板电脑','平板电脑','苹果','1998',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('iPad Air MD788CH/A 9.7英寸平板电脑 (16G WiFi版)','平板电脑','苹果','3388',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES(' iPad mini ME279CH/A 配备 Retina 显示屏 7.9英寸平板电脑 (16G WiFi版)','平板电脑','苹果','2788',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('IdeaCentre C340 20英寸一体电脑 ','台式机','联想','3499',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('Vostro 3800-R1206 台式电脑','台式机','戴尔','2899',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('iMac ME086CH/A 21.5英寸一体电脑','台式机','苹果','9188',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('AT7-7414LP 台式电脑 (i5-3450四核 4G 500G 2G独显 DVD 键鼠 Linux )','台式机','宏碁','3699',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('Z220SFF F4F06PA工作站','服务器/工作站','惠普','4288',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('PowerEdge T110 II服务器','服务器/工作站','戴尔','5388',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('Mac Pro MD878CH/A 专业级台式电脑','服务器/工作站','苹果','28888',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES(' HMZ-T3W 头戴显示设备','笔记本配件','索尼','6999',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('商务双肩背包','笔记本配件','索尼','99',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('X3250 M4机架式服务器 2583i14','服务器/工作站','IBM','6888',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('玄龙精英版 笔记本散热器','笔记本配件','九州风神',10000,DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES(' HMZ-T3W 头戴显示设备','笔记本配件','索尼','6999',DEFAULT,DEFAULT); INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('商务双肩背包','笔记本配件','索尼','99',DEFAULT,DEFAULT);
查询数据表记录:SELECT * FROM tdb_goods\G;
修改客户端编码方式:SET NAMES gbk;
注:服务器端不受影响,数据库的编码还是默认的。
-- 求所有电脑产品的平均价格,并且保留两位小数,AVG,MAX,MIN,COUNT,SUM为聚合函数
SELECT ROUND(AVG(goods_price),2) AS avg_price FROM tdb_goods;
-- 查询所有价格大于平均价格的商品,并且按价格降序排序
SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price > 5845.10 ORDER BY goods_price DESC;
-- 使用子查询来实现
SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price > (SELECT ROUND(AVG(goods_price),2) AS avg_price FROM tdb_goods) ORDER BY goods_price DESC;
-- 查询类型为“超记本”的商品价格
SELECT goods_price FROM tdb_goods WHERE goods_cate = '超级本';
-- 查询价格大于或等于"超级本"价格的商品,并且按价格降序排列
SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price = ANY(SELECT goods_price FROM tdb_goods WHERE goods_cate = '超级本') ORDER BY goods_price DESC;
注意:= ANY 或 = SOME 等价于 IN
SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price IN (SELECT goods_price FROM tdb_goods WHERE goods_cate = '超级本') ORDER BY goods_price DESC;
-- 创建“商品分类”表
CREATE TABLE IF NOT EXISTS tdb_goods_cates( cate_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, cate_name VARCHAR(40) NOT NULL );
-- 查询tdb_goods表的所有记录,并且按"类别"分组
SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;
-- 将分组结果写入到tdb_goods_cates数据表
INSERT tdb_goods_cates (cate_name) SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;
-- 通过tdb_goods_cates数据表来更新tdb_goods表
UPDATE tdb_goods INNER JOIN tdb_goods_cates ON goods_cate = cate_name SET goods_cate = cate_id;
-- 通过CREATE...SELECT来创建数据表并且同时写入记录
SELECT brand_name FROM tdb_goods GROUP BY brand_name;
CREATE TABLE tdb_goods_brands ( brand_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, brand_name VARCHAR(40) NOT NULL ) SELECT brand_name FROM tdb_goods GROUP BY brand_name;
-- 通过tdb_goods_brands数据表来更新tdb_goods数据表(错误)
UPDATE tdb_goods INNER JOIN tdb_goods_brands ON brand_name = brand_name SET brand_name = brand_id;
-- 正确写法:
UPDATE tdb_goods AS g INNER JOIN tdb_goods_brands AS b ON g.brand_name = b.brand_name SET g.brand_name = b.brand_id;
-- 查看tdb_goods的数据表结构
DESC tdb_goods;
-- 通过ALTER TABLE语句修改数据表结构
ALTER TABLE tdb_goods CHANGE goods_cate cate_id SMALLINT UNSIGNED NOT NULL, CHANGE brand_name brand_id SMALLINT UNSIGNED NOT NULL;
-- 分别在tdb_goods_cates和tdb_goods_brands表插入记录
INSERT tdb_goods_cates(cate_name) VALUES('路由器'),('交换机'),('网卡');
INSERT tdb_goods_brands(brand_name) VALUES('海尔'),('清华同方'),('神舟');
-- 在tdb_goods数据表写入任意记录
INSERT tdb_goods(goods_name,cate_id,brand_id,goods_price) VALUES('LaserJet Pro P1606dn 黑白激光打印机','12','4','1849');
5.2连接
-- 查询所有商品的详细信息(通过内连接实现)
SELECT goods_id,goods_name,cate_name,brand_name,goods_price FROM tdb_goods AS g INNER JOIN tdb_goods_cates AS c ON g.cate_id = c.cate_id INNER JOIN tdb_goods_brands AS b ON g.brand_id = b.brand_id\G;
-- 查询所有商品的详细信息(通过左外连接实现)
SELECT goods_id,goods_name,cate_name,brand_name,goods_price FROM tdb_goods AS g LEFT JOIN tdb_goods_cates AS c ON g.cate_id = c.cate_id LEFT JOIN tdb_goods_brands AS b ON g.brand_id = b.brand_id\G;
-- 查询所有商品的详细信息(通过右外连接实现)
SELECT goods_id,goods_name,cate_name,brand_name,goods_price FROM tdb_goods AS g RIGHT JOIN tdb_goods_cates AS c ON g.cate_id = c.cate_id RIGHT JOIN tdb_goods_brands AS b ON g.brand_id = b.brand_id\G;
-- 无限分类的数据表设计
CREATE TABLE tdb_goods_types( type_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, type_name VARCHAR(20) NOT NULL, parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0 );
INSERT tdb_goods_types(type_name,parent_id) VALUES('家用电器',DEFAULT); INSERT tdb_goods_types(type_name,parent_id) VALUES('电脑、办公',DEFAULT); INSERT tdb_goods_types(type_name,parent_id) VALUES('大家电',1); INSERT tdb_goods_types(type_name,parent_id) VALUES('生活电器',1); INSERT tdb_goods_types(type_name,parent_id) VALUES('平板电视',3); INSERT tdb_goods_types(type_name,parent_id) VALUES('空调',3); INSERT tdb_goods_types(type_name,parent_id) VALUES('电风扇',4); INSERT tdb_goods_types(type_name,parent_id) VALUES('饮水机',4); INSERT tdb_goods_types(type_name,parent_id) VALUES('电脑整机',2); INSERT tdb_goods_types(type_name,parent_id) VALUES('电脑配件',2); INSERT tdb_goods_types(type_name,parent_id) VALUES('笔记本',9); INSERT tdb_goods_types(type_name,parent_id) VALUES('超级本',9); INSERT tdb_goods_types(type_name,parent_id) VALUES('游戏本',9); INSERT tdb_goods_types(type_name,parent_id) VALUES('CPU',10); INSERT tdb_goods_types(type_name,parent_id) VALUES('主机',10);
-- 查找所有分类及其父类
SELECT s.type_id,s.type_name,p.type_name FROM tdb_goods_types AS s LEFT JOIN tdb_goods_types AS p ON s.parent_id = p.type_id;
-- 查找所有分类及其子类
SELECT p.type_id,p.type_name,s.type_name FROM tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON s.parent_id = p.type_id;
-- 查找所有分类及其子类的数目
SELECT p.type_id,p.type_name,count(s.type_name) AS children_count� FROM tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON s.parent_id = p.type_id GROUP BY p.type_name ORDER BY p.type_id;
-- 为tdb_goods_types添加child_count字段
ALTER TABLE tdb_goods_types ADD child_count MEDIUMINT UNSIGNED NOT NULL DEFAULT 0;
-- 将刚才查询到的子类数量更新到tdb_goods_types数据表
UPDATE tdb_goods_types AS t1 INNER JOIN ( SELECT p.type_id,p.type_name,count(s.type_name) AS children_count� FROM tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON s.parent_id = p.type_id GROUP BY p.type_name ORDER BY p.type_id ) AS t2 ON t1.type_id = t2.type_id SET t1.child_count = t2.children_count;
-- 复制编号为12,20的两条记录
SELECT * FROM tdb_goods WHERE goods_id IN (19,20);
-- INSERT ... SELECT实现复制
INSERT tdb_goods(goods_name,cate_id,brand_id) SELECT goods_name,cate_id,brand_id FROM tdb_goods WHERE goods_id IN (19,20);
-- 查找重复记录
SELECT goods_id,goods_name FROM tdb_goods GROUP BY goods_name HAVING count(goods_name) >= 2;
-- 删除重复记录
DELETE t1 FROM tdb_goods AS t1 LEFT JOIN (SELECT goods_id,goods_name FROM tdb_goods GROUP BY goods_name HAVING count(goods_name) >= 2 ) AS t2 ON t1.goods_name = t2.goods_name WHERE t1.goods_id > t2.goods_id;
第6章 运算符和函数
6.1 MySQL字符函数
FORMAT():2代表精确到小数点后两位。
TRIM():LEADING删除前导,TRALLING删除后导,BOTH或无删除前后导,无指定删除对象默认删除空格。
SUBSTRING():第一位为1而不是0。上面解释为:1.从第一位开始接两位。2.从第三位开始接完。3.从倒数第三位开始接完。4.不支持字符长度为负值。
LINK():返回1为真0为假。'%'表示任意个字符,'_'表示任意一个字符。查找字符中的‘%’,需要在‘%’前添加一个字符,然后用ESCAPE表示该字符后不需要解析,将之后的‘%’当做正常字符。
6.2 数值运算符与函数
IS NULL:NULL是NULL,空字符串‘’不为NULL。
6.3 日期时间函数
DATE_ADD():
- 其中“2014-3-12”可以写为“2014.3.12”,“2014,3,12”,"2014%3%12",“2014+3+12”,“14-3-12”,"140312‘’等,但不能写为“2014312”。
- 其中INTERVAL后可为正数也可为负数。
- 其中单位可为“DAY”,“WEEK”,“YEAR”等
DATEDIFF():前个时间减去后一个时间
DATE_FORMAT():
%M为英文月,%m为数字月;%D为英文简写日,%d为数字日;%Y为年份,%y为年份后两位;%H为24制时,%h为12制时;%i为分;%s为秒。
6.4 信息函数
LAST_INSERT_ID():
- 数据表中必须存在一个自增长其为主键的字段。
- 插入多条记录,显示的为第一个插入的ID。
6.5 聚合函数
6.6 加密函数
修改密码:
SET PASSWORD = PASSWORD('***');
第7章 自定义函数
7.1 自定义函数
自定义函数:用户自定义函数是一种对MySQL扩展的途径,其用法与内置函数相同。
两个条件:(1)参数;(2)返回值
自定义函数可以返回任意类型的值,同样可以接收这些类型的参数。
创建自定义函数:
CREATE FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL|...} routine_body
7.2 不带参数的自定义函数
CREATE FUNCTION f1() RETURNS VARCHAR(30) RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日 %H时%i分%s秒');
7.3 带参数的自定义函数
CREATE FUNCTION f2(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED) RETURNS FLOAT(10,2) UNSIGNED RETURN (num1+num2)/2;
删除函数:
DROP FUNCTION [IF EXISTS] function_name;
7.4 具有复合结构函数体的自定义函数
注:返回体需要执行多条命令,应写在BEGIN...END之间,此前默认分隔符需要修改。函数创建完成后再将默认分隔符修改回来。
修改默认分隔符为‘//’:DELIMITER //
第8章 MySQL存储过程
8.1 语法结构解析
8.2 不带参数的存储过程
CREATE PROCEDURE sp1() SELECT VERSION();
CALL sp1;
CALL sp1();
8.3 带有IN类型参数的存储过程
注:参数名不要与字段名相同。
8.4 带有IN和OUT类型参数的存储过程
INTO:将结果值传入到userNums
@:代表用户变量,对当前用户客户端生效
8.5 带有多个OUT类型参数的存储过程
得到产生变化的行数:SELECT ROW_COUNT();
8.6 存储过程与自定义函数的区别
第9章 MySQL存储引擎
9.1 相关知识点
9.1.1 并发处理
9.1.2 事务处理
注:需要将几个过程当整体看待
9.1.3 外键和索引
外键:是保证数据一致性的策略。
索引:是对数据表中的一列或多列的值进行排序的一种结构。
9.2 各存储引擎特点
- CSV存储引擎不支持索引。
- BlackHole:黑洞引擎,写入的数据都会消失,一般用于做数据复制的中继。
- MyISAM适用于事务的处理不多的情况。
- InnoDB适用于事务处理比较多,需要有外键支持的情况。
9.3 修改存储引擎的方法
- 通过修改MySQL配置文件实现
default-storage-engine = engine
- 通过创建数据表命令实现
CREATE TABLE table_name( ... ) ENGINE= engine;
- 通过修改数据表命令实现
ALTER TABLE table_name ENGINE [=] engine_name;
来源1:慕课网_与MySQL的零距离接触