mysql数据库基础

Posted schblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql数据库基础相关的知识,希望对你有一定的参考价值。

一、数据库

1、  数据库(database简称 DB):存储数据的仓库

2、  大型数据库:Oracle(商业)、 DB2

3、  中型数据库:mysql、SQLServer(T-SQL)

4、  小型数据库:Access

5、  MySQL:开源(免费),其它的数据库属于商业(付费)

6、  SQL:结构化查询语言

7、  图形用户界面工具(GUI工具)

SQLyog, Navicat

二、基本命令

1、  进入mysql客户端

mysql   -uroot  -p123456(最后一个字符串组合:-p密码)

2、  在linux中重启mysql

service  mysqld   restart

进入到mysql客户端,mysql的命令:

3、  查看mysql中有哪些数据库

show  databases;(分号为英文状态)

4、  从mysql客户端退出到linux中

quit

5、  在mysql中清屏

Ctrl + l

6、  选择数据库

use 数据库名;

7、  查看当前数据库中包含的所有的表名

show  tables; 

查看指定数据库中包含的表名

show  tables  from  数据库名

8、  创建数据库

create  database  数据库名;

9、  删除数据库

drop  database  数据库名;

三、创建表

1、  创建表(表名最好是英文)

create  table  表的名字

列名1  数据类型,

列名2  数据类型,

列名3  数据类型,

……

列名n  数据类型 (最后一行没有逗号)

);(分号在linux中必须有,在SQLyog中可有可无)

 

2、  数据类型

(1)       整形(整数):int

(2)       小数

浮点数(保存的是近似值):double

定点数(保存的是精确值):decimal(数字的个数,小数的个数)例5.32则(3,2)

(3)       字符串(字母,汉子,数字)

固定长度:char(长度)   默认长度是1

可变长度:varchar(长度)    默认长度是1

(4)       日期

日期(年月日):date

日期时间(年月日小时分钟秒):datetime

3、  注释:解释程序

(1)- -单行注释

(2)/*多行注释*/

4、字符集

    支持中文的字符集

    gbk:中文简体,繁体

    gb2312:中文简体

    utf8(有的是utf-8):包括全世界所有的语言

    (2)修改表的字符集

     create   table  表名

    (

       ……

)charset=utf8;

(3)修改数据库的字符集(数据库中所有的表默认都是utf8)

    create  database  数据库名   character set=utf8;

5、删除表

drop  table  表名

6、查看表结构

    desc  表名;

8、  查看建表的语句

show  create  tabe  表名;

9、  查看创建数据库的语句

show  create  database  数据库名;

四、插入数据

1、insert   into   表名(列名1,列名2,……) values(值1,值2,……);

列名与值的顺序,数量,数据类型必须完全匹配

数字(整数,小数)不需要使用单引号,字符串和日期及其日期时间类型必须使用单引号。

2、当向表中所有列插入数据时,可以省略(列名,……)

Insert  into 表名  values(值1,值2,……);

值的顺序与表中列的顺序一致

4、  通过一个语句向表中插入多行记录(数据)

insert  into  表名(列名1、列名2、……)values(值1,值2,……),

                                            (值1,值2,……),

                                            (值1,值2,……),

                                              ……;

五、创建表设置复杂选项

1、列名中不允许有空值

create  table 表名

列名  数据类型  not  null,

……

);

空值:null

空字符串:’’(当数据类型为整形时,为0)

2、主键约束

(1)主键:用来唯一的标识表中的每一行记录

(2)特点:不能为空值(null),不能重复

(3)创建表时设置主键

    create  table  表名

   (

列名  数据类型  primary   key,

…………

);

(4)一个表最多只能有一个主键

3、自增列

(1)自增列必须有主键约束或唯一约束

(2)自增列默认是从1开始每次自增1的数字

(3)设置自增列

(4)一个表只能有一个自增列

create  table  表名

列名  数据类型  primary  key   auto­­­_increment,

……

);

Day02  MySQL

一、修改表结构(只有添加和删除列有column)

1、  向表中添加一个新列

alter  table  表名  add   column  列名  数据类型;(数据类型后还可加非空、主键等)

