MYSQL基础总结

在公司一只在使用MYSQL数据库,简单的使用一些命令,但是很少有总结,用的时候采取查,现在刚还好有时间总结下:

一、SQL分类

主要可以分为三个类别:

DDL(Data Definition Language):数据定义语句,操作不同的数据段,数据库,表,列,索引等数据库对象

DML(Data Manipulation Language):数据操作语句,增删改查数据库记录

DCL(Data Comntrol Language):数据控制语句,控制访问权限

二、DDL语句

1.创建数据库

CREATE DATABASE dbname;

查看数据库

SHOW DATABASES;

切换数据库

USE DATABASES;

2.删除数据库

DROP DATABASE dbname;

3.创建表

CREATE TABLE tablename(
column_name_1 column_type_1 constraints,
column_name_2 column_type_2 constraints,
...
column_name_n column_type_n constraints,
)

mysql的表名是以目录的形式存在于磁盘上的,所以表名的字符可以是以任何目录名允许的字符,column_name:列名,column_type:列的数据类型,constraints列的约束条件。

查看表的定义

DESC tablename

查看创建表的SQL语句

SHOW CREATE table tablename \G
可以看到除了表的定义外,可以看到engine(存储引擎)和charset(字符集)
\G使记录能够按照字段竖向排列

4.删除表

DROP TABLE tablename;

5.修改表

对于已经创建好的表,而且表中已经有大量的数据,不建议删除表,再重新创建表,第一涉及到数据的重新加载,第二如果有服务访问表,也会影响服务,建议使用alter table语句
1.修改表类型
ALTER TABLE tablename MODIFY [COLUMN] column_definition [FIRST|AFTER col_name]
eg:修改表emp的name字段,将varchar(10)改为varchar(20)
alter table emp modify name varchar(20)
2.增加表字段
ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST|AFTER col_name]
eg:alter table emp add column age int(3)
3.删除表字段
ALTER TABLE tablename DROP [COLUMN] col_name
eg:alter table emp drop column age;
4.字段改名
ALTER TABLE tablename CHANGE [column] old_name column_definition  [FIRST|AFTER col_name]
eg:alter table emp change age age_new int(4)
注意:change和modify都可以修改表的定义,不同的是change后面需要写两次列名,不方便,但是change的优点是可以修改列名,modify则不能
5.修改字段的排列顺序
ADD增加的字段默认是加在表的最后位置,而CHANGE/MODIFY默认都不会改变列的位置,可以使用first|after col_name改变列的位置
eg:alter table emp add birtch date after name;    alter table emp  modify age int(3) first;
6.更改表名
ALTER TABLE tablename RENAME [TO] new_tablename; 

 三、DML语句

对表记录的操作(增insert删delete改update查select)

1.插入记录

INSERT INTO tablename(field1,field2,field3,...fieldn) VALUES (value1,value2,value3,...valuen)
1.也可以不用指定字段名称,但是values的值要和字段顺序一致
2.含可空字段,非空字段但是含有默认值的字段,自增字段,可以不用insert后的字段列表里面出现,values后面只写对应字段名称的value,这些没写的字段可以设置为NULL,默认值,自增的下一个数字,可以缩短SQL语句的复杂性
eg:insert into emp (name,sal) values ('chenxi',100000),其他都是默认值
3.可以一次性插入多条记录
insert into emp values(xx,xx,xx),
(xx,xx,xx),
...
(xx,xx,xx);

2.更新记录

UPDATE tablename SET field1=value1,field2=value2,...,fieldn=valuen[WHERE CONDITION]
eg;update emp set sal=4000 where name='chenxi'
可以同时更新多个表的字段

3.删除记录

DELETE FROM tablename [WHERE CONDITION]

注意:不管是单表,还是多表,不加where条件将会把表的所有记录删除

 4.查询记录

1.查询不重复记录
SELECT DISTINCT deptno from emp;
2.条件查询
SELECT * from emp where deptno=1;
3.排序和限制
SELCT * FROM tablename [WHERE CONTINON] [ORDER BY field [DESC|ASC],field2[DESC|ASC],...fieldn[DESC|ASC]
4.限制条数
SELCT ... [LIMIT offset_start,row_count],其中offset_start表示记录的起始偏移量,row_count表示显示的行数
默认情况下,起始偏移量为0,只要记录行数就可以,这是,实际显示的就是前n条记录。
如果要显示emp表emp表按照sal排序后从第二条记录开始的3条记录,可以使用使用一下命令:
SELECT * FROM emp ORDER BY sal limit 1,3;
5.聚合
SELECT [fieldq,field2,field3,..,fieldn] fun_name
FROM tablename
[WHERE where_condition]
[GREOUP BY field1,field2,...,fieldn]
[WITH ROLLUP]
[HAVING where_conditions]
fun_name:聚合函数
GROUP BY:分类聚合的字段
WITH ROLLUP:表明是否对分类聚合后的再汇总
HAVING:表示对分类后的结果再进行条件过滤
6.表连接
内连接,左连接,右连接
内连接:inner join 选出两张表中相互匹配的记录
左连接:left outer join 选出所有左表中的记录和和左表匹配的右表的记录
右连接:left outer join 选出所有右表中的记录和右表匹配的左表的记录
7.子查询
某些情况下,当进行查询的时候,需要的条件是另外一个select语句的结果,这个时候就用到子查询。关键字in,not in,=,!=,exists,not exists
8.记录联合
UNION ALL,UNION,区别UNION去重 

 四、DCL语句

待补充

posted @ 2019-03-25 17:50  行走的灵魂  阅读(279)  评论(0编辑  收藏  举报