分享

mysql 常用命令

 忘川书阁 2018-04-10
一、概念:
   数据: data
   数据库: DB
   数据库管理系统:DBMS
   数据库系统:DBS
   MySQL:数据库  
   mysql:客户端命令(用来连接服务或发送sql指令)
   SQL:结构化查询语言 ,其中MySQL支持这个。
   SQL语言分为4个部分:DDL、DML、DQL、DCL
   
二、连接数据库:
   mysql -h 主机名 -u 用户名  -p密码  库名
   
   C:\>mysql  --采用匿名账号和密码登陆本机服务
   C:\>mysql -h localhost -u root -proot   --采用root账号和root密码登陆本机服务
   C:\>mysql -u root -p   --推荐方式默认登陆本机
     Enter password: ****
   C:\>mysql -u root -p lamp61  --直接进入lamp61数据库的方式登陆
   
三、授权:
    格式:grant 允许操作 on 库名.表名 to 账号@来源 identified by '密码';
        实例:创建zhangsan账号,密码123,授权lamp61库下所有表的增/删/改/查数据,来源地不限
        mysql> grant select,insert,update,delete on lamp61.* to zhangsan@'%' identified by '123';
        Query OK, 0 rows affected (0.00 sec)
    
四、SQL的基本操作
    mysql>show databases;  --查看当前用户下的所有数据库
    mysql>create database [if not exists] 数据库名; --创建数据库
    mysql> use test;    --选择进入test数据库
    mysql> drop database 数据库名;  --删除一个数据库
    
    mysql> show tables; --查看当前库下的所有表格
    mysql> select database();  --查看当前所在的数据库
    mysql> desc tb1;  --查看tb1的表结构。
    mysql> create table demo(--创建demo表格
        -> name varchar(16) not null,
        -> age int,
        -> sex enum('w','m') not null default 'm');
    mysql> desc demo;  --查看表结构
    mysql>\h   -- 快捷帮助
    mysql>\c   -- 取消命令输入
    mysql>\s   -- 查看当前数据库的状态
    mysql>\q   -- 退出mysql命令行
    mysql>quit   退出
                
五、MySQL数据库的数据类型:
        MySQL的数据类型分为四大类:数值类型、字串类型、日期类型、NULL。
     1、 数值类型:
        *tinyint(1字节)    smallint(2字节)   mediumint(3字节)     *int(4字节)     bigint(8字节)
        *float(4字节)      float(6,2)*       double(8字节)         decimal(自定义)字串形数值
        
     2、字串类型
        普通字串
        *char  定长字串        char(8)      *varchar 可变字串 varchar(8)
        
        二进制类型
        tinyblob
        blob
        mediumblob
        longblob
        
        文本类型
        tinytext
        *text      常用于<textarea></textarea>
        mediumtext
        longtext
        
        *enum枚举
        set集合
        
    5.3 时间和日期类型:
        date  年月日
        time  时分秒
        datetime 年月日时分秒
        timestamp 时间戳
        year 年
    
    5.4 NULL值
        NULL意味着“没有值”或“未知值”
        可以测试某个值是否为NULL
        不能对NULL值进行算术计算
        对NULL值进行算术运算,其结果还是NULL
        0或NULL都意味着假,其余值都意味着真
    MySQL的运算符:
        算术运算符:+ - * / %
        比较运算符:= > < >= <= <> !=
        数据库特有的比较:in,not in, is null,is not null,like, between and
        逻辑运算符:and or not
    
六、表的字段约束:
        unsigned 无符号(正数)
        zerofill 前导零填充
        auto_increment  自增
        default    默认值
        not null  非空
        PRIMARY KEY 主键 (非null并不重复)
        unique 唯一性   (可以为null但不重复)
        index 常规索引
        设置typeid为type表中的id的外键///typeid int references type(id),
        
七: 建表语句格式:
      create table 表名(
       字段名 类型 [字段约束],
       字段名 类型 [字段约束],
       字段名 类型 [字段约束],
       ...
      );
1.进入数据库:c:\> mysql -u root -p
2.创建数据库:mysql> create database ~库名~;
3.进入数据库:mysql> use ~库名~;
4.查看当前在哪个库:mysql> select database();
5.创建表:
--普通创建:create table ~ 表名~(表内容);
-- 通过多行创建表:
mysql> create table ~表名~(
    -> id int,
    -> name varchar(8),
    -> age tinyint
    -> );
6.查看表结构///desc ~表名~;
7.尝试删除表///drop table if exists ~表名~;
8.查看表的建表语句///mysql> show create table~表名~\G;

