SQL(structure query language): 结构化查询语句数据库(database): 保存有组织的数据的容器(通常是一个文件或一组文件)MySQL、Oracle等数据库软件,称为数据库管理系统(DBMS)
目录
数据库、表的相关操作容量查询数据库相关操作表的相关操作
数据的查询、插入、删除等操作数据类型
数据库、表的相关操作
容量查询
# 引擎的容量
SELECT
ENGINE,
SUM(TABLE_ROWS) AS '记录数',
SUM(TRUNCATE(DATA_LENGTH/1024/1024, 2)) as '数据容量(MB)',
SUM(TRUNCATE(INDEX_LENGTH/1024/1024, 2)) as '索引容量(MB)'
FROM information_schema.TABLES
GROUP BY ENGINE;
# schema的容量
SELECT
TABLE_SCHEMA AS '数据库',
SUM(TABLE_ROWS) AS '记录数',
SUM(TRUNCATE(DATA_LENGTH/1024/1024, 2)) as '数据容量(MB)',
SUM(TRUNCATE(INDEX_LENGTH/1024/1024, 2)) as '索引容量(MB)'
FROM information_schema.TABLES
GROUP BY TABLE_SCHEMA
ORDER BY SUM(DATA_LENGTH) desc, sum(INDEX_LENGTH) desc;
# 每张表的容量
SELECT
TABLE_SCHEMA AS '数据库',
TABLE_NAME AS '表名',
SUM(TABLE_ROWS) AS '记录数',
SUM(TRUNCATE(DATA_LENGTH/1024/1024, 2)) as '数据容量(MB)',
SUM(TRUNCATE(INDEX_LENGTH/1024/1024, 2)) as '索引容量(MB)'
FROM information_schema.TABLES
GROUP BY TABLE_SCHEMA, TABLE_NAME
ORDER BY SUM(DATA_LENGTH) desc, sum(INDEX_LENGTH) desc;
数据库相关操作
创建、查看、使用、删除数据库:
CREATE DATABASE school
;
SHOW DATABASES;
USE school
;
DROP DATABASE school
;
表的相关操作
创建、查看、删除表
CREATE TABLE t_class
(
classno
INT,
cname
VARCHAR(20),
loc
VARCHAR(40),
stucount
INT
);
DESC t_class
;
SHOW CREATE TABLE t_class
;
DROP TABLE t_class
;
复制表
CREATE TABLE t_class_copy
LIKE t_class
;
INSERT INTO t_class_copy
SELECT * FROM t_class
;
修改表
ALTER TABLE t_class1
RENAME t_class
;
ALTER TABLE t_class
ADD head_teacher_id
INT;
ALTER TABLE t_class
ADD advisor
VARCHAR(20) FIRST;
ALTER TABLE t_class
ADD advisor_2
VARCHAR(20) AFTER cname
;
ALTER TABLE t_class
DROP advisor_2
;
ALTER TABLE t_class
MODIFY loc
VARCHAR(50);
ALTER TABLE t_class
CHANGE advisor advisor_modify
VARCHAR(100) AFTER loc
;
为表添加约束
ALTER TABLE t_class
MODIFY stucount
INT NOT NULL DEFAULT 0;
ALTER TABLE t_class
MODIFY cname
VARCHAR(20) UNIQUE;
ALTER TABLE t_student_pk
ADD CONSTRAINT pk_stuno
PRIMARY KEY (stuno
);
ALTER TABLE t_student_pk
DROP PRIMARY KEY;
ALTER TABLE t_student_pk
ADD CONSTRAINT pk_stuno_sname
PRIMARY KEY(stuno
, sname
);
CREATE TABLE t_class
(
class_id
INT(11) PRIMARY KEY AUTO_INCREMENT,
cname
VARCHAR(20),
loc
VARCHAR(40),
stucount
INT(11)
);
ALTER TABLE t_student
ADD class_id
INT,
ADD CONSTRAINT fk_class_id
FOREIGN KEY (class_id
)
REFERENCES t_class
(class_id
);
添加索引
ALTER TABLE t_class
ADD INDEX index_classno
(classno
);
CREATE INDEX index_classno
ON t_class
(classno
);
ALTER TABLE t_class
DROP INDEX index_classno
;
ALTER TABLE t_class
ADD UNIQUE INDEX index_classno
(classno
);
ALTER TABLE t_class
ADD FULLTEXT
INDEX index_loc
(loc
);
ALTER TABLE t_class
ADD INDEX index_cname_loc
(cname
, loc
);
EXPLAIN SELECT * FROM t_class
WHERE cname
= 'beijing' AND loc
='hah';
EXPLAIN SELECT * FROM t_class
WHERE advisor
= 'adv' AND loc
= 'haha';
小结:
PRI:是primary的缩写,标记这一列为主键,用来唯一表中每一行数据的索引。数据库层面的唯一性(通常每个表都有id字段,用来标识一行数据)。UNI:是unique的缩写,顾名思义就是唯一的意思。业务层面的唯一性(比如支付记录的ID,不可能有相同的两个吧!)。MUL:是multiple的缩写,表示这一列是被设置为一个普通索引。之所以叫做multiple,是因为此时可能这一列单独作为索引,也可能这一列和其他标记为MUL的列共同构成了一个索引(这种由多列共同构成的索引被叫作复合索引)。索引用来排序数据以加快搜索和排序数据的速度,比如书的目录就是书的索引。外键约束显示的也是MUL,添加外键约束,就等于认了个“爸爸”,“爸爸”中的字段不能随意删除了。
数据的查询、插入、删除等操作
数据类型
整数类型
类型字节数
TINYINT1SMALLINT2MEDIUMINT3INT4INTEGER4BIGINT8
浮点数类型和定点数类型
类型字节数
FLOAT4DOUBLE8DECIMAL(M, D) 或 DEC(M, D)M+2
注意:DECIMAL存储的是字符串,精度高,在金融系统中表示货币金额的时候会优先考虑DECIMAL类型,在一般的价格体系中,比如购物平台中货品的标价,选择FLOAT类型就可以。
日期和时间类型
类型字节数
YEAR1TIME3DATE4DATETIME8TIMESTAMP4
注意:
YEAR类型只表示年份,如果字需要记录年份,选择YEAR类型可以节约空间。TIME类型只表示时间,如果只需要记录时间,选择TIME类型最合适DATE类型只表示日期DATETIME和TIMESTAMP都可以记录日期和时间,DATETIME类型表示的范围比TIMESTAMP大。TIMESTAMP类型的时间是根据时区来显示的,如果需要显示的时间与时区对应,就选择TIMESTAMP类型。
示例:
CREATE TABLE dt_example
(
e_date
DATE,
e_time
TIME,
e_datetime
DATETIME,
e_timestamp
TIMESTAMP,
e_year
YEAR
);
INSERT INTO dt_example
VALUES(
current_date(),
current_time(),
NOW(),
current_timestamp(),
year(NOW())
);
SELECT * FROM dt_example
;
字符串类型
类型字节数
CHAR比如CHAR(20)就是指定CAHR类型的长度为20VARCHAR0 ~ 65535的任意值,比如VARCHAR(100)的具体分配的空间在0 ~ 100之间变化TINYTEXT0 ~ 255TEXT0 ~ 65535MEDIUMTEXT0 ~ 16772150LONGTEXT0 ~ 4294967295ENUMSET
二进制数据类型
类型取值范围
BINARY(M)字节数为M,允许长度为0 ~ M的定长二进制字符串VARBINARY(M)3DATE4DATETIME8TIMESTAMP4