MySQL

第1章 初涉MySQL

1.1 MySQL文件

(1)MySQL目录结构

MySQL_第1张图片

(2)MySQL配置向导文件(安装后配置时使用)

MySQL_第2张图片

(3)MySQL配置文件(配置后改配置时使用)

MySQL_第3张图片

主要配置:(默认安装为C盘,本人安装在D盘)


MySQL_第4张图片

1.2基本命令

操作命令位置:
cmd:在系统命令提示符执行
MySQL Command Line Client:在MySQL命令行客户端执行
mysql>, MySQL登录状态,以上两者内执行都可

  1. 启动服务:cmd:net start mysql
    停止服务:cmd:net stop mysql
  2. MySQL版本:cmd:mysql -V
  3. MySQL登录:
  1. cmd:mysql -uroot -p***(-P*** -h***)
    -u 用户名 -p 密码 -P端口号 -h服务器名称
  2. MySQL Command Line Client:Enter password:***
  1. MySQL退出:mysql>exitmysql>quitmysql>\q
  2. 修改提示符:
  1. cmd:mysql -uroot -p***(-P*** -h***)--prompt 提示符
  2. mysql>prompt 提示符
    含义提示符:
    \D 完整日期 \d 当前数据库 \h 服务器名称 \u 当前用户
  1. 清屏:cmd:cls

1.3常用命令及规范

语句规范

注意:关键字、函数小写也可执行,但大写便于区分。

"{}"必写,“|”多选一,“[]”可选,

  1. 版本查看:SELECT VERSION();
    当前日期:SELECT NOW();
    当前用户:SELECT USER();

  2. 创建数据库并规范编码格式:
    CREATE{DATABASE|SCHEMA}[IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name;

  3. 数据库修改:
    ALTER {DATABASE|SCHEMA} [db_name] [DEFAULT] CHARACTER SET [=] charset_name;

  4. 删除数据库:
    DROP {DATABASE|SCHEMA} [IF EXISTS] db_name;

  5. 查看数据列表:
    SHOW {DATABASES|SCHEMAS} [LIKE 'pattern'| WHERE expr] ;

查看警告信息:SHOW WARNINGS;
查看编码方式:SHOW CREATE DATABASE db_name;

第2章 数据类型与操作数据表

2.1 数据类型

MySQL_第5张图片
MySQL_第6张图片
MySQL_第7张图片
MySQL_第8张图片

2.2 数据表操作

2.2.1 操作

  1. 打开数据库:USE 数据库名称;
    显示当前打开的数据库:SELECT DATABASE();
  2. 创建数据表:
    CREATE TABLE [IF NOT EXISTS] table_name( column_name data_type [NOT NULL] [AUTO_INCREMENT PRIMARY KEY] [PRIMARY KEY|KEY] [UNIQUE KEY] [DEFAULT *], //每行以“,”结尾 ... //最后一行不加“,” )
  3. 查看数据表创建命令(可查看引擎,编码格式等):
    SHOW CREATE TABLE tb_name;
  4. 查看数据表列表:
    SHOW TANLES [FEOM db_name] [LIKE 'pattern'|WHERE expr];
  5. 查看数据表结构:
    SHOW COLUMNS FROM tb_name;
  6. 插入记录:
    INSERT [INTO] tb_name [(col_name,...)] VALUES(val,...);
  7. 记录查找:
    SELECT expr,... FROM tb_name;
  8. 删除某记录:
    DELETE FROM tb_name WHERE expr;

2.2.2 约束

MySQL_第9张图片
MySQL_第10张图片
MySQL_第11张图片
MySQL_第12张图片
MySQL_第13张图片
MySQL_第14张图片
MySQL_第15张图片
MySQL_第16张图片

第3章 外键约束以及修改数据表

MySQL_第17张图片

3.1 外键约束:

MySQL_第18张图片
  1. 编辑数据表默认存储引擎

    MySQL_第19张图片

  2. 创建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. 验证—查询数据表索引:
    3.1 provinces数据表内有一个索引——主键列
    SHOW INDEXES FROM provinces //表格形式显示

    MySQL_第20张图片

    SHOW INDEXES FROM provinces\G //网格形式显示
    MySQL_第21张图片

    3.2 users数据表内有两个索引——主键列及外键列
    SHOW INDEXES FROM users\G
    MySQL_第22张图片

    注意:1)主键创建时自动创建索引。2)外键列自动创建索引。
    SHOW CREATE TABLE users;
    MySQL_第23张图片

  4. 参照操作

    MySQL_第24张图片

    以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');
    MySQL_第25张图片

    INSERT users1(username,pid) VALUES('Tom',3);
    INSERT users1(username,pid) VALUES('Rose',2);
    INSERT users1(username,pid) VALUES('John',1);
    MySQL_第26张图片

    DELETE FROM provinces WHERE id=3;
    MySQL_第27张图片

    MySQL_第28张图片

