DQL:数据查询语言
DML:数据操作语言
DDL:数据定义语言
DCL:数据控制语言
TPL:事务处理语言
CCL:指针控制语言
DDL:Data Definition Language
作用:用于描述数据库中要存储的现实世界实体的语言。即创建数据库和表的结构。
常用关键字:CREATE ALTER DROP TRUNCATE
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification [, create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name //指定字符集
[DEFAULT] COLLATE collation_name // 指定数据库字符集的比较方式
显示数据库语句:SHOW DATABASES
显示数据库创建语句:SHOW CREATE DATABASE db_name
数据库删除语句:DROP DATABASE [IF EXISTS] db_name
ALTER DATABASE [IF NOT EXISTS] db_name [alter_specification, [, alter_specification] ...]
alter_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
CREATE TABLE table_name
(
field1 datatype,
field2 datatype,
field3 datatype
)character set 字符集 collate 校对规则
field:指定列名
datatype:指定列类型
注意:创建表前,要先使用use db语句使用库。
注意:创建表时,要根据需要保存的数据创建相应的列,并根据数据的类型定义相应的列类型。
分类 | 数据类型 | 说明 |
---|---|---|
数值类型 | BIT(M) TINYINT[UNSIGNED][ZEROFILL] BOOL,BOOLEAN SMALLINT[UNSIGNED][ZEROFILL] INT[UNSIGNED][ZEROFILL] BIGINT[UNSIGNED][ZEROFILL] FLOAT[(M,D)][UNSIGNED][ZEROFILL] DOUBLE[(M,D)][UNSIGNED][ZEROFILL] |
位类型。M指定位数,默认值1,范围1-64 带符号的范围是-128到127,无符号0到255 使用0或1表示真假 2的16次方 2的32次方 2的64次方 M指定显示长度,d指定小数位数 表示比float精度更大的小数 |
文本、二进制类型 | CHAR(size) char(20) VARCHAR(size) varchar(20) BLOB LONGBLOB TEXT(clob) LONGTEXT(longclob) |
固定长度字符串 可变长度字符串 二进制数据 大文本 |
时间日期 | DATE/DATETIME/TimeStamp | 日期类型(YYYY-MM-DD) (YYYY-MM-DD HH:MM:SS),TImeStamp表示时间戳,它可用于自定记录insert、update操作的时间 |
VARCHAR、BLOB和TEXT是变长类型。每个类型的存储需求取决于列值的实际长度。
使用ALTER TABLE语句追加,修改,或删除列的语法
追加列
ALTER TABLE table_name ADD (column datatype [DEFAULT expr] [, column datatype] ...);
修改列
ALTER TABLE table_name MODIFY column datatype [DEFAULT expr] [, column datatype] ... ;
删除列
ALTER TABLE table_name DROP (column);
修改表的名称:
Rename table 表名 to 新表名;
修改表的字符集
alter table table_name character set utf-8;
DML:Data Manipulation Language
作用:用于向数据库表中插入、删除、修改数据
常用关键字:INSERT UPDATE DELETE
INSERT INTO table [(column [, column...])] VALUES (value [, value...]);
MySQL有六处使用了字符集,分别为:client、connection、database、results、server、system
update table_name SET col_name1=expr1 [, col_name2=expr2 ... ] [WHERE where_definition]
delete from table_name [where where_definition]
SELECT [DISTINCT] *|{column1, column2, column3...} FROM table;
SELECT * | {column1 | expression, column2 | expression, ...} FROM table;
SELECT column as 别名 from 表名
比较运算符 | > < >= <= = <> | 大于、小于、大于等于、小于等于、等于、不等于 |
BETWEEN...AND... | 显示在某一区间的值(含头含尾) | |
IN(set) | 显示在in列表中的值,例如:in(100,200) | |
LIKE | 模糊查询 | |
IS NULLL | 判断是否为空 | |
逻辑运算符 | AND | 多个条件同时成立 |
OR | 多个条件任一成立 | |
NOT | 不成立,例如:where not(salary>100) |
like语句中,%代表另个或多个任意字符,_代表一个任意字符。
SELECT column1, column2, column3... FROM table ORDER BY column asc|desc;
primary key:不允许为空,不允许重复
删除主键:alter table table_name drop primary key;
auto_increment
unique
not null
constraint ordersid_FK foreign key(ordersid) references orders(id);
- 交叉连接(cross join):不带on子句,返回连接表中所有数据行的笛卡尔积。
- 内连接(inner join):返回连接表中符合连接条件及查询条件的数据行。
- 外链接:分为左外连接(left out join)、右外连接(right out join)。与内连接不同的是,外连接不仅返回表中符合连接条件及查询条件的数据行,也返回左表(左外连接时)或右表(右外连接时)中仅符合查询条件但不符合连接条件的数据行。
连接查询的from子句的连接语法格式为:
from table_name1 join_type table_name2 [on (join_condition)][where (query_condition)]
其中,table_name1和table_name2表示参与连接操作的表,table_name1为左表,table_name2为右表。on子句设定连接条件,where子句设定查询条件,join_type表示连接类型。
交叉连接查询customers表和orders表
select * from customer cross join orders;
select * from customer, orders;
select * from customer c inner join orders o on c.id = o.customer_id;
select * from customer c, orders o where c.id = o.customer_id;
select * from customer c left outer join orders o on c.id = o.customer_id;
查询结果不仅包含符合c.id = o.customer_id连接条件的数据行,还包含customers左表中的其它数据行
select * from customer c left outer join orders o ON c.id = o.customer_id where o.price > 250;
select * from customer c right outer join orders o on c.id = o.customer_id;
查询结果不仅包含c.id=o.customer_id连接条件的数据行,还包含orders右表中的其它数据行
select * from customer c right outer join orders o on c.id=o.customer_id where o.price > 200;
[select ...] from ... [where ...] [group by ...] [having ...] [order by ...]
select count(*) | count(列名) from table_name where where definition
select sum(列名) {, sum(列名) ...} from table_name [where where_definition]
select avg(列名) {, avg(列名) ...} from table_name [where where_definition]
select max(列名) from table_name [where where_definition]
select column1, column2, column3 ... from table group by column;
select column1, column2, column3 ... from table group by column having...
ADDTIME(date2, time_interval) | 将time_interval加到date2 |
CURRENT_DATE() | 当前日期 |
CURRENT_TIME() | 当前时间 |
CURRENT_TIMESTAMP() | 当前时间戳 |
DATE(datetime) | 返回datetime的日期部分 |
DATE_ADD(date2, INTERVAL d_value d_type) | 在date2中加上日期或时间 |
DATE_SUB(date2, INTERVAL d_value d_type) | 在date2上减去一个时间 |
DATEDIFF(date1, date2) | 两个时间差 |
NOW() |
当前时间 |
YEAR|MONTH|DATE(datetime) | 年月日 |
CHARSET(str) | 返回字符串字符集 |
CONCAT(string2 [, ...]) | 连接字符串 |
INSTR(string, substring) | 返回substring在string中出现的位置,没有返回0 |
UCASE(string2) | 转换成大写 |
LCASE(string2) | 转换成小写 |
LEFT(string2, length) | 从string2中的左边起取length个字符 |
LENGTH(string) | string长度 |
REPLACE(str, search_str, replace_str) | 在str中用replace_str替换search_str |
STRCMP(string1, string2) | 逐字符比较两字符串大小 |
SUBSTRING(str, position [, length]) | 从str的position开始,取length个字符 |
LTRIM(string2) RTRIM(string2) trim | 去除前端空格或后端空格 |
ABS(number2) | 绝对值 |
BIN(decimal_number) | 十进制转二进制 |
CEILING(number2) | 向上取整 |
CONV(number2, from_base, to_base) |
进制转换 |
FLOOR(number2) | 向下取整 |
FORMAT(number, decimal_places) | 保留小数位数 |
HEX(DecimalNumber) | 转十六进制 |
LEAST(number, number2 [, ...]) | 求最小值 |
MOD(numerator, denominator) | 求余 |
RAND([seed]) | RAND([seed]) |
mysqlump -u root -psorry
test>test.sql