2、  修改表中列的数据类型

alter  tabe  表名  modify   列名  数据类型;

3、  修改表中列的列名和数据类型

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

4、  删除表中的列

alter  table  表名   drop  column  列名;

5、  向已有表中添加主键

alter  table  表名  add  primary  key(列名);

6、  删除主键

alter  table   表名  drop   primary  key;

练习

      -- 在已有主键的基础上添加自增

ALTER TABLE s2 MODIFY id INT  AUTO_INCREMENT;

INSERT INTO s2 VALUES(NULL,2,‘白‘,‘男‘);

-- 添加自增列(没有主键的基础上)

ALTER TABLE s2 ADD COLUMN id1 INT PRIMARY KEY AUTO_INCREMENT;

-- 下面 删除不了自增列的主键

ALTER TABLE s2 DROP PRIMARY KEY;

-- 删除自增

ALTER TABLE s2 MODIFY id INT;

-- 没有自增表示自增删除

INSERT INTO s2 VALUES(‘‘,3,‘白‘,‘男‘);

-- 删除主键

ALTER TABLE s2 DROP PRIMARY KEY;

二、约束(对表中数据的限制)

1、  主键约束:唯一标识表中每一行数据,限制数据不能重复,不能为空

2、  外键约束:限制两个表中主键列与外键列中数据的对应关系。外键列中的数据必须存在于主键列中,外键列中的数据可以重复。主键列中数据的修改和删除都会影响到外键列中的数据。

3、  唯一约束:限制数据不能重复,可以有空值(只能有一个空值)

4、  创建表时创建外键约束

create  table  主键表名

                     主键列  数据类型  primary  key,

                     ……

)engine=innodb;

 create  table  外键表名

                外建表的主键列  数据类型  primary  key,

                ……

                主键表中的主键列名   数据类型,

                foreign  key(主键表中的主键列)  references   主键表表名(主键表中的主键列名)

)engine=innodb;

5、  使用外键约束时,表的存储引擎必须是INNODB。

6、  在已有表中新增外键约束

alter  table  外建表的表名  add  foreign  key(外键列名) references  主键表表名(主键表中的主键列名);

7、  从已有的表中删除外键约束

alter  table   外键表表名  drop  foreign  key  外键约束名;(外键约束名是创建外键约束时默认创建的一个名称)

三、删除表中的数据。

1、  删除表中所有的数据

delete  from   表名

2、  删除满足条件的一行数据

delete  from  表名  where   条件;

delete  from  student  where  id=10;

delete  from  student  where  id<5;

四、修改表中的数据

1、  修改某列所有的数据

update  表名  set   列名=新值;

2、  修改多个列中所有的数据

update   表名  set  列名1=新值,列名2=新值,……;

3、  修改满足条件的列中的数据

update  表名  set   列名1=新值1,列名2=新值2,…… where  条件;

4、  某一列所有内容值加1;

update  表名  set   列名=列名+1;

五、查询数据

1、  查询表中所有的数据

select  *  from  表名;

2、  查询部分列的数据

select  列名1,列名2,…… from  表名;

3、  查询满足条件的语句

select  ……  from  ……  where   条件;

4、  运算符

(1)       算数运算符:+、-、*、/。

(2)       比较运算符:=、>、<、!=不等于、>=、<=。

(3)       逻辑运算符

逻辑与(并且的两个条件都成立):and

条件1  and  条件2

逻辑或(两个条件只要有一个条件成立):or

条件1  或  条件2

逻辑非:not

MySQL  day03

二、简单查询(关于where条件的查询)

1、去除重复值

 select  distinct  列名  from  表名   where   条件;

2、挑选出在……之间的数据   between …… and

 select 列名1、列名2……   from  表名 where  列名  between  起始值  and  终止值;

select 列名1、列名2……  from  表名  where  列名>=起始值  and  列名<=终止值;

3.列名等于括号内任意一个值时:in ;(not  in  不等于其中任意一个值时)

select  ……  from …… where 列名 in(值1,值2……);

select  ……  from …… where 列名 =值1  or 列名=值2……;

4、查询空值

   select …… from …… where 列名 is  null;(空格中是null)

