zoukankan      html  css  js  c++  java
  • mysql数据库基础

    MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。现归属于Oracle(甲骨文)公司所有。

    Mysql常用命令:

    1、登录连接数据库。

    mysql -u root -p

    2、显示帮助命令清单。

    mysql> h; //(加分号和不加分号结束都不影响命令执行)

    3、清除当前输入的语句(命令)。

    mysql> c

    4、查询当前安装的MySQL服务器的版本号。

    mysql> select version();

    5、查看MySQL服务器状态信息(包含版本号,下面两个命令执行效果相同)。

    mysql> status;  //(加分号和不加分号结束都不影响命令执行)

    mysql> s

    6、退出数据库。

    mysql> q;   //(加分号和不加分号结束都不影响命令执行,会返回一个Bye)

    7、数据库的导入导出。

    导出数据库:mysqldump -u 用户名 -p  数据库名>数据库名.sql

    导入数据库:source 数据库名.sql

    8、显示所有数据库。

    mysql> show databases;   //(注意,最后有个s)

    9、选择数据库。

    mysql> use 数据库名; //会返回Database changed

    10、查看当前选择的数据库中的所有的表

    mysql> show tables;  //(注意,最后有个s)

    11、查看当前选择的数据库。

    mysql> select database();

    一、DDL:数据定义语言 (Data Definition Language)

    作用:定义数据库或者表结构的。
    操作的对象:数据库或表的结构的。
    关键字:CREATE、 ALTER、 DROP

    1、创建数据库。

    mysql> create database 数据库名;  //如果要创建的数据库已经存在,或者没有创建它的适当权限,则此语句执行失败。

    例:mysql> create database company;//创建一个公司数据库

    2、删除数据库。

    mysql> drop database 数据库名;

    例:mysql>drop database company;  //删除公司数据库

    3、创建表结构。

    mysql>create table 表名(列名 列的数据类型 [<列的完整性约束>],列名 列的数据类型 [<列的完整性约束>],......);

    例:mysql>create table dept(      //创建部门表

    deptno int(11) primary key,  //部门编号,int型,主键约束

    deptname varchar(12) unique  //部门名称,varchar类型,唯一性约束

    );

    注意:创建表之前,必须先选择数据库,在选定的数据库中才能创建表。

    列(column)有时候也称字段(field),同一个意思。

    附:常用约束:

    a)主键约束:primary key --非空且唯一,一张表就定义一个主键

    b)主键自增长:auto_increment

    c)非空:not  null --不允许插入null值,可定义多个非空约束

    d)唯一性:unique  --不允许重复,但可以为空,可定义多个唯一约束

    e)默认值:default  默认值  --指定缺省值,在没有添加值得情况下使用default后指定的默认值

    f)外键:foreign key(列名) references 外键表名(外键列名); //注意:有外键时,创建表,先创建父表,再创建子表;插入数据,先插入父表,再插入子表;删除数据,先删除子表中的数据,再删除父表中的数据。

    4、查看表结构。(下面三种方式实现效果相同)

    mysql> desc 表名;   //常用

    mysql> describe 表名;

    mysql> show columns from 表名;

    5、修改表的名称。(下面两种写法都可以实现修改表名)

    mysql> alter table 原表名 rename to 新表名;

    mysql> rename table 原表名 to 新表名;

    例:mysql> alter table dept rename to de;  //将dept表名称改为de

    6、修改表的编码字符集。

    mysql>alter table 表名 character set 字符集;

    例:mysql>alter table 表名 character set gbk;  //修改表的编码字符集为gbk

    7、向表中添加新的列。

    mysql> alter table 表名 add <column> 列名 列的数据类型 [<列的完整性约束>];//column可省略

    8、修改表中的某一列。

    a)修改表中某一列的列名(同时可修改列的数据类型)

    mysql>alter table 表名 change 原列名 新列名 列数据类型;

    b)修改表中某一列的数据类型

    mysql>alter table 表名 modify 列名 列新的数据类型;

    9、删除表中的某一列。

    mysql>alter table 表名 drop <column> 列名; //column可省略

    10、删除表。

    mysql>drop table 表名;   //彻底删除表,数据库中不会保留表结构。注意与delete和truncate区别。

    mysql>truncate 表名;

    二、DML: 数据操作语言(Data Manipulation Language)
    作用:操作表中的数据的。
    关键字:INSERT、 UPDATE 、DELETE

    1、向表中插入数据(每一行数据就是一条记录),以下三种插入数据的方法皆可。

    mysql>insert <into> 表名 values(列值1,列值2,......);   //into可以省略,插入的顺序必须和建表的顺序对应。

    mysql>insert <into> 表名 (列名1,列名2,......)values(列值1,列值2,......);  //建议使用

    mysql>insert <into> 表名 values(列值1,列值2,......),(列值1,列值2,......),......;//一次性插入多条数据

    例:向dept表中插入数据。

    mysql>insert into dept(deptno,deptname)values(100,'销售部');

    2、修改某一列的所有字段值为新的字段值。

    mysql>update 表名 set 列名=新字段值;
    mysql>update 表名 set 列名=新字段值,列名=新字段值...;   //批量修改多个列的所有字段值都新字段值。

    3、修改某一条记录的字段值。

    mysql>update 表名 set列名=新字段值 where 列名=字段值;
    mysql>update 表名 set 列名=新字段值,列名=新字段值... where 列名=字段值;    //批量修改多个字段的字段值都为该值。

    例:将学生表(student)中学号(sno)为520的学生的年龄(sage)改为21岁。

    mysql>update student set sage=21 where sno=520;

    4、删除表中的某一条记录。

    mysql>delete from 表名 where 列名=列值;

    例:删除学生表(student)中名字(sname)为'张三'的学生的记录

    mysql>delete from student where sname='张三';  //注意,由于学生名字有重复的可能,所以会把所有名字叫张三的学生信息都从student表中删除掉,所以删除单条记录的条件可以参照主键约束的列,或者唯一约束的列,或者在已确定没有重复的情况下自行确定where后面选的条件。

    5、删除表。

    mysql>delete from 表名;

    附:drop、truncate、delete的区别?

    a)drop和truncate是DDL,而delete是DML。

    b)truncate和delete只删除数据,不会删除表的结构,而drop会把数据和表结构都删除。

    c)delete可以带where有条件的删除,可以回滚(rollback),但删除速度较truncate较慢。而truncate则不可以删除特定的数据,也不可以回滚(rollback),但删除速度比delete快。

    建议:小心使用drop和truncate,尤其在数据没有备份的情况下。

    三、DQL:数据查询语言(Data Query Language)
    关键字:SELECT

    1、查询表中所有的记录。

    mysql> select * from 表名;   //*指代表中所有的列

    mysql> select 列1,列2,... from 表名; //将表中所有的列都写出来和上面效果相同。

    例:查询dept表中的所有数据

    mysql> select * from dept; 或者 select deptno,deptname from dept;

    2、查询表中的某一条记录。

    mysql>select * from 表名 where 列名=字段值;

    例:查询学生表(student)中名字(sname)叫'张三'的学生的学号(sno)、成绩(grade)信息。

    mysql>select sno,grade from student where sname='张三';//当指定了要查询的信息,就不要用*号代替所有了。

    3、过滤表中重复的数据(关键字distinct)

    mysql>select distinct 列名 from 表名;   //返回该字段下的所有字段值,若有相同字段值,则只返回一个。

    4、排序(关键字order by)。

    mysql>select * from 表名 order by 列名 asc;       //升序(默认),asc可省略不写。
    mysql>select * from 表名 order by 列名 desc;     //降序

    例:按照学生表(student)中学生成绩(grade)的由高到低顺序输出学生的学号(sno)、姓名(sname)和成绩(grade).

    mysql>select sno,sname,grade from student order by grade desc;

    5、分页查询(关键字limit)。

    mysql>select * from 表名 limit (pageNo-1)*pagesize,pagesize; //    pageNo-->要查询的页数,pageSize-->每页显示的记录数

    例:查询dept表中第一页(每页2条数据)的记录。

    mysql>select * from 表名 limit 0,2; 

    6、模糊查询(关键字like)。

    mysql>select * from 表名 where 列名 like ' % ';  //%指代任意字符

    例:查询学生表(student)中姓刘的学生的信息。

    mysql>select * from student where sname like '刘%';

    例:查询学生表中姓名第二个字为阳的学生信息。

    mysql>select * from student where sname like '_阳%';  //_指代一个字符

    7、范围查询(关键字between .. and .. , in())。

    mysql>select * from 表名 where 列名  between 字段值(小) and 字段值(大);//包含两端的字段值

    mysql>select * from 表名 where 列名 in (字段值1,字段值2,......);

    例如:查询学生表(student)中语文成绩chinese在80~90分之间的所有学生信息(包含80和90)
    mysql>select * from student where chinese between 80 and 90;

    例如:查询学生表(student)中数学成绩math为60分,70分,80分和90分的所有学生信息。
    mysql>select * from student where math in (60,70,80,90);

    8、使用别名。

    mysql>select 字段名 <as> 别名,字段名 别名,... from 表名;    //as可省略

    例如:查询学生成绩表(sc)中学生姓名(sname)及总成绩,sname字段用姓名表示,所有科目得分总和用总分表示。
    mysql>select sname as 姓名,chinese+math+english 总分 from sc;

    9、分组查询(关键字group by)。

    mysql>select 列名,count(列名) from 表名 group by 列名;

    例如:查询每个部门的员工人数,根据部门编号(deptno)对员工进行分组,返回各部门员工人数。
    mysql>select deptno,count(empno) from emp group by deptno;  //empno--员工编号,emp--员工表

    having:对分组后的结果进行条件限制
    例如:查询每个部门员工人数大于2的所有记录,返回人数大于2人的部门编号及其部门人数。
    mysql>select deptno,count(empno) from emp group by deptno having count(empno)>2;

    10、表连接查询(同时涉及多个表的查询称为连接查询,用来连接两个表的条件称为连接条件)。

    内连接:表1  join 表2  on 表1.列名=表2.咧名;

    例:查询员工表(emp)中的员工号(empno)、员工姓名(empname)、部门号(deptno)和部门名称(deptname),部门名称字段在部门表(dept)中.

    mysql> select empno,empname,emp.deptno,deptname from emp join dept on emp.deptno=dept.deptno;

    左外连接:表1 left join 表2 on 表1.列名=表2.列名;
    表1作为主表,主表中的所有记录都会输出,和从表匹配不上的字段用null进行补齐。

    例:以员工表(emp)为主表实现上述查询。

    mysql> select empno,empname,emp.deptno,deptname from emp left join dept on emp.deptno=dept.deptno;


    右外连接:表1 right join 表2 on 表1.列名=表2.列名;
    表2为主表,主表中的所有记录都会输出,和从表匹配不上的字段用null进行补齐。

    例:以部门表(dept)为主表实现上述查询。

    mysql> select empno,empname,emp.deptno,deptname from emp right join dept on emp.deptno=dept.deptno;

    11、表的复制。

    mysql>create table 新表表名 select * from 被复制表表名; //新表的表结构和数据与原表相同。

    mysql>create table 新表表名 select 列名1,列名2,... from 被复制表表名;  //可以通过在select查询中指定字段来限制出现在新表中的字段
    mysql>create table 新表表名 select * from 被复制表表名 where 0=1; //通过使用select语句创建已存在表的空副本(即创建相同表结构,但不复制原表数据过来),并且返回一个空结果集。

    12、聚合函数。

    a)返回指定列非空值的个数

    mysql>select count(列名) from 表名;

    例:查询学生表(student)中学生的总人数。

    mysql>select count(sno) from student;  //根据学生学号计算学生个数,学号不为空且唯一


    b)返回指定列的最值
    mysql>select max(列名) from 表名;  //返回指定列的最大值

    例:查询学生表(student)中年龄(sage)最大的学生姓名(sname)和年龄。

    mysql>select sname,max(sage) from student; 
    mysql>select min(列名) from 表名;   //返回指定列的最小值

    例:查询学生成绩表(sc)中语文成绩(chinese) 最低的学生的学号(sno)和语文成绩。

    mysql>select sno,min(chinese) from sc;


    c)返回指定列的平均值
    mysql>select avg(列名) from 表名;


    d)返回指定列的所有值之和
    mysql>select sum(列名) from 表名;

    我是一名大学生,喜欢学习技术,希望和你一起进步。加油
  • 相关阅读:
    python网页内容提取神器lxml
    tf–idf算法解释及其python代码
    刷搜索刷下拉框原理
    python爬取全站壁纸代码
    刷百度相关搜索发包参数详解
    Python3 if 变量variable SQL where 语句拼接
    python抓取网站提示错误ssl.SSLCertVerificationError处理
    Windows中的txt文件到Mac打开是乱码 解决办法
    python移动目录下所有子目录文件到新的总目录
    Spring Boot
  • 原文地址:https://www.cnblogs.com/lvhaiqing/p/10009483.html
Copyright © 2011-2022 走看看