您当前的位置: > 技术探讨 >
深入浅出mysql 基础篇
发布时间:2019-05-25 14:25编辑:海阔天空阅读()
SQL 是Structure Query Language(结构化查询语句)缩写
SQL语句分为3个类别
1)DDL(Data Definition Languages)语句:数据定义语言,定义了不同的数据段、数据库、表、列、索引等对象。常用的语句关键词 create、drop、alter等
2)DML(Data Manipulation Language)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性。常用的语句关键词insert、delete、update、select
3)DCL(Data Control Language)语句:数据操控语句,用于控制不同数据段直接的许可和访问级别的语句。定义了数据库、表、字段、用户的访问权限和安全级别。常用的语句关键词包括grant、revoke
DDL语句(数据定义语言)对数据库内部的对象进行创建、删除、修改等操作的语言。
1)创建数据库 create database dbname;
查看数据库 show databases;
选择数据库 use dbname;
查看数据表 show tables;
2)删除数据库 drop database dbname; (数据库删除后,下面的所有数据表都会全部删除,删除前一定要仔细检查并做好相应备份)
3)创建表 create table tablename;
查看表定义 desc tablename;
查看创建表的SQL语句 show create table tablename \G;
4)删除表 drop table tablename;
5)修改表 alter table tablename MODIFY column_definition;
新增加字段 alter table tablename add col_name;
删除字段 alter table tablename drop col_name;
字段改名 alter table tablename CHANGE old_col_name column_definition;(change和modify都可以修改表的定义,不同的是 change 后面需要写两次列名,不方便。但change 的优点是可以修改列名称,modify不能)
修改字段排列顺序 字段增加和修改语法(ADD/CHANGE/MODIFY)中,都有一个可选项 first|after column_name 这个选项可以用来修改字段在表中的位置,ADD增加的新字段在表的最后面、CHANGE/MODIFY 默认都不会改变字段的位置 例 alter table tablename add birth date after ename;
修改字段age,将它放在最前面 alter table emp modify age int(3) first;
(CHANGE/FIRST/AFTER)等关键字都属于Mysql在SQL上的扩展,在其他数据库不一定适用
更改表名 alter table tablename tename new_tablename;
将表emp改名为emp1 alter table emprename emp1;
DML语句 操作是指对数据库中表记录的操作,主要包括表记录的插入(insert)、更新(update)、删除(delete)、和查询(selete)
1)插入记录 insert into tablename (field1,field2...)values(value1,value2...);(可以不用指定字段名称,但是values)后面的顺序应该和字段的排列顺序一致、
2)更新记录 update tablename set filed1=value1 [where condition] ;(多表更新的语法更多地用在了根据一个表的字段来动态地更新另一个表的字段)
3)删除记录 delete from tablename [where condition];(不管是单表还是多表,不加where条件将会把表的所有记录删除)
4)查询记录 select * form tablename [where condition];(其中" * " 表示要将所有的记录都选出来,也可以用逗号分割所有字段来代替
查询不重复的记录 select distinct deptno from emp;
条件查询 select * from where id = 1;(可以使用>、<、>=、<=、!=等比较运算符、多个条件之间还可以使用or、and等逻辑运算符进行多条件联合查询);
排序和限制 select * from tablename where id !=0 order by id asc;(desc和asc 是排序顺序关键字,desc表示倒序排序,asc表示升序排序、如果排序字段的值一样,则值相同的字段按照第二个排序字段进行排序,以此类推);
排序后显示一部分使用LIMIT 关键字来实现 select * form where id > 0 order by id asc limit[ offset_start,row_count ];(其中offset_start表示记录的起始偏移量,row_count表示显示的行数;
聚合 sum(求和)、count(*)(记录数)、max(最大值)、min(最小值)
GROUP BY 关键字表示要进行分类聚合的字段。
WITH ROLLUP 是可选语法,表示是否对分类聚合后的结果进行再汇总。
HAVING关键字表示对分类后的结果在进行条件的过滤。(having 和 where 的区别在于,having 是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤)。
表连接 (表连接分为内连接和外连接,区别在于:内连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录)(外连接又分为左连接和右连接 左连接:包含所有的左边表中的记录甚至右边表中没有和他匹配的记录、右连接:包含所有右边表中的记录甚至是左边表中没有和他匹配的记录)。
子查询 (当进行查询的时候,需要的条件是另外一个select 语句的结果,这个时候就要用到子查询,用于子查询的关键词主要包括 in、not in 、= 、!= 、exists、not exists 等)
记录联合 (将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示出来,这个时候就用到 union 和 union all 关键字 union all和union 的主要区别是 union all 是把结果集直接合并在一起,而union是将union all后的结果进行一次 distinct 去除重复记录后的结果);
DCL语句(主要是管理系统中的对象权限时使用)
创建一个用户dd245,具有hktk数据库中所有表的select/insert权限
grant select,insert on hktk.* to 'dd245'@'localhost' indentified by '123';
收回用户dd245的insert权限,只能对数据库进行select操作
revoke insert on hktk.* from 'dd245'@'localhost';
帮助的使用
?contents 显示所有可供查询的分类
?data types 查看mysql 中都支持那些数据类型
?关键字 show,create 查看某个关键字都能用到哪些
查询元数据信息
information_schema
SCHEMATA 该表提供了当前mysql实例中所有数据库的信息,show databases 的结果取之此表;
TABLES 该表提供了关于数据库中的表的信息(包括视图),详细表述了某个表属于哪个schema、表类型、表引擎、创建时间等信息、show tables from schemaname 的结果取之此表。
COLUMNS 该表提供表中的列信息,详细表述了某张表的所有列以及每个列的信息。show columns from schemaname tablename 的结果取之此表。
STATISTICS 该表提供了关于表索引的信息。show index from schemaname.tablename的结果取之此表。