MySQL 使用详解

工具推荐:个人推荐使用 Navicat,非常好用,虽然是要付费的,但是破解版很多


1.创建数据库

如果是使用 Navicat 并且使用图形界面创建的话就不必多说了,说说用SQL语句创建的数据库吧

注意,数据库的编码类型很重要,最好在创建时就指定 UTF-8

如下创建名为  my_db 的数据库并且设置默认编码字符集为 UTF-8

CREATE DATABASE IF NOT EXISTS my_db default character set utf8 COLLATE utf8_general_ci;

 删除数据库则是很简单的 DROP DATABASE 数据库名;


2.创建数据表

注意,在日后使用中会了解到引擎的重要性,这里我推荐使用 InnoDB,但是如果不指定的话,创建出来的默认是 MyISAM

举例创建数据库

如下创建名为 t_user 的数据表,并且设置引擎为 InnoDB

create table t_user(
    id int(10) not null auto_increment,              
 // 设定 id 为 int 类型并且为自增
    name varchar(10) character set utf8,           // 设定name 为 字符类型,字符集为 utf-8
    age int(10),                                                    // 设定 age 为 int 类型
    primary key(id)                                            // 设定 id 为 主键

)engine=InnoDB;                                            // 设定 引擎为 InnoDB

 删除数据表则是很简单的 DROP TABLE IF EXISTS 表名;
数据表添加列:alter table 表名 add column 新列名 varchar(20) not null;

3.插入数据

在一张表中插入数据的 SQL 语法:

insert into 表名 (属性名1,属性名2,属性名3,...) values(值1,值2,值3,...)

举例 : 在刚刚创建的 t_user 表里插入 一条数据

insert into t_user (name,age) value('Lin',20)  

由于 id 设置了为自增的键,于是我们不给 id 的值它会自动填充 (从1开始)



4.更新数据

在一张表中更新某条数据的 SQL 语法:

update 表名 set 

            属性名1 = 值1,

            属性名2 = 值2,

            属性名3 = 值3,

            ...

            属性名n = 值n

            where 主键名 = 主键值;

举例:将刚刚表中的 id 为 1 的 name 值改为 tao

update t_user set

            name = 'tao'

            where id = 1;


最后的 where 语句决定了那条记录被修改,只要能确定出是哪些数据就可以,不一定是要用 id,也可以是查找 age = 20 的记录进行修改


4.删除数据

从一张表中删除某些记录的 SQL 语句:

DELETE FROM 表名 WHERE 主键名 = 主键值

举例:删除 age = 20 的记录

DELETE FROM t_user WHERE age = 20

如果有多条 age = 20 的记录,则全部 age = 20 的记录都会被删除 (删除后不可恢复)


5.查询数据

    一、单表查询

            SQL 语句:

            select * from 表名 (查询出一张表里的所有数据对象)

            select * from t_user where id = 1  (查询表里 id = 1 的对象)

            select name,age from t_user where id = 1 (查询表里 id = 1 的对象的 name 和 age 属性)

            select name as nnnn from t_user where age = 20 

            (查询表里 age = 20 的对象的name,并且将结果列定义为 nnnn) 结果如下

            

    二、连表查询

            SQL 语句:

            假设我们有 另一张 t_course 表 有属性 courseId ,courseName, 此时为 t_user 添加一列 courseId

            那么要通过 user 的 id 去查询他的 courseId 对应的 courseName 的时候就需要连表查询了

            t_user 表     t_course 表

            select * from t_user natural join t_course where t_user.courseId = t_course.courseId

            结果:    

               

             上面的语句中 用到了连表关键字 join,但是这里还用了 natural,自然连接,也就是连接之后把相同的列去掉,上面查询中两个表的相同列是 courseId,如果不用 natural join 的话查询结果是:

            

            还有指定结果列的写法

            select  a.name,  a.age,  b.courseName   from t_user as a,  t_course  as b  where a.courseId = b.courseId

            

            from t_user as a 把 t_user 用 a 来代替,简化 SQL 语句

    Group By 的使用(分组)

    假设有如下表,表名为 t_staff

  1. id  name  dept  salary  edlevel  hiredate   
  2. 1 张三 开发部 2000 3 2009-10-11  
  3. 2 李四 开发部 2500 3 2009-10-01  
  4. 3 王五 设计部 2600 5 2010-10-02  
  5. 4 王六 设计部 2300 4 2010-10-03  
  6. 5 马七 设计部 2100 4 2010-10-06  
  7. 6 赵八 销售部 3000 5 2010-10-05  
  8. 7 钱九 销售部 3100 7 2010-10-07  
  9. 8 孙十 销售部 3500 7 2010-10-06  

    那么我要查每个部门的最高薪水是多少

    SQL:

    SELECT dept, MAX(salary) AS MAXIMUM FROM t_staff GROUP BY dept

   解释一下上面的SQL语句:

    查询的结构包含 dept ,并且此时我将 t_staff 根据 dept 分组,分出的每个组 用 MAX() 函数找出每个组salary 最大值,然后将结果 命名为 MAXIMUM 且作为查询结果

    Group By 的用法一般都是,先分组,后计算,最后赋值

    函数的运用参照这篇博客 MySQL 函数 传送门



6.存储过程

    在 MySQL 数据库中存储过程很重要,非常影响查询速度

    SQL语句:

    ##无参数存储过程
    delimiter //
    create procedure myFist_proc()   ## 创建存储过程,函数名为 myFist_proc
    begin 
    select name from t_user where age = 20 ;

    end;//

    调用已写好的存储过程:

    call myFist_proc();

    注意:上面的 delimiter//  与 end 后面 的 // 是不可少的,它制定了存储过程的语句块,目的是为了防止 MySQL 的默认结束符号  ';' 对存储过程语句造成干扰


 ##带参数存储过程

    delimiter //

        create procedure myThr_proc(IN userId int,OUT userName varchar(20))   

        (IN 为传入参数,类型为 int,OUT为传出参数,类型为varchar)

        BEGIN
     #Routine body goes here...                                               
    select name INTO userName  FROM t_user where id=userId;                                             

        END;//

    调用已写好的存储过程:

    call myThr_proc(1,@userName);

    select @userName






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值