-------------------------===添加  insert===-----------
--标准添加,指定所有字段给定所有的值///mysql> insert into ~表名~(id,name,age) value(1,'zhangsan',20);
-- 不指定字段添加值,注意:字段顺序和表结构一致///mysql> insert into ~表名~ value(2,"lisi",22);
-- 指定部分字段,添加值///mysql> insert into ~表名~(id,name) value(3,"wangwu");
-- 查看学生信息表的同时,追加一个beijing值的字段,字段名为city(城市)///mysql> select *,"beijing" city from ~表名~;
-- 在表的第一列位置添加字段/// alter table 表名 add 字段名 类型 约束 first;(如不加此first默认在最后添加)
-- 给表字段添加索引///alter table 表名 add index 字段名_index(字段名);
------------------------===查看 select===-----------
--查看所有数据库///    show databases;  
--查看数据库中所有表///   show tables;
--查看表中的所有数据///mysql>    select * from ~表名~;
-- 查看~表名~标的部分字段的数据///mysql>      select name,age,classid from ~表名~;
-- 查看部分字段 ,并为name字段起个别名,叫username字段名
///mysql>  select name as username,age,classid from ~表名~;
-- 查看年龄以及5年后的年龄///mysql>    select age,age+5 from ~表名~;
-- 按年龄升序排序,取第一条,并显示 : mysql>   select * from ~表名~ order by age asc limit 1;
-- 查看学生信息表的同时,追加一个beijing值的字段,字段名为city(城市)
///mysql>   select *,"beijing" city from ~表名~;
-- 通过表名取字段信息///mysql>    select s.name,s.age  from ~表名~ s;
--- where条件查询----
====================================================================
-- 1. 查看lamp97班级的所有学生信息///mysql> select * from ~表名~ where classid='lamp97';
-- 2. 查看lamp97期性别为m的所有学生信息///mysql> select * from ~表名~ where classid='lamp97' and sex='m';
-- 3. 查看年龄age是20~30岁的学生信息
mysql> select * from ~表名~ where age>=20 and age<=30;
mysql> select * from ~表名~ where age between 20 and 30;
-- 4. 查看年龄age是20~30岁之外的学生信息
mysql> select * from ~表名~ where age<20 or age>30;
mysql> select * from ~表名~ where age not between 20 and 30;
-- 5. 查看id号为3,5,8,10的学生信息
mysql> select * from ~表名    ~ where id=3 or id=5 or id=8 or id=10;
mysql> select * from ~表名~ where id in(3,5,8,10);
-- 6. 查看lamp97期和lamp98期性别为w的信息  
mysql> select * from ~表名~ where classid in('lamp97','lamp98') and sex='w';
mysql> select * from ~表名~ where (classid='lamp97' or classid='lamp98') and sex='w';
-- 7. 查看姓名中包含ang字串的学生信息
mysql> select * from ~表名~ where name like '%ang%';
mysql> select * from ~表名~ where name regexp "ang";  --使用正则
-- 8. 查看年龄为偶数,并且性别为m的学生信息///mysql> select * from ~表名~ where age%2=0 and sex='m';
-- 9. 查看姓名为4个任意字符的学生信息
mysql> select * from ~表名~ where name like '____';
mysql> select * from ~表名~ where name regexp '^.{4}$';
--10. 查看姓名不为null的信息。///mysql> select * from ~表名~ where name is not null;
--- 统计查询(聚合查询): count() sum() avg() max() min();
-- 统计学生表的数据条数
mysql> select count(id) from ~表名~;
mysql> select count(*) from ~表名~;
-- 分组,按班级分组//mysql> select classid from ~表名~ group by classid;
-- 统计每个班级的人数和平均年龄。
///mysql> select classid,count(*),avg(age) from ~表名~ group by classid;
-- 统计学生信息表中男女生各自人数(按性别分组)。
///mysql> select sex,count(*) from ~表名~ group by sex;
-- 统计lamp97期的按性别分组后的人数
///mysql> select sex,count(*) from ~表名~ where classid='lamp97' group by sex;
-- 统计每个班的男女生各自人数(按性别分组)。
///mysql> select classid,sex,count(*) from ~表名~ group by classid,sex;
-- 统计每个班的平均年龄,要求只显示24岁以上的班级。
///mysql> select classid,avg(age) from ~表名~ group by classid having avg(age)>24;
-- 排序:order by 字段名 [asc|desc]    
-- 默认asc(升序)  desc(降序)    
-- 查询所有数据 并按年龄做默认升序排序///mysql> select * from ~表名~ order by age;
-- 查询所有数据 并按年龄做默认升序排序///mysql> select * from ~表名~ order by age asc;
-- 查询所有数据 并按年龄降序排序///mysql> select * from ~表名~ order by age desc;
-- 按班级升序,相同的班级按年龄降序排序。///mysql> select * from ~表名~ order by classid asc,age desc;
-- limit 子句:(分页)
--===============================================================
-- 提取前4条数据////mysql> select * from ~表名~ limit 4;
-- 排除前4条,取3条///mysql> select * from ~表名~ limit 4,3;
-- limit后面的数值不可以为负数。////mysql> select * from ~表名~ limit 60,-3;
-- 统计每个班级的人数,并按人数从大到小排序,只取前两条。
////mysql> select classid,count(*) num from ~表名~ group by classid order by num desc limit 2;写到这儿
-- 查询id为7的下一条数据////mysql> select  * from ~表名~ where id>7 order by id limit 1;
--================================================================
--  组合查询(多表查询)
--  1. 嵌套查询
--  2. where 关联查询
--  3. join 连接 (左联 left join、右联 right join、内联inner join)
--=================================================================
-- 最大年龄//// mysql> select max(age) from ~表名~;
-- 查询年龄为36岁的人//// mysql> select * from ~表名~ where age=36;
-- 查询年龄最大的学生信息////mysql> select * from ~表名~ where age=(select max(age) from ~表名~);
-- 查询php成绩最高的学生id号////mysql> select sid from grade where php=(select max(php) from grade);
-- 查出php成绩最高的学生信息
    mysql> select * from ~表名~ where id in(
        -> select sid from grade where php=(select max(php) from grade));
