之前对于数据库一直都是用过的程序,没有系统学过,在面试时吃过不少亏,说不出个所以然,我还是好好康康比较靠谱,秋招都快过了,我好慌啊淦。
第一章.MySQL的安装与配置。
启动服务:打开到mysql对应目录下的bin文件夹,执行命令mysqld --console
关闭服务:mysqladmin --uroot shutdown
第二章.SQL基础
2.1.SQL简介
SQL(Structure Query Language(结构化查询语言)),它是使用关系模型的数据库应用语言。
关系型数据库:关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。
2.2.SQL使用入门
2.2.1 SQL分类
启动服务后,连接服务器命令:mysql -u用户名 -p然后输入密码,进入到如下界面:
(退出是exit)
DDL:数据定义语言,定义了不同的字段、数据库、表、列、索引等数据库对象。创建、删除、修改等操作的语言,且对象为表的定义和结构等,DLL语句更多由数据库管理员使用。
1.新建一个数据库:create database DBname。
注意:1.每一句后面需要跟一个; 2.重名数据库无法创建
2.显示所有的数据库:show database
既然无法重名嘛,那就先看看有哪些数据库咯
test_1数据库以上的都是MySQL默认的数据库。
·information——schema:mysql自带的一个信息数据库,其保存着关于mysql服务器所维护的所有其他数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权限等
也就是说当你建立一个新的数据库,或者在已有的数据库中增删改表的话,都会记录在information_schema库中。
·mysql:存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。
·performance_schema:主要用于收集数据库服务器性能参数。
·sys:sys库是一个简单版的performance_schema,mysql5.7增加了sys 系统数据库,通过这个库可以快速的了解系统的元数据信息,这个库确实可以方便DBA发现数据库的很多信息,解决性能瓶颈都提供了巨大帮助。
·test:空的数据库,用于测试用。
3.使用数据库 use DBname
4.删除数据库 drop DBname(注意:别把默认的数据库删了(test除外)...)
注:若库中含有表单,则会将其一并删除。若有重要数据记得备份。
下面是对表的操作。
4.创建表 Create table tablename(
column_name_1 column_type_1 constraints,
...
column_name_n column_type_2 constraints)
由于MySQL的表名是以目录的形式存在于磁盘,固命名可以用任何目录允许的名字。
column_name 列名,column_type列的数据类型,constraints约束。
这样一个学生表就创建好了,我们来查看一下(DESC TABLEname)。
但是这样输出的信息不够全面,若想得到更全面的信息还可以用show create table tablename \G
报后面那个error是因为\G后面不需要;
这样就还能看到存储引擎(engine)和字符集(charset)等信息。
\G的作用是使得记录能够竖向排列。
4.删除表 DROP Table tablename
5.修改表
(1)修改表类型 alter table tablename modify [column] column_definition [first|after col_name]
例如:原表
修改后
(2)增加表字段 alter table tablename ADD [COLUMN] column_definition [First|after col_name]
(3)删除表字段:alter table tablename drop [column] col_name
(4).字段改名:alter table tablename change [column] old_clo_name column_definition [Frist|After col_name]
change与moditfy一样可以修改类型,不过多一个修改列名的功能。
(5)修改顺序
用可选项[first|after_column_name]即可(add/change/modify)。
注:change/frist|after column这些关键字属于MySQL在标准SQL上的扩展,在其他数据库不一定适用。
(6)更改表名 alter table tablename rename [to] new_tablename
DML语句:数据操纵语句,用于添加(insert)、删除(delete)、更新(update)和查询(select)数据库表记录,并检查数据完整性。
1.插入记录 insert into tablename (field1,field2,field3...fieldn) values(value1,...,valuen);
能看出这些错在哪嘛???emmm第一个括号写成全角的了....淦
这种形式必须顺序与字段顺序一致
对于可空字段、非空但含有默认值、自增字段可以不用在insert里后面出现。
2.更新数据 UPDATE tablename set field1=value1,field2=value2...fieldn=valuen[where condition]
不加where语句限定就全改了
此外update命令还可以同时更新多个表中的数据
update t1,t2...tn set t1.filed1=expr1...tn.fieldn=exprn [where condition]原表
更新后,由此可见,mysql对数据的修改都是基于原数据进行的(火锅的价格)。
3.删除记录delete from tablename [where contition]
如果不使用where关键字便会将整个表中的数据清空。
如果需要删除多个表的数据,语法如下:
DELETE t1,t2,t3... from t1,t2,...tn [where contition];
(如果from后面的表名用别名,则delete后面也要用相应的别名。)
原表
删除后
删除操作一定要小心!!!删库跑路!
4.查询记录
(1)select * from tablename [where condition]查询全表记录。
这个语句在之前显示数据时已经出现过
*通配符的作用是选定所有记录,也可用逗号分隔的所有字段代替。显示顺序与输入的字段顺序一致
如果想显示不重复的记录可以使用distinct关键字。
(2)条件查询 where
除了=还有、>=、<=、!=等比较运算符,多个条件之间可以使用or、and等逻辑运算符进行链接。
(3)排序和限制。select * from tablename [where condition][order by field1[desc|asc],field2[desc|asc],...,feildn [desc|asc]];
order by关键字用途是实现排序,desc是进行降序排列,asc则为升序。默认升序排列
如果排序的属性里有重复的怎么排呢?可以按照另外的顺序排列
这里就先按id降序排列,再按name升序排列。
如果对于排序后的记录只想显示一部分。则可以使用limit关键字:
select...[limit offset_start,row_count];
offset_start:起始偏移量,row_count:显示行数。1.显示三条记录 2.显示起始位置偏移到1位后的三条记录 3.如果要求显示的记录数大于总记录行数,则显示偏移后的所有记录。
limit和order to经常配合着使用来进行分页显示。
注意:limit是mysql拓展sql92后的语法,其他数据库并不能通用。
(4).聚合:汇总操作,select [field1,field2,...,fieldn]fun_name from tablename [where where_contition][group by filed1,filed2,...,fieldn[with rollup]][having where_contition];
fun_name:聚合函数,表示要进行的聚合操作,常用的有sum(求和)、count(*)(记录数)、max(最大值)、min(最小值)。
group by:表示要进行分类聚合的字段。
with rollup:是可选语法,表示是否对分类聚合后的结果进行再汇总。
having:对分类后的结果进行条件的过滤。与where的区别是,where是聚合前就对记录进行过滤。统计学生的人数
统计各id数的数量
分别统计各id的数量后再汇总
统计id人数大于的学号以及总人数
统计出id和、最大id、最小id、id中位数
(5)表连接
当需要同时显示多个表中的字段时,可以用表连接来实现这样的功能。分为内连接和外连接。
内连接:仅选出两张表中相互匹配的记录。
外连接:选出其他不匹配的记录。(内连接)第一个错误:无法定位同名的字段的所属表,解决方法在前面显式的写出表名。第二个错误:表写了别名,后面的都需要用别名替代。
外连接非为:
左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。
右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录。左连接
(6)子查询 关键字:in 、not in、=、!=、exists、not exists
子查询。在这种情况下也可使用表连接。
如果子查询记录唯一也可以使用=
有时表连接也可代替子查询
子查询与表连接的转换主要应用于两方面:MySQL4.1以前版本不支持子查询。
表连接在很多情况下用于优化子查询。
(7)记录查询 union和union all
union all:将两个结果集合并在一起;union all
union:将union all结果进行一次distinct(去重),去除重复记录后的结果。
DCL语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。用于控制不同数据段直接的许可和访问级别的语句。
不晓得为啥我这边运行不了这些语句...