mysql 基本指令

来源:互联网 发布:非公版显卡linux 编辑:程序博客网 时间:2024/06/06 06:44
我的后台只有观世音菩萨。        ----夏不夏说     
来源:知乎https://www.zhihu.com/question/34472193/answer/193505071


       DBMS:数据库管理系统,数据的所有存储,检索,管理和处理实际上都是DBMS完成的。
        mysql 就是一种DBMS,即它是数据库管理软件;oracle:甲骨文公司,应用广泛,功能强大,付费,mysql:瑞典mysql_AB公司开发,目前属于甲骨文公司,开源,免费,使用方便,功能强大。


1、忘记密码进入mysql方法:
$cd /etc/mysql
$sudo vim /etc/mysql/debian.cnf
$msql -u debian-sys-maint -p密码

2、修改mysql密码:
mysql > use mysql;
mysql > update user set authentication_string = password('new password') where user = 'root';
mysql > flush privileges;
mysql > \q;


3、导出导入
导出整个数据库:mysqldump -u root -p students > students.sql;
导入整个数据库:mysql -u root -p xxx < students.sql;

导出一张表:mysqldump -u  root -p students stu > stu.sql
导入一张表:mysql -u root -p students <stu.sql
source students.sql;
source stu.sql;

4、进入数据库 退出 结束当前命令行
进入数据库:mysql -u root -p密码
退出mysql:\q;
结束当前命令行:\c;
清屏:ctrl + l 

5、对数据库操作
操作之前应该选定要操作的数据库:use  数据库名称;
显示所有数据库:show databases;
显示当前的数据库:select database();
新建数据库:create database 名称;
删除数据库:drop database  名称;
drop database  if exists 名称;(如果存在进行删除,如果没有也不会报错,但是一次只能删除一个);

6、对表的操作
    1)显示表名:desc 名称 
    2)显示数据表:show  tables;
    3)新建数据表:create  table  名称(列名1 列类型 [完整性约束],列名2 列类型 [完整性约束])default  charset =utf8;(可以显示中文);
    4)给表重命名:alter table student1 rename as student2;
    5)删除表:drop table  名称;
            drop table 库名 . 表名;(删除指定的地方的表)
    6)、复制一张已知的数据表:create table 新表名 select * from 已知表
    7)在复制表的时候限制复制表中的内容:create table 新表名 select id, name from 已知表
    8)创建一个已存在的表的空表:create table x2 select * from stu where 0 = 1;
    9)只选择空表中部分字段:create table x3 select id, name from stu where 0 =1;


7、对数据的操作
    1)查找数据:
        select 列名  from 表名 (where子句)【order by 列名】【asc/desc】(升序降序);如果不写就是默认升序;
        查看整张表的数据:select * from 表名
        通过年龄进行升序排列显示:select * from student1 order by age asc;
        通过年龄小于10的进行升序显示;select * from  student1  where  age<10  order  by  age  asc;
    2)插入数据:insert into 表名  (【列名1,列名2】) values(【值列表】)
            一次插入多行数据:insert into 表名  (【列名1,列名2】) values(【值列表】),(【值列表】)
            从别的表插入数据:insert into  student  select  id,name,sex  from student1 where id=2;
    3)修改数据表中的记录(行) 字段(列):
            update 表名 set sex=‘w’ 但是会全部设置;
            update 表名 set sex=‘w’,age=18 where id=2;(只修改id=2的);
    4)delete from 表名; 清空数据 (drop是删除整张表)
            delete from student1 where id < 10;
    5)修改表的结构:
            增加一列:alter table 表名 add 列名 列类型 【列的完整性约束】 【after列名】;
            删除一列 :alter table 表名 drop 列名 ;
            给指定的列设置默认值 :alter table 表名 alter 列名 set default 默认值;
            更改列名和列类型:alter table 表名 change 旧列名 新列名 类型 【列的完整性约束】【after 列名】;
            alter table student1 change id num int ;(知识单纯的改变名称)
            alter table student1 change id num int alter score;(改变位置)
            alter table student1 change id id varchar ;(改变类型)
            alter table student1 change id num varchar ;(改变名称和类型)
            alter table student1 change id num int not null alter score;(加入了不为空的约束);
     5主键:主键列的每一个数据都是唯一的,它存在的理由就是唯一的标志一行。设置为主键列必须为非空,通常会设置顺序值/标识符为主键。不能含有相同的值;一个表中只能有一个主键;
            添加主键:给某一列添加主键,即设置该列为主键列:alter table 表名 add primary key(列名);
            删除主键:alter table 表名 drop primary key;
            主键设置成自增长:alter table表名 change num num int auto_increment;
           设置自增长的初值:alter table student1 auto_increment=初值;
            删除主键自增长:alter table 表名 change num num int;