3.2 修改数据表

  1. 插入单列(FIRST:该列放于最前位置;AFTER col_name:该列放于某列之后;默认为最后位置):
    ALTER TABLE tb_name ADD [COLUMN] col_name col_definition [FIRST|AFTER col_name];
  2. 添加多列(不能指定位置)
    ALTER TABLE tb_name ADD [COLUMN] (col_name col_definition,...);
  3. 删除列
    ALTER TABLE tb_name DROP [COLUMN] col_name;
  4. 主键约束
    //添加主键约束 ALTER TABLE tb_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name);
    //删除主键约束(因为只有一个主键所以不用指定名称) ALTER TABLE tb_name DROP PRIMARY KEY;
  5. 唯一约束
    //添加唯一约束 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
  6. 外键约束
    //添加外键约束 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;查询数据表结构获得,例如:
    MySQL_第29张图片

    MySQL_第30张图片
  7. 添加/删除默认约束
    ALTER TABLE tb_name ALTER [COLUMN] col_name {SET DEFAULT default_value|DROP DEFAULT};
  8. 修改列定义(定义/位置)
    ALTER TABLE tb_name MODIFY [COLUMN] col_name col_defionition [FIRST|AFTER col_name];
  9. 修改列名称(名称/定义/位置)
    ALTER TABLE tb_name CHANGE [COLUMN] old_col_name new_col_name col_defionition [FIRST|AFTER col_name];
  10. 数据表更名
    // 一个数据表更名 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章 操作数据表中的记录

  1. 插入记录
    //可插入多个记录 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 ...;
  2. 更新记录
    //单表更新(where省略更新所有记录) UPDATE [LOW_PRIORITY] [IGNORE] tb_name SET col_name1 = {expr1|DEFAULT} [,col_name2 = {expr1|DEFAULT}]... [WHERE where_condition];
  3. 删除记录
    //单表删除 DELETE FROM tb_name [WHERE where_condition];
  4. 查找记录
    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}]//限制结果返回数量 ]
    MySQL_第31张图片

    MySQL_第32张图片

第5章 子查询与连接(操作)

5.1子查询

MySQL_第33张图片

MySQL_第34张图片

MySQL_第35张图片

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;
注:服务器端不受影响,数据库的编码还是默认的。

MySQL_第36张图片

-- 求所有电脑产品的平均价格,并且保留两位小数,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;

MySQL_第37张图片

MySQL_第38张图片

-- 查询类型为“超记本”的商品价格
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

MySQL_第39张图片

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;

MySQL_第40张图片

-- 创建“商品分类”表
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;

MySQL_第41张图片
MySQL_第42张图片
MySQL_第43张图片

-- 通过tdb_goods_cates数据表来更新tdb_goods表
UPDATE tdb_goods INNER JOIN tdb_goods_cates ON goods_cate = cate_name SET goods_cate = cate_id;

MySQL_第44张图片

-- 通过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连接

MySQL_第45张图片

MySQL_第46张图片

MySQL_第47张图片

MySQL_第48张图片

MySQL_第49张图片

-- 查询所有商品的详细信息(通过内连接实现)
MySQL_第50张图片

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;

-- 查询所有商品的详细信息(通过左外连接实现)

MySQL_第51张图片

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;

-- 查询所有商品的详细信息(通过右外连接实现)

MySQL_第52张图片

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;
MySQL_第53张图片

MySQL_第54张图片

-- 无限分类的数据表设计
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);

MySQL_第55张图片

-- 查找所有分类及其父类
MySQL_第56张图片

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;
MySQL_第57张图片

-- 查找所有分类及其子类
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;

