MySQL使用入门

关于MySQL的安装和配置可参见 http://jingyan.baidu.com/article/597035521d5de28fc00740e6.html

下面将分两部分介绍Mysql的使用。

 

一. DDL(数据定义语言)

所谓数据定义语言就是对数据库内部的对象进行创建、删除、修改的操作语言。它和 DML 语言的最大区别是 DML 只是对表内部数据的操作,而不涉及到表的定义、 结构的修改, 更不会涉及到其他对象。 DDL 语句更多的被数据库管理员(DBA) 所使用,一般的开发人员很少使用。

创建数据库: CREATE DATABASE dbname  例如:mysql-> create database test1;

查看数据库: Show databases;

选择数据库: USE dbname   例如:use test1

查看已选择的数据库的数据表:Show tables;

删除数据库: drop database dbname;   例如:drop databases test1;

创建表: CREATE TABLE tablename (column_name_1 column_type_1 constraintscolumn_name_2  column_type_2  constraints , ……column_name_n  column_type_nconstraints

column_name 是列的名字,column_type 是列的数据类型,contraints 是这个列的约束条件  

例如:create table emp(ename varchar(10),hiredate date,sal decimal(10,2),deptno int(2));

查看表的定义: DESC tablename  例如:desc emp;

删除表:DROP TABLE tablename   例如:drop table emp;

修改表:

(1)修改表类型:

ALTER TABLE tablename MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]

例如:alter table emp modify ename varchar(20);

2)增加表字段:

ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST | AFTER col_name]

例如: alter table emp add column age int(3);

3)删除表字段:

ALTER TABLE tablename DROP [COLUMN] col_name

例如: alter table emp drop column age;

(4)字段改名:

ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition[FIRST|AFTER col_name]

例如: alter table emp change age age1 int(4) ;

注意:change modify都可以修改表的定义,不同的是 change 后面需要写两次列名,不方便。但是 change 的优点是可以修改列名称,modify则不能。

5)修改字段排列顺序:

  例如:alter table emp add birth date after ename;

          alter table emp modify age int(3) first;

(6)表改名:

ALTER TABLE tablename RENAME [TO] new_tablename 

例如:alter table emp rename emp1;

 

二. DML(数据操作语言)

 数据操作语言是指对数据库中表记录的操作, 主要包括表记录的插入 (insert) 、 更新 (update) 、删除(delete)和查询(select) ,是开发人员日常使用最频繁的操作。

 1 . 插入记录: INSERT INTO tablename (field1,field2,……fieldn) VALUES(value1,value2,……valuesn);

例如:  insert into emp (ename,hiredate,sal,deptno) values('zzx1','2000-01-01','2000',1);

      insert into emp values('lisa','2003-02-01','3000',2);

         insert into emp (ename,sal) values('dony',1000);

一次插入多条记录:

INSERT INTO tablename (field1, field2,……fieldn) VALUES

(record1_value1, record1_value2,……record1_valuesn),

(record2_value1, record2_value2,……record2_valuesn),

……

(recordn_value1, recordn_value2,……recordn_valuesn);

例如:insert into dept values(5,'dept5'),(6,'dept6');

  2. 更新记录:

UPDATE tablename SET field1=value1field2.=value2,……fieldn=valuen [WHERE CONDITION]

例如:update emp set sal=4000 where ename='lisa';

同时更新多个表中的数据:

UPDATE t1,t2tn set t1.field1=expr1,tn.fieldn=exprn [WHERE CONDITION]

例如:update  emp  a,dept b  set  a.sal=a.sal*b.deptno,b.deptname=a.ename  where a.deptno=b.deptno;

  3. 删除记录:

DELETE FROM tablename [WHERE CONDITION]

例如:delete from emp where ename='dony';

一次删除多个表的数据:

DELETE t1,t2tn FROM t1,t2tn [WHERE CONDITION]

例如:delete a,b from emp a,dept b where a.deptno=b.deptno and a.deptno=3;

