MySQL的使用

数据库的基本操作

显示已有数据库:show databases;

创建数据库:create database 数据库名称;

示例:create database 数据库名称 default charset utf8 collate utf8_general_ci;(红色标记是字符集设置)

使用数据库:use 数据库名称;

删除数据库:drop database 数据库名称;

 

数据表的基本操作

显示已有的表:show tables;

显示表结构:desc 表名;

创建表:create table 表名 (字段1 类型,字段2 类型(长度)。。。。。)

删除表:drop table 表名;

删除表内容:delete from 表名; 带有自增的会记住之前的位置

删除表内容:truncate table 表名; #带有自增,回到原始1

 

数据库与表之间的关系

test数据库下的tb1表:test.tb1

test数据库下的所有表:test.*

所有数据库下的所有表:*.*

除grant外的所有权限 all privileges

无访问权限   usage

 

用户管理

查看已存在的用户信息:进入mysql-->show databases;(显示存在的数据库)--->use mysql(使用mysql数据库)--->desc user;(查看user表结构)--->(举例)select Host,User from user;

  • 创建用户:create user '用户名'@'IP地址' identified by '密码';

  • 修改用户:rename user '用户名'@'IP地址' to '新用户名'@'IP地址';

  • 删除用户:drop user '用户名'@'IP地址';

  • 修改用户密码:set password for '用户名'@'IP地址' = Password('新密码');

 

权限管理

查看权限:show grants for '用户名'@'IP地址';

授权:grant 权限 on 数据库.表 to '用户'@'IP地址';

示例:grant select on test.map to wang@localhost;(授予数据库test中的表map查询权限)

1.首先查看权限(usage表示没有权限)

2.授予权限

3.再次查看权限,就会显示授予的权限

取消权限:revoke 权限 on 数据库.表 from '用户'@'IP地址';

示例:revoke select on test.map to wang@localhost;(取消数据库test中的表map查询权限)

 

表内容操作(增删改查)

增:

  • 增加一条:insert into 表(列名,列名...) values (值,值...)

举例:在map表中,为字段address和id插入信息分别为'beijing',30;

insert into map(address,id) values('beijing',30);

  • 增加多条:insert into 表(列名,列名...) values (值,值,值...),(值,值,值...)...

举例:在map表中,为字段address和id插入两条信息分别为('beijing',30),('shanghai',100);

insert into map(address,id) values('beijing',30),('shanghai',100);

  • 从其他表中查询信息然后插入:insert into 表(列名,列名...) select (列名,列名) from 表名;

举例:表1:tb1(nid int,name varchar(20),age int) [字段分别为nid,name,age]

          表2:tb2(nid int,caption varchar(20), gender varchar(20))  [字段为nid,caption,gender](创建表tb2,并添加数据)

        将tb2中的数据插入到tb1里面

         insert into tb1 (name,age) select  caption,gender from tb2;

这里的gender是varchar类型,age是int类型,如果插入的字符串为纯数字的时候,会自动转换,但是如果不是纯数字,执行上面命令不会显示出来age,如上age全部为0,要么报错。

 

SQL中新增列或者说添加字段的方法:

alter table 表名 add 列名 数据类型  (tb1为表名,newcolumn为新列名)

eg:alter table tb1 add newcolumn varchar(20);

 

删:

delete from 表名;

举例:delete from tb1;

delete from 表名 where 字段名='数据';

举例:delete from tb1 where name='zhao';(删除表tb1中name='zhao'的消息)

 

改:

update 表名 set age=1;(修改全部的age为1)

update 表名 set age=8 where name='wang'  将name='wang'的age修改成8);

 

查:

select 字段 from 表名;

select * from 表名 where nid>12;(查询nid>12的全部字段内容)

 

change和modify的使用

change的相关使用:

          更改列名:alter table 表名 change 旧列名 新列名 类型;

modify的相关使用:

        更改类型:alter table 表名 modify 列名 类型;

(在使用change的时候如果之前没有旧列名,需要将该列名写两次,修改类型的时候,如果使用change,如果里面有数据,不同类型之间不能相互转换,如果没有数据,可以修改为其他的类型)

(如果只修改类型的时候,可以使用modify,在写列名的时候只需要写一次)

rename修改表名

rename table 表名 to 新表名;

 

 

有关条件的表达

where的使用:

举例:select * from tb1 where age>10;(挑选tb1中age大于10的全部信息)

  • 大于 >
  • 小于 <
  • 等于 =
  • 不等于  != 或者 <>

in 的使用  (可以理解为or)

举例:select * from tb2 where nid in (2,5); (查找tb2表中的nid为2或者5的数据)

not in 的使用

举例:select * from tb2 where nid not  in (2,5); (查找tb2表中的nid不是2或者5的数据)

between and 的使用

举例:select * from tb2 where nid between 2 and 5;  (查找表tb2中nid在2到5之间的数据)

 