select …… from …… where 列名 like ‘’;(空格中是空的字符串)

查询不是空值

 select …… from …… where 列名 is  not  null;

select …… from …… where 列名 not  like ‘’;(空格中是空的字符串)

5、如果列是空值,将其作为指定的数值进行运算:

update  表名  set   列名=列名+1

ifnull(列名,指定代替null运算的数值)

update  表名  set   列名=ifnull(列名,指定代替null运算的数值)+1;

6、模糊查询:like

通配符

(1)任意一个字符:  _

(2)任意的0到多个字符:  %

select …… from …… where 列名  like  ‘……’;(注意写like不必写等号)

姓名以a结尾:

select …… from …… where 列名  like  ‘%a’;

姓名第二位是a:

select …… from …… where 列名  like  ‘_a%’;

四、限制查询 limit

1、limit  n :显示前n行

2、limit  m,n:跳过m行,显示n行

select …… from …… where 条件  limit ……;

练习:

-- 员工表中前三行

SELECT * FROM 职工 LIMIT 3;

-- 员工表中9到12行

SELECT * FROM 职工 LIMIT 8,4;

-- 男员工的前5人

SELECT * FROM 职工 WHERE 性别=‘男‘ LIMIT 5;

五、排序 order  by

1、升序

     select …… from…… where…… order  by   列名 asc;(asc可有可无)

2、降序

select …… from …… where …… order  by  列名  desc;

3、如果按照多个列来排序 order  by  列名1,列名2,  那么先按照第一个列排序,当第一个列相同时再按照第二个列排序。

六、聚合函数

   1、最大值:max(列名)

   2、最小值:min(列名)

   3、和:sum(列名)

   4、平均值:avg(列名)

   5、统计个数:count(列名)或count(*)

      (1)count(列名):不统计列中空值的个数

      (2)count(*):统计列中所有值的个数包括空值

七、查询结果显示的列名重命名

    select  列名  as   显示的名字,……   from 表名;(as可以省略)

八、分组查询group  by

    select  ……  from  …… where …… group  by 列名……  limit ……; 

day 04  mysql

一、分组条件:having

1、 select ……

form……

where 不包含聚合函数的条件

group  by 列名

having  包含有聚合函数的条件

order  by……

limit ……

二、子查询(嵌套查询)

1、在一条查询语句中还有另一条查询语句。

select …… from……

where ……

(select …… from …… where ……);

2、 如果子查询结果多于1个,外层查询的条件中不能直接使用=,!=,>,<,>=,<=,而是需要使用>all ,  <all,  in,  not  in,

3、 all

(1)>all相当于 >max(列名)

(2)<all相当于 <min(列名)

4、any

  (1)=any相当于in

  (2)>any相当于>min(列名)

  (3)<any相当于<max(列名)

三、多表连接查询

1、交叉联接:两个表中的任意两个数据组合成一行构成的结果集。

2、内联接:两个表中满足联接条件的数据

  (1)select …… from 表1、表2  where 联接条件

      联接条件一般的格式:主键表表名.主键列名=外键表名.外键列名

  (2)内连接的关键字(inner可以省略):inner   join

       select …… form …… 表1  inner  join  表2  on  联接条件;

(3)表名起别名:如果表名重新命名,在查询语句中必须使用表的别名,而不能再使用表原来的名字。在查询语句中如果两个表的列名相同,那么必须写成:表名或表的别名.列名

给表名起别名:表名 as 别名(as可以省略)

4、 外联接:

(1)    左外联接 left   join

select …… from  左表  left  join  右表  on  联接条件;

左表中所有的数据,右表中只显示满足联接条件的数据

(2)    右外联接 right  join

select …… from  左表  reight  join  右表  on  联接条件;

右表中所有的数据,左表中只显示满足联接条件的数据

四、备份和还原

1、备份(linux系统中操作)

mysqldump  -u 用户名  -p密码  数据库名>文件名.sql

2、还原(linux系统中操作)

mysql  -u用户名  -p密码  数据库名<文件名.sql

3、mysql命令还原(mysql系统中操作)

(1)    登陆 mysql:mysql  -uroot  -p密码

(2)    选择数据库:use  数据库名

