MySQL

第1章 初涉MySQL

1.1 MySQL文件

(1)MySQL目录结构

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

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


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


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 数据类型

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 约束

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

3.1 外键约束:

  1. 编辑数据表默认存储引擎

  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 //表格形式显示


    SHOW INDEXES FROM provinces\G //网格形式显示

    3.2 users数据表内有两个索引——主键列及外键列
    SHOW INDEXES FROM users\G

    注意:1)主键创建时自动创建索引。2)外键列自动创建索引。
    SHOW CREATE TABLE users;

  4. 参照操作


    以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 修改数据表

  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;查询数据表结构获得,例如:

  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}]//限制结果返回数量 ]

第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():

  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”等

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

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

6.4 信息函数

LAST_INSERT_ID():

  1. 数据表中必须存在一个自增长其为主键的字段。
  2. 插入多条记录,显示的为第一个插入的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的零距离接触

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • 1、MySQL启动和关闭(安装及配置请参照百度经验,这里不再记录。MySQL默认端口号:3306;默认数据类型格式...
    强壮de西兰花阅读 642评论 0 1
  • mysql的查询、子查询及连接查询 一、mysql查询的五种子句 where(条件查询)、having(筛选)、g...
    时芥蓝阅读 666评论 0 3
  • 启动 mysql$ mysql -uroot -p -P3306 -h127.0.0.1-u ,--user=na...
    假装正在输入阅读 714评论 0 6
  • 简约时尚是网络比较流行的一句话,当然家居也不例外,也开始走向时尚简约的风格。 简约:简约其特点是简洁洗练,单纯明快...
    窗爸爸家居阅读 511评论 2 8
  • 现在找十本励志书,保证每一本都能提到马云这个人,马云催生了太多的成功学,而且养活了一大批作家和出版社。可是我今天不...
    李知一二阅读 332评论 1 1