-- 查询所有字段,条件是学生的id和成绩的sid关联//// mysql> select * from ~表名1~,~表名2~ where ~表名~.id=~表名1~.sid;
-- 查询部分字段,条件是学生的id和成绩的sid关联
//// mysql> select ~表名~.id,~表名~.name,~表名~.age,grade.php,grade.mysql from ~表名~,grade where ~表名~.id=grade.sid;
-- 通过别名方式查询部分字段,条件是学生的id和成绩的sid关联
////mysql> select s.id,s.name,s.age,g.php,g.mysql from ~表名~ s,grade g where s.id =g.sid;
-- 左联查询:查询学生表中所有的成绩,没有参加考试的补空
   mysql> select s.id,s.name,s.sex,g.php,g.mysql from ~表名~ s left join grade g
    -> on s.id=g.sid;
-- 内联相当于where关联,就是学生表和成绩表共有的数据。
   mysql> select s.id,s.name,s.sex,g.php,g.mysql from ~表名~ s inner join grade g
    -> on s.id=g.sid;
11.修改:--------------------------===修改  update===------------
--修改id值为3的年龄信息为25///mysql> update ~表名~ set age=25 where id=3;
-- 修改id值为5的年龄26,名字为qq ///mysql> update ~表名~ set  age=26,name='qq' where id=5;
(-- 修改一个不存在的数据,不会报错。mysql> update ~表名~ set age=100 where id>50;)
-- 将id值为10的~表名~信息中的name改为qq,sex改为w/// mysql> update ~表名~ set name='qq',sex='w' where id=10;
-- 修改年龄最小的一条的性别信息/// mysql> update ~表名~ set sex='m' order by age asc limit 1;
-- 改名其中为name起别名的as关键字可以省略不用写///mysql> select name username,age,classid from ~表名~;
-- 为age+5起个别名age5(对外的字段名)///mysql> select age,age+5 age5 from ~表名~;
-- 修改demo1表结构,为m字段添加一个前导补零(先进入表格mysql> desc demo1;),m m表示没有改字段名////mysql> alter table demo1 change m m int(5) unsigned zerofill;
12.删除:-------------------------===删除  delete===------------
-- 删除name值为~名 的数据/// mysql> delete from ~表名~ where name='~名';
-- 删除id值为100到200的数据 ///mysql> delete from ~表名~ where id>=100 and id<=200;
-- 删除id值为10,11和20的数据 /// mysql> delete from ~表名~ where id in(10,11,20);
-- 删除id值大于100的信息///mysql> delete from ~表名~ where id>100;
-- 删除age大于等于50并且小于等于100的数据///mysql> delete from ~表名~ where age>=50 && age<=100;
-- 删除age比10小的或比100大的///mysql> delete from ~表名~ where age<10 || age>100;
-- 使用关键字distinct 去除重复的classid值///mysql> select distinct classid from ~表名~;
-- 删除字段。/// alter table 表名 drop 字段名;
13-- 导出lamp97数据库并以lamp97.sql文件存储
-- 导出数据库lamp138信息
mysql>quit
D:\>mysqldump -u root -p lamp138 > lamp138.sql
Enter password:
-- 导出lamp138数据库中的stu表信息
D:\>mysqldump -u root -p lamp138 stu > lamp138_stu.sql
Enter password:
-- 导入数据
D:\>mysql -u root -p lamp138 < lamp138.sql
Enter password:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多