MySQL_第58张图片

-- 查找所有分类及其子类的数目
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;
MySQL_第59张图片

-- 为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);

MySQL_第60张图片

-- 查找重复记录
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字符函数

MySQL_第61张图片

MySQL_第62张图片



FORMAT():2代表精确到小数点后两位。







TRIM():LEADING删除前导,TRALLING删除后导,BOTH或无删除前后导,无指定删除对象默认删除空格。


MySQL_第63张图片



MySQL_第64张图片

SUBSTRING():第一位为1而不是0。上面解释为:1.从第一位开始接两位。2.从第三位开始接完。3.从倒数第三位开始接完。4.不支持字符长度为负值。



LINK():返回1为真0为假。'%'表示任意个字符,'_'表示任意一个字符。查找字符中的‘%’,需要在‘%’前添加一个字符,然后用ESCAPE表示该字符后不需要解析,将之后的‘%’当做正常字符。

6.2 数值运算符与函数

MySQL_第65张图片








MySQL_第66张图片

MySQL_第67张图片


IS NULL:NULL是NULL,空字符串‘’不为NULL。

6.3 日期时间函数

MySQL_第68张图片

DATE_ADD():

  1. 其中“2014-3-12”可以写为“2014.3.12”,“2014,3,12”,"2014%3%12",“2014+3+12”,“14-3-12”,"140312‘’等,但不能写为“2014312”。
  2. 其中INTERVAL后可为正数也可为负数。
  3. 其中单位可为“DAY”,“WEEK”,“YEAR”等
MySQL_第69张图片

DATEDIFF():前个时间减去后一个时间

MySQL_第70张图片

DATE_FORMAT():
%M为英文月,%m为数字月;%D为英文简写日,%d为数字日;%Y为年份,%y为年份后两位;%H为24制时,%h为12制时;%i为分;%s为秒。

6.4 信息函数

MySQL_第71张图片

LAST_INSERT_ID():

  1. 数据表中必须存在一个自增长其为主键的字段。
  2. 插入多条记录,显示的为第一个插入的ID。

6.5 聚合函数

MySQL_第72张图片

6.6 加密函数

MySQL_第73张图片

修改密码: SET PASSWORD = PASSWORD('***');

第7章 自定义函数

7.1 自定义函数

自定义函数:用户自定义函数是一种对MySQL扩展的途径,其用法与内置函数相同。
两个条件:(1)参数;(2)返回值
自定义函数可以返回任意类型的值,同样可以接收这些类型的参数。
创建自定义函数:
CREATE FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL|...} routine_body

MySQL_第74张图片

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 //

MySQL_第75张图片

MySQL_第76张图片

第8章 MySQL存储过程

MySQL_第77张图片

MySQL_第78张图片

8.1 语法结构解析

MySQL_第79张图片

MySQL_第80张图片

MySQL_第81张图片

MySQL_第82张图片

MySQL_第83张图片

8.2 不带参数的存储过程

CREATE PROCEDURE sp1() SELECT VERSION();

MySQL_第84张图片

CALL sp1;
CALL sp1();

8.3 带有IN类型参数的存储过程

MySQL_第85张图片

MySQL_第86张图片

注:参数名不要与字段名相同。

8.4 带有IN和OUT类型参数的存储过程

MySQL_第87张图片

INTO:将结果值传入到userNums

MySQL_第88张图片

@:代表用户变量,对当前用户客户端生效

8.5 带有多个OUT类型参数的存储过程

得到产生变化的行数:SELECT ROW_COUNT();

MySQL_第89张图片

MySQL_第90张图片

8.6 存储过程与自定义函数的区别

MySQL_第91张图片

第9章 MySQL存储引擎

MySQL_第92张图片

MySQL_第93张图片

9.1 相关知识点

9.1.1 并发处理


MySQL_第94张图片

MySQL_第95张图片

9.1.2 事务处理

MySQL_第96张图片

注:需要将几个过程当整体看待

MySQL_第97张图片

9.1.3 外键和索引

外键:是保证数据一致性的策略。
索引:是对数据表中的一列或多列的值进行排序的一种结构。

9.2 各存储引擎特点

MySQL_第98张图片
  • 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的零距离接触

你可能感兴趣的:(MySQL)