注意: 不管是单表还是多表, 不加 where 条件将会把表的所有记录删除, 所以操作时一定要小心。

   4.查询记录:

SELECT * FROM tablename [WHERE CONDITION

例如:select * from emp;等价于:select ename,hiredate,sal,deptno from emp;

(1)查询不重复的记录:

 例如:select distinct deptno from emp;

(2)条件查询:

 例如:select * from emp where deptno=1;

Where后面的条件还可以使用><>=<=!=等比较运算符,多个条件之间还可以使

orand 等逻辑运算符进行多条件联合查询。

例如:select * from emp where deptno=1 and sal<3000;

(3)排序和限制:

SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC|ASC]field2

[DESC|ASC],……fieldn [DESC|ASC]]

DESC ASC 是排序顺序关键字,DESC 表示按照字段进行降序排列,ASC 则表示升序

排列,如果不写此关键字默认是升序排列。

例如: select * from emp order by sal;

       select * from emp order by deptno,sal desc;

       SELECT ……[LIMIT offset_start,row_count]

其中 offset_start 表示记录的起始偏移量,row_count 表示显示的行数。

在默认情况下,起始偏移量为 0,只需要写记录行数就可以。

例如:select * from emp order by sal limit 3;

 显示 emp 表中按照 sal 排序后从第二条记录开始,显示 3 条记录:

 select * from emp order by sal limit 1,3;

(4)聚合:

SELECT [field1,field2,……fieldn] fun_name 

FROM tablename

[WHERE where_contition]

[GROUP BY field1,field2,……fieldn

[WITH ROLLUP]]

[HAVING where_contition]

fun_name表示要做的聚合操作,也就是聚合函数,常用的有sum(求和) 、count(*)(记录数)、max(最大值)、min(最小值)。

GROUP BY 关键字表示要进行分类聚合的字段, 比如要按照部门分类统计员工数量,部门就应该写在 group by 后面。

WITH ROLLUP 是可选语法,表明是否对分类聚合后的结果进行再汇总。

HAVING 关键字表示对分类后的结果再进行条件的过滤。

注意:注意:having where 的区别在于 having 是对聚合后的结果进行条件的过滤,而 where 是在聚合前就对记录进行过滤,如果逻辑允许,我们尽可能用 where 先过滤记录,这样因为结果集减小,将对聚合的效率大大提高,最后再根据逻辑看是否用 having 进行再过滤。

例如:select count(1) from emp;

 select deptno,count(1) from emp group by deptno;

 select deptno,count(1) from emp group by deptno with rollup;

 select deptno,count(1) from emp group by deptno having count(1)>1;

 select sum(sal),max(sal),min(sal) from emp;

(5)表连接:

 表连接分为内连接和外连接, 它们之间的最主要区别是內连接仅选出两张表中

 互相匹配的记录,而外连接会选出其他不匹配的记录。我们最常用的是内连接。

 例如:select ename,deptname from emp,dept where emp.deptno=dept.deptno;

 外连接有分为左连接和右连接:

左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。

右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录。

例如:select ename,deptname from emp left join dept on emp.deptno=dept.deptno;

 select ename,deptname from dept right join emp on dept.deptno=emp.deptno;

(6)子查询:

用于子查询的关键字主要包括: innot in=!=existsnot exists 等。

 例如:select * from emp where deptno in(select deptno from dept);

如果子查询的记录书唯一,可以用=代替in

某些情况下,子查询可以转化为表连接。表连接在很多情况下用于优化子查询。

(7)记录联合:

SELECT * FROM t1

UNION|UNION ALL

SELECT * FROM t2

……

UNION|UNION ALL

SELECT * FROM tn;

UNION ALL 是把结果集直接合并在一起,而 UNION 是将

UNION ALL 后的结果进行一次 DISTINCT,去除重复记录后的结果。

例如:select deptno from emp union all select deptno from dept;

      select deptno from emp union select deptno from dept;

posted @ 2016-04-28 20:25  小z1情调  阅读(106)  评论(0编辑  收藏  举报