为了账号安全,请及时绑定邮箱和手机立即绑定

与MySQL的零距离接触

平然 学生
难度入门
时长 8小时29分
学习人数
综合评分9.67
950人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.5 逻辑清晰
  • 启动mysql服务 net start mysql
    查看全部
  • -D,--database=name    打开指定数据库

    --delimiter = name    指定分隔符

    -h,--host=name    服务器名称

    -p,--password[=name]    密码

    -P,--port=#    端口号

    --prompt=name    设置提示符

    -u,--user=name    用户名

    -V,--version    输出版本信息并且退出

    \D    完整的日期

    \d    当前数据库

    \h    服务器名称

    \u    当前用户


    显示当前服务器版本    SELECT VERSION();

    显示当前日期时间    SELECT NOW();

    显示当前用户    SELECT USER();


    关键字与函数名称全部大写

    数据库名称、表名称、字段名称全部小写

    SQL语句必须以分号结尾


    创建数据库

    CREATE DATABASE db_name CHARACTER SET


    查看全部
    0 采集 收起 来源:内容回顾

    2019-01-16

  • 存储引擎:

    MysQL可以将数据以不同的技术存储在文件(内存)中,这种技术就称为存储引擎。

    每一种存储引擎使用不同的存储机制、索引技巧、锁定水平,最终提供广泛且不同的功能。

    存储引擎包括:MyISAM;InnoDB;Memory;CsV;Archive。

    解决一些问题:当一个用户调用一个记录进行修改,同时有一个用户在查看该条记录,那么就可能出现有一个用户被迫退出或者查看记录的那个出现错误。这时触发并发控制:即保证数据的一致性和完整性。

    用锁系统来解决这类问题:共享锁和排他锁

    -共享锁(读锁) :在同一时间段内,多个用户可以读取同一个资源读取过程中数据不会发生任何变化。
    -排他锁(写锁) :在任何时候只能有一个用户写入资源,当进行写锁时会阻塞其他的读锁或者写锁操作。

    锁颗粒-表锁,是一种开销最小的锁策略。行锁是一种开销最大的锁策略。

    事务:【简单介绍的,高级课程会有更多介绍】

    外键:保证数据一致性

    索引:对数据的一行或者多行进行排序的一种结构


    查看全部
    1. 扩展
      Memory的存储限制是由内存的大小来决定。
      CSV存储引擎不支持索引。
      BlackHole:黑洞引擎,写入的数据都会消失,一般用做数据复制的中继。
      2.索引:普通索引、唯一索引、全文索引、btree索引、hash索引……
      3.最广泛:MyISAM/InnoDB
      MyISAM:适用于事务的处理不多的情况。
      InnoDB:适用于事务处理比较多,需要有外键支持的情况

    2. https://img1.sycdn.imooc.com//5b13e1a400010f2406630275.jpg

    查看全部
  • 1、外键:是保证数据一致性的策略

    2、索引:是对数据表中一列或多列的值进行排序的一种结构,如同书籍的目录,进行快速定位。


    查看全部
  • 1、并发控制:当多个连接对记录进行修改时保证数据的一致性和完整性;例如多个用户同时访问同一个数据库,数据库可能报错。解决此类问题的方法为锁操作。

    2、锁:共享锁和排他锁

    共享锁(读锁):在同一时间段内,多个用户可以读取统一资源,读取过程中数据不会发生任何变化;

    排他锁(写锁):在任何时候只能有一个用户写入资源,当进行写操作时会阻塞其他的读锁或者写锁操作。

    3、锁的力度:锁的颗粒

    只需要对需要修改的表或者记录加锁

    4、锁颗粒

    (1)表锁,是一种开销最小的锁策略;【针对整张表加锁,只需加一次锁】

    (2)行锁,是一种开销最大的锁策略


    查看全部
  • 1、查看数据表的创建命令

    show create table table_name;

    2、mysql可以将数据以不同的技术存储在文件(内存)中,这种技术就称为存储引擎。每种存储引擎提供的功能不同

    3、常见的存储引擎

    MyISAN;InnoDB;Memory;CSV;Archive


    查看全部
  • MySQL是这样执行的:sql命令——>mysql引擎——>分析语法正确——>编译成可识别的命令——>执行结果——>返回客户端

    如果我们省略掉分析和编译的过程那么可以节省很多。

    存储过程:是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元来处理。

    存储过程存储在过程之内,可以由应用程序调用执行,允许用户声明变量,以及流程控制;存储过程可以接受参数,也可以接受输出类型的参数;并且可以存在多个返回值。

    创建存储过程:

    CREATE
    [DEFINER = { user | CURRENT-USER }]
    PROCEDURE sp_name ([proc_parameter[,...]]) 
    [characteristic ...] routine_body


    proc_parameter:
    [IN | OUT I INOUT ] param_name type

    【解释】:

    IN:表示该参数值必须在调用存储过程时指定;(只进不出)

    OUT:表示该参数值可以被存储过程改变并且可以返回。(可出不进)

    INOUT:表示该参数的调用时指定,并且可以被改变和返回。

    过程体:合法的SQL语句;可以时任意的增删改查链接的SQL语句;如果有复合结构则使用BEGIN...END 语句;复合结构中可以声明,循环和调用。

    创造一个没有参数的存储过程:

    CREATE PROCEDURE sp1() SELECT VERSION();

    调用存储过程:

    CALL sp_name([parameter[,...]])

    CALL sp_name[()]

    如果没有参数那么用哪个调用都可以,但是如果由参数则只能用第一个。

    那么调用上面的存储过程:CALL sp1;(或者CALL sp1();)

    DELIMITER//

    >CREATE PROCEDURE removeUserById(IN id INT UNSIGNED)

    ->BEGIN

    ->DELETE FROM users WHERE id = id;

    ->END

    ->//

    ->DELIMITER ; 

    此处的id 存在歧义,因此应该进行修改。

    修改存储过程:

    ALTER PROCEDURE sp_name[characteristic ... ] COMMENT 'string' |{CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA} | SQL SECURITY {DEFINER | INVOKER }

    只能修改注释,当前的内容的类型。

    删除存储过程:

    DORP PROCEDURE [IF EXISTS] sp_name

    但是在这里只能用删除,而不能赢用修改

    DELETE PROCEDURE removeUserById;

    (重新构建一下数据表的id)


    DELIMITER//

    >CREATE PROCEDURE removeUserById(IN p_id INT UNSIGNED)

    ->BEGIN

    ->DELETE FROM users WHERE id = p_id;

    ->END

    ->//

    ->DELIMITER ; 

    删除id 不固定的记录吗,并且返回剩余的记录数;

      DELIMITER //

    CREATE PROCEDURE removeUserAndReturnUserNUMS(IN p_id  INT UNSIGNED,OUT userNums INT UNSIGNED)

    ->BEGIN

    ->DELETE FROM users WHERE id = p_id;

    ->SELECT count(id) FROM users INTO userNums;

    ->END

    ->//

    ->DELIMITER ;

    ->CALL removeUsersAndReturnUserNums(27,@nums);

    @nums 就是变量

    局部变量:DELETE/CLEAR,他的应用范围只在BEGIN...END 之间。也就是说在BEGIN ... END 结束后局部变量就消失了。

    用户变量:即SELECT ... INTO... / SET @i=9 ;他是跟MySQL的客户端链接的,也就是只对用户的客户端生效。


    【介绍一个ROW_COUNT() 函数,返回的是被影响的行数(增、删、改、更)】

    如:

    >DELIMITER //

    >CREATE PROCEDURE removeUserByAgeAndReturnInfos(IN p_age SMALLINT UNSIGNED,OUT deleteUsers SMALLINT UNSIGNED,OUT userCounts SMALLINT UNSIGNED)

    ->BEGIN

    ->DELETE FROM users WHERE age=p_age;

    ->SELECT ROW_COUNT() INTO deleteUsers;

    ->SELECT COUNT(id) FROM users INTO userCounts;

    ->END

    ->//

    >DELIMITER ;

    >CALL RemoveUserByAgeAndRetrunInfos(20,@A,@B);


    存储过程和自定义函数的区别:存储过程经常用于表的操作,针对性强;存储过程可以有多个返回值而函数只能有一个;存储过程通常独立完成,而函数作为其他SQL语句的组成部分完成。

    在实际过程中很少用函数;对于稍微复杂的经常用到的封装成存储过程


    查看全部
  • 1、ROW_COUNT():被影响的记录的总数

    2、创建过程:可以根据年龄删除用户,并且可以返回被删除的用户数和剩余的用户数

    DELIMITER //

    CREATE PROCEDURE wangning1(IN p_age smallint unsigned, OUT 

    dels smallint unsigned,OUT levs smallint unsigned)

    BEGIN

    DELETE FROM users where age=p_age;

    select row_count() into dels;

    select count(id) from users  into levs;

    END

    //

    常见完毕后,将//修改

    DELIMITER;


    查看全部
  • 存储过程的定义和调用:

    如果要修改存储过程的过程体:

    1- 必须先删除存储过程

    2- 再重建存储过程

    每次自定义函数或者存储过程之前:
    1- DELIMITER // 

    先把界定符重新定义下 不要用; 

    2- 定义完后,再把DELIMETER 改成;


    查看全部
  • 在存储过程的参数区:

    利用IN来修饰入参

    利用OUT来修饰返回值,可以有多个

    1、创建带有in和out参数类型的存储过程【输入+返回】

    delimiter //

    create procedure removeuserandreturnusernums(IN p_id int unsigned,

     OUT usernums int unsigned)

    BEGIN

    delete from users where id =p_id;

    select count(id) from users into usernums;

    END

    //

    DELIMITER;

    2、过程调用

    CALL removeuserandreturnusernums(27,@nums)【第二个参数不能为定值,只能为变量】

    select @nums;

    3、局部变量、用户变量

    局部变量只在begin和end之间的语句块有效;语句块运行完毕,局部变量消失;

    用户变量针对客户端有效



    查看全部
  • 8-5 MySQL 创建带有IN类型参数的存储过程

    2018-08-19

    创建带参数的存储过程

    delimitter //(修改结束标识)

    create procedure removeById(in pidn smallint unsigned)

    begin

    delete from user where p_id=pid;

    end

    //

    call removeById(5);


    查看全部
  • 1、创建存储过程

    CREATE

    [DEFINER={user|CURRENT_USER}]

    PROCEDURE sp_name([proc_paremeter[,…]])

    [characteristic…] routine_body

    proc_paremeter:

    [IN|OUT|INOUT]param_name type

    2、in:表示该参数的值必须在调用存储过程时指定;

    out:表示该参数的值可以被存储过程改变,并且可以返回;

    inout:表示该参数在调用时指定,并且可以被改变和返回

    3、特性

    COMMENT:注释

    CONTAINS SQL:包含sql语句,但不包含读或者写数据的语句;

    NOT SQL:不包含sql语句;

    READS SQL DATA:包含读数据的语句;

    MODIFIES SQL DATEA:包含写数据的语句;

    SQL SECURITY{DEFINER|INVOKER}:指明谁有权限连执行

    4、过程体

    (1)过程体由合法的sql语句构成;

    (2)过程体可以是任意的sql语句;

    (3)过程体如果为复合结构则使用begin_end语句;

    (4)复合结构可以包含声明、循环、控制结构

     

    查看全部
  • 自定义函数:

    必要条件:参数和返回值(也存在没有参数的函数,但是必有返回值)

    函数可以返回任何类型的值,同样可以接受这些类型的参数。(函数的参数和返回值之间没有内在的联系,参数的数量不能超过1024个。)

    创建自定义函数:CREATE FUNCTION funvtion_name RETURNS {STRING | INTEGER | REAL | DECIMAL} routine_boby

    解释:RETURNS返回值类型;routine_boby为函数体。

    关于函数体:合法的SQL语句;可以是SELECT和INSERT语句;如果为复合结构则使用BEGIN...END语句;复合体可以包含声明,循环,控制结构。

    (1)创建不带参数的函数:SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日 %H点:%i分:%s秒'); 每次使用的时候都比较麻烦,因此创建一个函数保存就可以随时调用就可以了。

    创建该函数:

    CREAT FUNCTION f1() RETURNS VARCHAR(30)

    ->RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日 %H点:%i分:%s秒');

    创建成功后,调用:SELECT f1();

    (2)创建含有参数的函数:

    CREAT FUNCTION f2(num1 SMALLINT UNSIGNED, num2 SMALLINT UNSIGNED)

    ->RETUENS FLOAT(10,2) UNSIGNED

    ->RETURN (num+num2)/2;

    SELECT f2(10,5);   求两个数的平均值

    (3)创建含有多个参数的函数:

    SHOW TABLES;   查看数据库的数据表

    DESC test;   查看数据表的结构

    SELECT * FROM test;   查看数据表中的记录

    CREAT FUNCTION adduser(username VARCHAR(20))

    ->RETURNS INT UNSIGNED

    ->RETURN

    ->INSERT test(username) VALUES(username);    这个返回一定是错误的,因为insert函数以;结尾,而一段程序也是以;结尾,所以存在一定的歧义,顾我们使用:DELIMITER //    就是以后程序结束都要以//为结束。(//可以为其他符号,为自定义)

    修正后:

    CREAT FUNCTION adduser(username VARCHAR(20))

    ->RETURNS INT UNSIGNED

    ->RETURN

    ->INSERT test(username) VALUES(username); 

    ->LAST_INSERT_ID();

    由于插入姓名后还要返回其ID,因此就有两条语句需要执行,所以是复合语句

    CREAT FUNCTION adduser(username VARCHAR(20))

    ->RETURNS INT UNSIGNED

    ->BEGIN

    ->INSERT test(username) VALUES(username); 

    ->RETURN LAST_INSERT_ID();

    ->END

    ->//

    此函数就创建成功了,

    我们可以调用:SELECT adduser('Zuo');->//

    那么就可以将结束字符改回来了:DELIMITER ; 

    实际中应用自定义函数并不多,主要在于了解。


    查看全部
  • 日期时间函数

    当前日期和时间NOW()

    当前日期CURDATE()

    当前时间CURTIME()

    日期变化DATE_ADD()

    日期差值DATEDIFF()

    日期格式化DATE_FORMAT()

    如:

    SELECT DURDATE()/DURTIME();   得到当前日期/得到当前时间   

    SELECT DATE_ADD('2018-11-22',INTERVAL -365 DAY);   得到的是107-11-22,这里面的DAY可以是WEEK,MONTH,YEAR等

    SELECT DATEDIFF('2017-11-22','2018-11-22');   得到的是日期的差值

    SELECT DATE_FORMAT('2018-11-22','%m/%d/&Y');   得到的就是22/11/2018

    日期函数是很少被用到的!!!!!

    信息函数:

    连接IDCONNECTION_ID()
    当前数据库DATEBASE()
    最后插入记录的ID号LAST_INSERT_ID()

    当前用户USER()

    版本信息VERSION()

    如:

    SELECT CONNECT_ID()/DATEBASE()/LAST_INSERT_ID()/USER()/VERSION();   返回的是链接的ID/当前数据库/最后插入的记录的ID号/当前的用户/当前的版本信息

    【复习:ALTER TABLE test ADD id ——给表添加字段的操作】

    聚合函数:()只能返回一个值

    平均值:AVG()

    计数:COUNT()

    最大/小值:MAX()/MIN()

    求和:SUM()

    SELECT AVG(goods_price)AS bieming FROM tdb_goods;   聚合函数都是这样的格式

    加密函数:

    加密:MD5()   多用于web开发

    密码的计算:PASSWORD()    修改用户的密码

    函数很少单独使用,所示嵌套的使用,而且可以用在数据表的相关字段上


    查看全部
    0 采集 收起 来源:MySQL 加密函数

    2019-01-13

举报

0/150
提交
取消
课程须知
要想学习本课程,你只需要知道数据库是个什么东东就足够了,是不是很easy?!
老师告诉你能学到什么?
1、MySQL安装与配置 2、数据类型 3、流程控制与运算符 4、DDL、DCL、DQL、DML 5、常用函数 6、表类型(存储引擎) 7、图形化工具

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!