mysql数据库参考⽂献2018_2018-4-25mysql数据库基础2018-4-25mysql数据库基础
新建 模板 ⼩书匠
1. 数据库分类
RDBMS:关系数据库管理系统
⾮结构化和半结构化的数据:NoSQL(Not only SQL)
2. mysql简介
1.MYSQL数据库由服务器端和客户端(C/S)组成。服务器中主要存储数据⽂件和服务程序。
2.要访问数据库服务器,必须通过客户端。
SQL:结构化的查询语⾔,以mysql数据库作为载体。
3.客户端可以分为两⼤类:命令⾏(⾃带),可视化⼯具。
Mysql的核⼼是存储引擎,常⽤的有InnoDB(事务性数据库的⾸选引擎,⽀持事务安全表(ACID)),MyISAM(数据仓库,检索速度快)
4.通过命令⾏客户端访问数据库服务器:
1)配置环境变量path
path = %path%;+路径
2)打开命令⾏窗⼝
开始—输⼊”cmd”—回车
3)启动mysql客户端程序(),指定帐号和密码,连接服务器
mysql -u root –p —回车—输⼊密码1234—回车
mysql -h +服务器地址— -u root –p
4)查看当前有哪些数据库:
mysql> show databases;
5)使⽤某个数据库之前,要先选择它:
mysql> use world;
6)看看当前这个数据库中,有哪些数据表:
mysql> show tables;
7)退出服务器:mysql>exit
3.常⽤命令
创建数据库:mysql>create database+数据库名;
删除指定的数据库:mysql>drop database+数据库名;
打开要操作的数据库:mysql>use+数据库名;
查看有哪些数据表:mysql>show tables;
创建数据表(部门表:depid,depname): mysql>creat table department(depid int,depname varchar(100));
查看数据表的结构:mysql>desc department;
主键约束:⾏完整性—要求每⾏记录不能重复,
主键能够唯⼀的标识表中的⼀条记录。
创建数据表,⾸先设计表的结构(有哪些字段/列):
员⼯信息表
create table employee(
empid int primary key auto_increment,#auto_increment只有在MYSQL中有,其他数据库中是没有的
empname varchar(50) not null,#空间长度可变,你需要多少就给你多少
gender char(1) default ‘m’,
salary float(9,2),
dept varchar(20),
depid int,
constraint fk_depid foreign key(depid) references department(depid)
);
部门信息表
create table department(
depid int primary key,
depname varchar(50) not null,
location varchar(100)
);
⼀次性导⼊多条记录,只需要在values后⾯跟多个括号,括号之间⽤逗号连接,最后⼀个跟分号。括号内依次输⼊字段对应的值。修改表结构:
alter table
将数据表的名称department改为depart:
alter table department rename depart;
为department增加⼀个新的字段location varchar(200):
alter table department add location varchar(200);
修改已有字段的数据类型:
alter table department modify location varchar(100);
修改已有字段的名称和数据类型:
alter table department change location address varchar(100);
在数据库中已经存在的数据表的结构上增加表字段:
alter table +表名 add +字段及字段的各种属性
在数据库中已经存在的数据表的结构上删除表字段:
alter table +表名 drop +字段
删除表的外键约束:
alter table+表名 drop foreign key +外键字段
删除/添加表的主键约束:
alter table+表名 drop(add) primary key(字段名)
删除数据表
就是将数据库中已经存在的表从数据中删除,在删除表的同时,表的定义和表中所有的数据均会被删除,删除被其他表关联的主表,分⼏种情况:
先删除与它关联的⼦表,再删除⽗表
如果要保留⼦表, 则只需将关联的表的外键约束条件取消,然后就可以删除⽗表
为id=2002的员⼯分配部门:
update employee set deptid=103 where empid=2002;
将员⼯2006调动到市场营销部,并且⽉薪上涨10%:
update employee set deptid=103 ,salary=salary*1.1 where empid=2006;
将所有⽉薪低于10000的员⼯薪资上涨10%:
update employee set salary=salary*1.1 where salary<10000;
删除记录:
delete from department where deptid=101;
查看数据表中已有的数据:
select * from+表的名称;
查看基本表结构:
desc+表名
删除表内的所有的数据:
delete/truncate table +表名;
delete与truncate删除数据的区别:
delete进⾏删除时是逐列进⾏检查,具有约束的列不能被直接删除,具有数据的安全性及引⽤的完整性;
truncate是直接删除整张表然后再进⾏表的重建;
单表查询
查看表内满⾜条件的信息:select * from+表名 where+条件(*表⽰所有的字段),若只查询某些字段的满⾜条件的信息,则⽤:select +字段名 from + 表名 where +条件(字段名之间⽤逗号连接)
带in关键字的查询:select * from +表名 where + 字段名 in ( , );(括号内为范围,若要查询不再范围内的信息,则⽤not in,⽤于离散型数据或者字段)
带between 关键字的查询:select * from +表名 where + 字段名 between+最⼩值 and +最⼤值;(⽤于连续型数据,不包含范围的边界值)
带like的字符匹配查询(模糊查询)(%匹配任意长度的字符,_表⽰精确的单个字符):select * from +表名 where + 字段名like+’%条件%’;(%标识有字段)
select * from +表名 where + 字段名like+’_条件’;(⼀个_标识⼀个字符)
在排查过程中,任何值与null进⾏运算,运算结果都是null.要对其进⾏⽐较时,要⽤is null或者is not null.
多条件查询and: select * from +表名 where +条件 and 条件(!=表⽰不等于,and表⽰和,必须满⾜所有条件);and的优先级要⾼于or. or(表⽰或者,只要满⾜⼀个条件即可):select * from +表名 where +条件 or 条件
distinct 去重:select distinct+字段名 from + 表名 where +条件(挑出满⾜条件的值,⽆重复)
order by排序:select * from +表名 where +表名 order by+条件(默认是升序,要降序的话则在最后加上desc)
分组查询
分组统计(group by对数据进⾏分组,通常和集合函数⼀起使⽤)
select count(*) from +表名 group by +字段名(count(*)是对整⾏进⾏统计总数)
select+字段名,count(*) from +表名 group by +字段名(分组统计,前后两个字段名相同)
分组查询
(group_countat()函数将每个分组中各个字段的值显⽰出来)
select+字段名,count(*) as +种类 group_countat(字段名) as+名称from +表名 group by +字段名
分组查询、排序
select+字段名,count(*) as +种类 group_countat(字段名) as+名称from +表名 group by +字段名+order by numbers.
筛选having与group by⼀起使⽤,分组查询以后对数据进⾏筛选,having后加条件。
在查询最后添加⼀个统计栏:with rollup
限制查询:limit(只有MYSQL数据库⽀持limit关键字),显⽰前⼏条记录:limit+数字;
从第m条记录开始,显⽰n条记录:limit (m-1),n;
case when语句:⽤于计算条件列表并返回多个可能结果的表达式之⼀。
聚合函数
avg()求平均,max()最⼤值,min()最⼩值,sum()求和count()计数
sum()在计算时遇到null会⾃动忽略。
加快查询速度
使⽤索引,索引是加快查询的重要⼯具
创建索引的⽅法:create index 索引名 on 表名(列名)
删除指定索引的命令:drop index 索引名 on 表名(列名)
mysql删除重复的数据保留一条不适合使⽤索引的场合:
--索引是加快查询的最重要的⼯具
--模糊查询要求后⽅⼀致或者部分⼀致的场合
--对⽅使⽤了运算/函数的场合
--复合索引的第⼀列没被包含在where条件语句中的场合。
多表连接查询
内链接查询(inner join):进⾏表间某些列数据的⽐较操作,并列出这些表中与连接条件相匹配的数据⾏,组合成新的纪录。(select 字段名from 表⼀,表⼆ where 条件——将表⼀和表⼆满⾜条件的列连接起来,并显⽰某些字段)
内链接查询-⾃连接:如果在⼀个连接查询中,涉及到的两个表都是同⼀个表,这种查询称为⾃连接查询,⾃连接是⼀种特殊的内连接,它是指相互连接的表在物理上为同⼀张表,但可以在逻辑上分为两张表
外连接查询:有时需要包含没有关联到的⾏数据,即返回的查询结果集合中不仅包含符合连接条件的⾏,⽽且还包括左表、右表、或两个连接表中的所有数据⾏。left join:左连接返回包括左表中的所有记录和右表中连接字段相等的记录。right join:右连接,返回包括左表中的所有记录和右表中连接字段相等的记录
注:使⽤左外连接:左侧的连接表中所有的记录都会显⽰
也可使⽤右外连接:右侧的连接表中所有的记录都会显⽰
复合条件连接查询:复合条件连接查询是在连接查询的过程中,通过添加过滤条件,限
制查询的结果,使查询的结果更加准确
⼦查询:⼦查询指⼀个查询语句嵌套在另⼀个查询语句内部的查询
带any/some关键字的⼦查询,这两个关键字是同义词,表⽰满⾜其中任⼀条件,它们允许创建⼀个表达式对⼦查询的返回值列表进⾏⽐较,只要满⾜内层⼦查询中的任何⼀个⽐较条件,就返回⼀个结果作为外层查询的条件。any关键字接在⼀个⽐较操作符的后⾯,表⽰若与⼦查询返回的任何值⽐较为TRUE,则返回TRUE。
带all关键字的⼦查询:带all关键字与any和some不同,使⽤all时需要同时满⾜所有的内层查询的条件。all关键字接在⼀个⽐较操作符的后⾯,表⽰若与⼦查询返回的任何值⽐较为TRUE,则返回TRUE。
带exists关键字的⼦查询:exists关键字后⾯的参数是任意的⼦查询,系统对⼦查询进⾏运算以判断他是否返回⾏,如果⾄少返回⼀⾏,那么exists返回的结果是false,此时外层语句将不进⾏查询。
带in关键字的⼦查询:in关键字进⾏⼦查询时,内层查询语句仅仅返回⼀个数据列,这个数据列⾥的值将提供给外层查询语句进⾏⽐较操作。Select语句中可以使⽤not in关键字,其作⽤与in正好相反。
带⽐较运算符的⼦查询:⼦查询时可以使⽤其他的⽐较运算符,如“=”、“!=”等。
合并查询结果:利⽤union关键字,可以给出多条select语句,并将它们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同,各个select语句之间使⽤union或union all关键字分隔。Union不使⽤关键字all,执⾏的时候删除重复记录,所有返回的⾏都是唯⼀的;使⽤关键字all的作⽤是不删除重复⾏也不对结果进⾏⾃动排序。基本语法格式如下:select column… from table1 union[all] select column…from table2
使⽤union all包含重复的⾏,在前⾯的例⼦中,分开查询时,两个返回结果中有相同的记录,union从查询结果集中⾃动去除了重复的⾏,如果要返回所有匹配的⾏,⽽不进⾏删除,可以使⽤union all。
为表/字段取别名:当表/字段的名字很长或执⾏⼀些特殊查询是,为了⽅便操作或者多次使⽤相同的表/字段时,可以为表/字段指定别名,⽤这个别名替代原来的表/字段名称,为表/字段取别名的语法格式为:表名/字段名 【as】 表/字段别名。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论