在公司一只在使用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语句
待补充