一、常用数据库语句: 1.查询系统中都存在哪些数据库: show databases; 2.创建数据库gaoxi: create database gaoxi default character set utf8; 3.选择要操作的数据库: use gaoxi; 4.查看使用的数据库中创建的所有数据表: show tables; 5.删除数据库: drop database gaoxi; 6.在数据库中创建一张表的基本语法: create table tablename(column_name_1 column_type_1 constraints,....,column_name_n column_type_n constraints); 其中:column_name是列的名字,column_type是列的数据类型; 7.查看表的定义: desc tablename; 8.查看创建表的SQL: show create table tablename \G; 9.删除表: drop table tablename; 10.修改表: (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); (5)修改字段排列顺序: 字段增加和修改语法(add/change/modify)中都有一个可选项first|after column_name,可以用来修改字段在表中的位置,默认增加的新字段是加在表的最后,而修改默认位置不变。 譬如:a.将新增的字段birth date加在ename之后: alter table emp add birth date after ename; b.修改字段age,将它放在最前面: alter table emp change age1 age int(3) first; (6)更改表名,语法如下: alter table tablename rename [to] new_tablename; 譬如:将表emp改名为emp1 alter table emp rename to emp1; 11.DML语句 (1)同时更新多个表中的数据: update t1,t2...tn set t1.field1=expr1,...tn.fieldn=exprn; (2)删除记录: a.delete from tablename [where condition]; b.一次删除多个表中的数据: delete t1,t2...tn from t1,t2...tn [where condition]; 如果from后面的表名用别名,则delete后面也要相应的别名。 delete a,b from emp a,dept b [where condition]; (3)查询语句: a.查询不重复的记录 譬如:select distinct deptno from emp; b.排序和限制 取出按某个字段进行排序后的记录结果集,需用到数据库的排序操作,用order by来实现。 1)desc按照字段的降序进行排序,asc按照字段的升序进行排序 譬如:对于deptno相同的两条记录,按照工资由高到低排序: select *from emp order by depnto,sal desc; 2)对于排序后的记录只需要显示一部分,用到limit关键字 select .....[limit offset_start,row_count]; offset_start:记录的起始偏移量,默认是从0开始 row_count:显示的行数 譬如:显示emp表中按照sal排序后从第二条记录开始,显示3条记录: select *from emp order by sal limit 1,3; 注意:limit和order by经常一起配合使用来进行记录的分页显示。 c.聚合函数的使用 select [field1,field2...fieldn] fun_name from tablename [where wher_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进行再过滤。 譬如: 1)要emp表中统计公司的总人数:select count(*) from emp; 2) 统计各个部门的人数:select deptno,count(*) from emp group by depnto; 3)既要统计各部门人数也要统计总人数:select deptno,count(1) from emp group by deptno with rollup; 4)统计人数大于1人的部门:select deptno,count(1) from emp group by deptno having count(*)>1; 5)统计公司所有员工的薪水总额、最高和最低薪水:select sum(sal),max(sal),min(sal) from emp; (4)表连接 分为内连接和外连接,它们之间的最主要区别是内连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录。 譬如: 查询出所有雇员的名字和所在部门的名称: select e.ename,d.deptname from emp e,dept d where e.deptno=d.deptno; 外连接分为左连接和右连接,具体定义: 左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。 譬如:查询emp中所有用户名和所在部门的名称: (左连接) select e.ename,d.deptname from emp e left join dept d on e.deptno=d.deptno; (右连接) select e.ename,d.deptname from emp e right join dept d on e.deptno=d.deptno; (5)子查询 用于子查询的关键字主要包括:in、not in、=、 !=、exists、not exists等 譬如: a.查询emp表中所有部门在dept表中的所有记录 select *from emp where deptno in(select distinct deptno from dept); 子查询可以转化为表连接,例如: select emp.* from emp ,dept where emp.deptno=dept.deptno; 注意:子查询和表连接之间转换主要应用在两个方面。 a.MySQL4.1以前的版本不支持子查询,需要用表连接来实现子查询的功能 b.表连接在很多情况下用于优化子查询。 (6)记录联合 将两个表中的数据按照一定的查询条件查询出来后,将结果合并到一起显示出来, 需要用union和union all关键字来实现这样的功能,具体语法如下: select *from t1 union | union all select *from t2 ..... union | union all select *from tn; 说明: union和union all的主要区别是union all是把结果集直接合并在一起,而 union是将union all后的结果进行一次distinct,去除重复后的结果。 12.DCL语句 主要是DBA用来管理系统中的对象权限时使用。 取消用户root的insert权限: revoke insert on 库名.* from 'root' @ 'localhost'; 注意:MySQL查看帮助 使用'? contents' 命令来显示所有可供查询的分类; '? data types'命令来查看MySQL支持的数据类型; 二、数值类型: 1.整数类型:tinyint/smallint/mediumint/int(Integer)/bigint(按取值范围) 整数类型中属性:auto_increment:值一般从1开始 2. 浮点数类型:float/double 3.定点数型:dec(M,D),decimal(M,D):有效取值范围由M和D决定 4.位类型:bit(M):bit(1)最小值,bit(64)最大值 5.日期时间类型: date:用来表示年月日 datetime:用来表示年月日时分秒 timestamp:需要经常插入或者更新日期为当前系统时间,返回值类型显示为"YYYY-MM-DD HH:MM:SS"格式的字符串 time:用来表示时分秒 year:只显示年份 6.字符串类型: char(M):M为0-255之间的整数 varchar(M):M为0-65535之间的整数 tinyblob/blob/mediumblob/longblob/tinytext/text/mediumtext/longtext/varbinary(M)/binary(M) 7.枚举类型:enum 它的值需要在创建表时通过枚举方式显示指定 譬如:create table a(gender enum('M','F')); enum类型是忽略大小写的,对'M','f'在存储的时候将它转换成大写, 对于插入值不在enum指定范围时,会插入枚举中的第一个值。enum类型 只允许从值集合中选去单个值,而不能一次取多个值。 8.set类型 也是一个字符串对象,和enum的最主要区别在于set类型可以选取多个成员,而enum只能选一个。 譬如: create table t(col set('a','b','c','d')); insert into t values ('a,b'),('a,b,d'),('a'); 注意: set类型可以从允许值集合中选择任意1个或多个元素进行组合,所以对于输入的值只要是在允许值的组合范围内, 对于超出允许值范围的值将不允许注入到设置的set类型中,而对于包含重复成员的集合只取一次。 |
|