条件:整型主键列;该主键列中不能含有值为零的项。注:对于一个主键,自增长列要想删除主键,必须先删除自增长。
 
8、多表查询
1)内连接(inner,  join):最后的表为2张表连接条件的交集的合表
    select s.id, s.name,s.age, c.course, c.score
    from stu as s
    inner join cour as c
    on s.id = c.num;

    select stu.id, stu.name, stu.age, cour.course, cour.score
    from stu, cour
    where stu.id = cour.num
2)左外连接(left join以左表为主, left join 之前的表为主)  左表中有的都必须有,没有的值为null
    select s.id, s.name, s.age, c.course,, c.score
    from stu as s
    left join cour as c
    on s.id = c.num;
3)右外连接。。。right join //(紧跟在right join后面的表为主)
4)子查询:将一个查询块嵌套在另一个查询块的where 子句或者是having短语的条件中的查询。
    查询块:一个select -from -where;
例子:select name, age, from stu where id in(select num from cour where course = '语文');


下面是一些特殊用法:(可能不准确,仅供参考)
查看全体成员的详细信息:select * from 表名:
查询全体学生的姓名select code,name from 表名:

字段计算:
select code,age+score from 表名;
select code,age+score as 名称 from 表名;

查询全体学生的学号和姓名,用中文显示列名:select code as ‘学号’,name as ‘姓名’ from 表名;
给表设置别名:select s.code,s.name from 表名 as s;
查询所有的年级:select distinct grade from 表名;
查询年龄在20岁以下的学生的姓名:
查看全体学生的所有信息,并按照年龄的降序排列:select * from student3 order by age desc;
查询年龄最大的前三个学生的所有信息:select * from student3 order by age desc limit  3;
查询年龄最大的第四个第五个学生的所有信息:select * from student3 order by age desc limit  3,2;
字符串拼接:select concat(name,‘is’,age,‘years old’)from 表名 order
计算学生总数:select count(name)from 表名;//count(列名):计算该列元素的个数
计算一年级的平均成绩:select avg(score) from 表名 where grade=1;
寻找sss专业的最高分和最低分:select select max(score) as ‘最高分’,min(score) as‘最低分’ from 表名 where major =‘sss’;
计算每个专业的平均成绩:select major,avg(score)as ‘平均成绩’ from student group by major;
求总分:select sum(score) from student ;//sum(列名)对某一整型列求和
查询年龄在或不在20-50之间的学生的个人信息:
select * from student where age between 20 and 50;(显示在20-50的)
select * from student where age【not】 between 20 and 50;

查询‘nnn’,‘vvv’专业的所有信息:
select * from student where major=‘nnn’or major=‘vvv’;
select * from student where major in(‘nnn’,‘vvv’);
 
查询学号为1的学生的所有信息:
select * from student where code=1;
select * from student where code like 1;

查询名字以x开头的所有学生的所有信息:select * from student where name like ‘x%’;
查询名字以x结尾的所有学生的所有信息:select * from student where name like ‘%x’;
查询名字中含有x的所有学生的所有信息:select * from student where name like ‘%x%’;
查询当前数据库中以stu开头的所有的数据表:show tables  like ‘stu%’;
查询性别为‘m’,并且分数小于70分得学生姓名:select name from student where sex=‘m’ and  score<70;
查询性别为m的学生的学号,名字和年龄,查询结果按照年龄的降序排列:select code,name,age from student where sex=‘m’ order by age desc;
查询全体学生的信息,查询结果按照年级的升序来排列,同一年级的学生按照分数的降序来排列:select * from student order by grade,score desc;



QQ:1786610699      倔强的木木      2017年9月15日