(1)数据库定义语言: DDL,数据库定义语言用于创建、修改和删除数据库内的数据结构。
数据库查询语言:DQL,数据查询语言用于从数据库中的一个或多个表中查询指定的数据。
数据操作语言:DML,用与修改数据库中的数据,包括插入、更新和删除数据。
数据控制语言:DCL,用于控制对数据库的访问。
(2)针对数据库操作:
查看存储引擎:show engines; //Mysql的默认存储引擎是InnoDB
修改存储引擎:
修改table的存储引擎:ALTER TABLE table_name ENGINE=InnoDB/MyISAM;
修改默认存储引擎:在配置文件my.cnf中加入default-storage-engine=InnoDB;
事物隔离级别:
查看当前会话的隔离级别:select @@tx_isolation;
查看当前系统的隔离级别:select @@global.tx_isolation;
修改隔离级别:SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
创建数据库:CREATE DATABASE database_name;
查看所有数据库:SHOW DATABASES;
查看某一条数据库信息:SHOW CREATE DATABASE database_name;
删除数据库:DROP DATABASE database_name;
使用数据库:USE database_name;
(3)数据表操作
创建数据库:CREATE TABLE table_name(id INT(20), name VARCHAR(127), grade FLOAT);
删除数据表:DROP TABLE table_name;
查看数据表:SHOW CREATE TABLE table_name;
修改表名:ALTER TABLE table_name RENAME TO new_table_name;
在表中添加列:ALTER TABLE table_name ADD columns_name datatype [约束条件] [FIRST|AFTER 已存在的字段名];
改变表中列的数据类型:ALTER TABLE table_name MODIFY [COLUMN] column_name datatype;
修改表中的列:ALTER TABLE table_name CHANGE old_col_name new_table_name newdatatype [default|约束条件] [FIRST|AFTER col_name];
删除表中列:ALTER TABLE table_name DROP (COLUMNS) column_name;
(4)约束:
NOT NULL: column_name type not null;
column_name type null; //默认允许为空
UNIQUE:保证指定列或指定列的组合不出现重复值
1⃣️column_name TYPE UNIQUE;
2⃣️UNIQUE(column1,column2);
3⃣️CONSTRAINT constraint_name UNIQUE(column1,column2);
例子:
增加:ALTER TABLE table_name ADD UNIQUE(column1,column2);
ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE(column1,column2);
修改 : ALTER TABLE table_name MODIFY column_name TYPE UNIQUE;
删除:ALTER TABLE table_name DROP INDEX constraint_name;
PRIMARY KEY : 逐渐约束不允许出现null,组合主键要求每一列都不能为空。每个表最多有一个主键。
1⃣️col_name TYPE PRIMARY KEY;
2⃣️PRIMARY KEY(column1,column2,...) //组合主键
例子:
增加:ALTER TABLE table_name ADD PRIMARY KEY(column1,column2,...);
修改:ALTER TABLE table_name MODIFY column_name TYPE PRIMARY KEY;
删除:ALTER TABLE table_name DROP PRIMARY KEY;
FOREIGN KEY: 外键
[CONSTRAINT constraint_name] FOREIGN KEY (外键字段名) REFERENCES 外表表明(关联字段名) [ON DELETE CASCADE | ON DELETE SET NULL | ON DELETE NO ACTION];
ON DELETE CASCADE —— 删除主记录时将从记录一起删除;
ON DELETE SET NULL —— 删除主记录时,将从记录置为null;
ON DELETE NO ACTION —— 无操作;
例子:
增加:ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY (外键) REFERENCES table_name(主键);
删除:ALTER TABLE table_name DROP FOREIGN KEY constraint_name;
自动增长:column_name TYPE [约束条件] AUTO_INCREMENT;
插入数据:
1⃣️INSERT INTO table_name(column1,column2,...) VALUES (value11,value12,...), (value21,value22,...),......(valuen1,valuenn2,...);
2⃣️INSERT INTO table_name(column1,column2,...) VALUES (value11,value12,...);
更新数据:UPDATE table_name SET column1=value1, column2=value2,.....;
删除数据:
1⃣️DELETE FROM table_name [WHERE 条件表达式]; //不加where默认删除所有
2⃣️TRUNCATE [TABLE] table_name;
查询数据:
SELECT [DISTINCT] *|{col1,col2,...} FROM table_name
[WHERE 条件表达式1]
[GROUP BY column_name [HAVING 条件表达式2]] //HAVING是对组进行过滤
[ORDER BY column_name [ASC|DESC]]
[LIMIT [offset], num]; //从结果的偏移量offset取num条数据
1⃣️ [WHERE 条件表达式1]
= > < >= <= !=
WHERE column_name IS [NOT] NULL;
WHERE column_name [NOT] IN (element1,element2,...);
WHERE column_name [NOT] BETWEEN element1 AND element2;
WHERE column_name(String类型) LIKE '%xxx'|'_xxx'; %代表多个字符,_代表一个字符
优先级别:not > and > or
WHERE NOT ();
WHERE () AND ();
WHERE () OR ();
连接查询:
交叉查询: SELECT * FROM table1 CROSS JOIN table2;
内连接: SELECT 查询字段 FROM table1 [INNER] JOIN table2 ON table1.关系字段=table2.关系字段;
SELECT 查询字段 FROM table1 [INNER] JOIN table2 USING(cloumn_name1,column_name2); //要求两个表中都有USING中的字段,否则报错
外连接:SELECT s.*,t,* FROM table1 AS s RIGHT|LEFT|FULL JOIN table2 AS t ON table1.关系字段=table2.关系字段 WHERE[条件];
索引:MySQL允许建立索引增加数据表的查询和排列;
0⃣️普通索引
1⃣️单列索引:保证该索引只对应表中的一个字段;
2⃣️多列索引:只有在查询条件使用了这些字段中的第一个字段的时候,该索引才会被使用;
3⃣️唯一索引:该索引所对应的字段必须是唯一的;
4⃣️全文索引:只能创建在数据类型为VARCHAR、CHAR、TEXT上,并且只有MyISAM存储引擎支持全文索引;
5⃣️空间索引:创建空间所用必须声明为NOT NULL。
创建:
1⃣️创建数据表
CREATE TABLE table(字段名 数据类型
[UNIQUE|FULLTEXT|SPATIAL] INDEX|KEY [索引名](表中字段名[(索引长度)] [ASC|DESC] )
);
例子:CREATE TABLE table(
name VARCHAR(120),
INDEX nameindex(name(20) DESC)
);
2⃣️ALTER TABLE table ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名(字段名[(索引长度)] [ASC|DESC]);
3⃣️CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名 ON table(字段名[(索引长度)] [ASC|DESC]);
例子:CREATE INDEX ON table(name(20),age(20)); //多列索引
explain:分析索引的最佳工具
id | SELECT识别符。这是SELECT的查询序列号 |
select_type | SELECT类型,可以为以下任何一种:
|
table | 输出的行所引用的表 |
type | 联接类型。下面给出各种联接类型,按照从最佳类型到最坏类型进行排序:
|
possible_keys | 指出MySQL能使用哪个索引在该表中找到行 |
key | 显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。 |
key_len | 显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。 |
ref | 显示使用哪个列或常数与key一起从表中选择行。 |
rows | 显示MySQL认为它执行查询时必须检查的行数。多行之间的数据相乘可以估算要处理的行数。 |
filtered | 显示了通过条件过滤出的行数的百分比估计值。 |
Extra | 该列包含MySQL解决查询的详细信息
|