(3)    执行sql文件:source  文件名.sql 

-- 列出员工数超过三人的部门号和员工数

SELECT 所在部门,COUNT(*) FROM 职工 GROUP BY 所在部门 HAVING COUNT(*)>3;

-- 统计人数超过2个人的市

SELECT COUNT(*),籍贯 FROM 职工 GROUP BY 籍贯 HAVING COUNT(籍贯)>2;

-- 每种类型的图书的最低价格,最低价格大于50

SELECT book_name,MIN(sale_price) FROM mybook

GROUP BY book_type HAVING MIN(sale_price)>50;

-- 除了小说的每种类型的图书的平均数量,平均数量小于500,只显示前三行

SELECT book_type,AVG(book_nums)  FROM mybook

WHERE book_type!=‘小说‘ GROUP BY book_type

HAVING AVG(book_nums)<500 LIMIT 3;

-- 价格大于40的每种类型图书的价格和

SELECT book_type,SUM(sale_price) FROM mybook

WHERE sale_price>40 GROUP BY book_type;

 

-- 子查询(嵌套查询)

-- 查询与西游记是同一类型的图书

SELECT * FROM mybook

WHERE book_type=(SELECT book_type FROM mybook WHERE book_name=‘西游记‘);

-- 查询与中国通史是同一类型的图书,并且不显示中国通史

SELECT * FROM mybook

WHERE book_name!=‘中国通史

AND book_type=(SELECT book_type FROM mybook WHERE book_name=‘中国通史‘);

 

 

-- 查询比白夜行价格低的图书

SELECT * FROM mybook WHERE sale_price<

(SELECT sale_price FROM mybook WHERE book_name=‘白夜行‘);

-- 查询比小说类图书价格高的

SELECT * FROM mybook WHERE sale_price>ALL

(SELECT sale_price FROM mybook WHERE book_type=‘小说‘);

-- 查询比计算机类图书价格低的且数量比文学类高的

SELECT * FROM mybook WHERE sale_price<ALL

(SELECT sale_price FROM mybook WHERE book_type=‘计算机‘)

AND

book_nums>ALL

(SELECT book_nums FROM mybook WHERE book_type=‘文学‘);

-- 查询价格小于50的同类型的图书

SELECT * FROM mybook WHERE book_type IN

(SELECT book_type FROM mybook WHERE sale_price<50);

 

 

-- 基本工资比员工编号小于10的任意员工工资低的

SELECT * FROM 工资 WHERE 基本工资<ANY

(SELECT 基本工资 FROM 工资 WHERE 职工号<10 );

--

SELECT * FROM 工资 WHERE 基本工资<

(SELECT MAX(基本工资) FROM 工资 WHERE 职工号<10 );

 

-- 查询部门名称,员工姓名(两种写法)

SELECT 部门名,姓名 FROM 部门,职工 WHERE 部门.部门号=职工.所在部门;

SELECT 部门名,姓名 FROM 职工 INNER JOIN 部门  ON 部门.部门号=职工.所在部门;

-- 查询部门名称,员工姓名,基本工资(两种写法)

SELECT 部门名,姓名,基本工资 FROM 部门,工资,职工

WHERE 部门.部门号=职工.所在部门

AND 工资.职工号=职工.职工号;

--

SELECT  部门名,姓名,基本工资 FROM 职工

INNER JOIN 部门 ON 职工.所在部门=部门.部门号

INNER JOIN 工资 ON 职工.职工号=工资.职工号;

 

-- 左外联接

-- 显示所有的员工姓名,及员工对应的基本工资

SELECT 姓名,基本工资 FROM 职工

LEFT JOIN  工资 ON 工资.职工号=职工.职工号;

 

-- 右表联接

SELECT 姓名,基本工资 FROM 工资

LEFT JOIN  职工 ON 工资.职工号=职工.职工号;

 

以上是关于mysql数据库基础的主要内容,如果未能解决你的问题,请参考以下文章

MySQL数据库基础+ 数据库的基本操作?

mysql数据库之mysql基础命令

MySQL入门基础一-Mysql的基础体系架构

Mysql基础1

mysql基础学习笔记

mysql基础学习笔记