第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;

mysql卸载报错1606_MySQL相关推荐

  1. mysql卸载报错2503_MySQL之卸载重装等问题

    1.把mysql的bin目录添加到环境变量path中 2.admin运行cmd,输入: mysqld install MySQL --defaults-file="D:\install\ja ...

  2. mysql upgrade 报错_mysql_upgrade

    关于 mysql_upgrade的搜索结果 问题 WDCP面板升级组件脚本及方法 坛子里面安装WDCP面板的帖有很多,但WDCP的组件也是老了一些,今天哥就带大家飞. WDCP的Apache原则上是不 ...

  3. MySQL 安装报错的解决方法

    MySQL 安装报错的解决方法 前言 mysql 使用的是官网下载的安装包,mysql-installer-community-8.0.25.0.msi ,第一次安装时很顺利,因为某些原因要卸载重新安 ...

  4. Pycharm连接mysql数据库报错1130,1054

    Pycharm连接并创建mysql数据库报错 1.报错信息如下mysql.connector.errors.NotSupportedError: Authentication plugin 'cach ...

  5. mysql 主从报错

    mysql 主从报错 mysql> change master to  master_host='10.1.2.3', master_user='slave', master_password= ...

  6. java连服务器mysql报错_tomcat程序连接服务器mysql数据库报错

    tomcat程序连接服务器mysql数据库,报 错误,后来用java程序直接连接数据库,发现可以连得上,可以操作数据库, 在网上查了设置数据库连接等待时间(wait_timeout)设置,也没用. 奇 ...

  7. jmeter连接MySQL出错_MySQL数据库之jmeter连接mysql数据库报错Cannot create PoolableConnectionFactory...

    本文主要向大家介绍了MySQL数据库之jmeter连接mysql数据库报错Cannot create PoolableConnectionFactory  ,通过具体的内容向大家展现,希望对大家学习M ...

  8. ERROR 1136 (21S01): MySQL 的报错: 错误 1136(21S01): 列的计数 与 value 的计数 不相符 在第四行。

    MySQL 的报错: 错误 1136(21S01): 列的计数 与 value 的计数 不相符 在第四行. desc product+-----------+-------------+------+ ...

  9. mac mysql 报错_mac os mysql 配置?报错-问答-阿里云开发者社区-阿里云

    配置mysql appledeMacBook-Pro-2:~ apple$ /usr/local/mysql-5.7.15-osx10.11-x86_64/bin/mysqladmin -u root ...

最新文章

  1. NCEPU:线下组队学习周报(007)
  2. CISCO HSRP
  3. notepad++ 设置编辑区域背景色为黑色
  4. 2018java多线程面试题_2018JAVA面试题附答案
  5. 一个关于c++string比较的问题
  6. 1.Java之路(Java语言发展和概述以及特点)
  7. python split()方法_秘籍:10个Python字符串处理技巧(附代码)
  8. go Template 使用{{ end -}}的坑
  9. 让CSS兼容IE和Firefox的技巧集合
  10. 70. 爬楼梯(JavaScript 完全背包)
  11. 《深入理解TypeScript》读后感一篇【基础篇】
  12. 怎么用Android做一个信息管理系统,从零开始设计一个管理系统
  13. 卡BIN指的是发卡行识别码
  14. mescroll.js API汇总
  15. 介绍一个可以轻松下载病毒样本的数据库
  16. 2022-2028年中国数位板行业发展现状调查及市场分析预测报告
  17. 20X25 FCPX插件24种视频网站点赞订阅关注MG动画效果 Youtube Subscribe Generators
  18. 对象存储OSS之阿里云OSS介绍及开通
  19. C3P0反序列化链学习
  20. Linux服务 httpd

热门文章

  1. ns3统计时延和丢包率_端到端高丢包率小区优化思路
  2. 【狂神】Mysql学习
  3. 用DIV+CSS技术设计的个人电影网站-web前端网页制作课作业---电影介绍 5页
  4. Django 多方式实现跨域访问
  5. Unity 基础 - 预设
  6. Unit 6: Systems Administration 6.1 Systems Administration Static Addressing, RARP, BOOTP, DHCP
  7. ntp校时 linux,linux ntp校时服务器
  8. Flutter上线项目实战——Vap视频动画
  9. java mysql 心跳包_java socket及java心跳
  10. MD5 加密和解密