有关通配符的使用

%的使用(匹配0到多个字符)

举例:select * from tb2 where caption like 'wang%';

(查找表tb2中caption是以wang开头的数据【包括wang】)

 

_的使用(只能匹配一个字符)

举例:select * from tb2 where caption like 'wang_';

(查找表tb2中caption是以wang开头,并且后面只有一个字符的数据信息)

 

有关限制的表达方式

limit的使用:

select * from tb2 limit 5;(只取数据的前五行)

 select * from tb2 limit 4,2; (从第五行开始取两行)(因为数据是从第0行开始取,所以4表示第五行)

select * from tb2 limit 2 offset 4;( 从第五行开始取两行)(同上一个含义,表达方式不同)

 

有关排序的表达

order by 列名;

 select * from tb2 order by caption (asc);【asc当表示升序的时候可以省略】【desc表示降序】

【将表tb2中的信息按照caption列升序的方式展示出来】

select * from tb2 order by caption asc,gender asc;  (将表tb2中的数据按照caption列升序的方式排列,如果数据相同,就按照列gender升序的方式排序)

 

分组的表达【此部分有待改进】

group by 字段名【使用group by 如果后面想要添加条件,不能使用where,需要使用having】

举例:select * from tb2 group by nid; 【使用group by 进行分组的时候,只显示一个nid=8的数据】

select count(nid),nid,caption,gender from tb2 group by nid; [count表示统计数据]

  • max(字段名) 【字段中最大的】
  • min(字段名) 【字段中最小的】
  • sum(字段名) 【字段的总和】
  • avg(字段名) 【字段的平均值】

as 新名字【重命名】

 

主键和外键

MySQL中的主键和外键是为了维护关系数据库的完整性

主键是能确定一条记录的唯一标识,外键是用于与另一张表进行关联。

举例:一张包含个人信息的表A,字段分别为身份证号码,姓名,年龄,性别。因为姓名,年龄,性别都可能重复,只有身份证号码是每个人特有的,因此在这张表中,如果设置主键,就是身份证号码。另一张表B中也包含身份证号码,此时A表中的该字段就是表B的外键。

一张表只能有一个主键(可以所列组成),唯一不重复,不能为空,一般情况下设置为自增列

 

表的修改

添加列:alter table 表名 add 列名 类型

删除列:alter table 表名 drop column 列名

修改列的类型:alter table 表名 modify column 列名 类型;

修改列的名称:alter table 表名 modify column 原列名 新列名 类型;

添加主键:alter table 表名 add primary key (列名);

删除主键:alter table 表名 drop primary key;

添加外键:alter table 从表 add constraint 外键名称(比如:FK_从表_主表)foreign key 从表(外键字段)references 主表(主键字段);

删除外键:alter table 表名 drop foreign key 外键名称;

修改默认值:alter table 表名 alter 列名 set default 100;(当创建表的时候,如果表中的某一列有字段名但是没有填写信息,为该字段添加默认值,之后就不用填写信息,直接显示默认值,这里是修改默认值)

删除默认值:alter table 表名 alter 列名 drop default;

 

连表操作

在上边有说到主键和外键,当操作的信息需要用到多个表的时候,需要使用连表操作,主键和外键派上用场

表A:字段:nid(主键) ,num,age,message

表B:字段:id(主键),a_nid(外键),name,num 

举例:联合两个表,查看A表中的num列信息,以及B表中的name,num列信息

select A.num,B.num,B,name from A,B where A.nid = B.a_nid;

 

    无对应关系则不显示

    select A.num, A.name, B.name

    from A,B(只有这些的时候可以是笛卡尔积)

    where A.nid = B.nid

举例:联合tb1和tb2两个表,当没有where的时候,会将信息全部显示,tb1中的数据有四条,会将这四条信息分别和tb2中的10条数据结合,就会形成4*10=40条数据

当使用where的时候,因为tb1中的nid全部等于5,tb2中nid的数据中也有等于5的,所以就会只结合4条数据

 

    无对应关系则不显示【使用inner join,left join,right join连接的时候需要使用on】

    select A.num, A.name, B.name

    from A inner join B

    on A.nid = B.nid(如果结果中有null的被过滤掉)

 

    A表所有显示,如果B中无对应关系,则值为null

    select A.num, A.name, B.name

    from A left join B

    on A.nid = B.nid

 

    B表所有显示,如果A中无对应关系,则值为null

    select A.num, A.name, B.name

    from A right join B

    on A.nid = B.nid

 

组合

    组合,自动处理重合

    select nickname

    from A

    union (查询A表中的nickname列信息,以及B表中的name列信息,重合信息不显示)

    select name

    from B

 

    组合,不处理重合

    select nickname

    from A

    union all (查询A表中的nickname列信息,以及B表中的name列信息,显示全部信息)

    select name

    from B

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值