数据库
这两天学了点数据库的操作,应该是基本的语句都看会了,但是还是容易忘记,所以再整理一下.
SQL语句分类:
- DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等。
- DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)。
- DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别。
-
DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
-
注意sql语句以;结尾
常用数据类型:
- int:整型
- double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
- char:固定长度字符串类型; char(10) 'aaa ' 占10位 一个汉字占用2两位
- varchar:可变长度字符串类型; varchar(10) 'aaa' 占3位
- text:字符串类型;
- blob:字节类型; 大数据类型,比如一个文件
- date:日期类型,格式为:yyyy-MM-dd;
- time:时间类型,格式为:hh:mm:ss
- timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值
- datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
常用约束:
- 主键约束:primary key
- 唯一约束:unique [key]
- 非空约束:not null
- 默认约束:default
- 外键约束:foreign key
- 自动增长:auto_increment
DDL使用:
- 创建新的数据库——create database 数据库名字
- 查看当前数据库服务器中的所有数据库 —— show databases;
- 查看前面创建的mydb1数据库的定义信息 ——show create database mydb1;
- 查看服务器中的数据库,并把mydb1的字符集修改为utf8:—— ALTER DATABASE mydb2 character SET utf8;
- 删除 ——drop database mydb1;
- 查看当前使用的数据库——select database();
- 切换数据库——use mydb2;
- 创建新表——create table 表名(字段 字段类型....);
- 删除现有表——drop table table_name;
- 查看所有表——show tables;
- 查看表的字段信息:desc 表名;
- 例如有一个员工表,再增加一个image列:alter table employee add image blob;
- 修改这个表的job列,使其长度为60:alter table employee modify job varchar(60);
- 更改表名:alter table employee to user
- 删除表的image列:alter table employee drop image;
- 查看表的创建细节: show create table user;
DML操作:
- INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...);
- 查看数据库编码的具体信息 :Show variables like ‘character%’;
- 临时更改客户端和服务器结果集的编码 :SET NAMES ‘gbk’;
- 修改操作:update: UPDATE 表名 SET 列名1=列值1,列名2=列值2 ... WHERE 列名=值
- 删除操作:DELETE: DELETE from 表名 【WHERE 列名=值】
- 使用truncate删除表中记录:TRUNCATE TABLE emp; (TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表)
DQL数据查询:查询关键字:SELECT
SELECT 列名1,列名2 FROM表名 【WHERE --> BROUP BY-->HAVING--> ORDER BY】
- WHERE condition /行条件/
- GROUP BY grouping_columns /对结果分组/
- HAVING condition /分组后的行条件/
- ORDER BY sorting_columns /对结果排序/ (默认是升序,加上desc是降序)
- LIMIT offset_start, row_count /结果限定 分页/
模糊查询:模糊查询必须使用LIKE关键字。其中 “”匹配任意一个字母,5个“”表示5个任意字母。 %:任意0~n个字母
字段控制查询:
- 去除重复记录 :SELECT DISTINCT sal FROM emp;
- 给列名添加别名 :SELECT *, sal+IFNULL(comm,0) AS total FROM emp;(给列起别名时,是可以省略AS关键字的:)
聚合函数 实现统计查询:
-
COUNT():统计指定列不为NULL的记录行数;
- MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
- MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
-
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
-
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
注:having与where的区别:
1.having是在分组后对数据进行过滤,where是在分组前对数据进行过滤
2.having后面可以使用分组函数(统计函数)
where后面不可以使用分组函数。
WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而 HAVING是对分组后数据的约束。
LIMIT:LIMIT用来限定查询结果的起始行,以及总行数。
查询5行记录,起始行从0开始 :
SELECT * FROM emp LIMIT 0, 5;
查询10行记录,起始行从3开始 :
SELECT* FROM emp LIMIT 3, 10;