关系数据库是以表格(Table)进行数据存储,表格由"行"和"列"组成
from->on->join->where->group by->having->select->distinct->order by->limit
语法:SELECT 列名 FROM 表名 WHERE 条件;
1.作枚举查询条件 - 放在WHERE中 - 多行单列
2.作为一张表 - 放在FROM后 - 多行多列
语法:SELECT 列名 FROM (子查询的结果集) AS 表别名 WHERE 条件;
语法:SELECT 字符串函数([参数列表])
语法:SELECT 聚合函数(列名) FROM 表名;
语法:SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 分组列 HAVING 过滤规则;
;合并两张表的的结果(去除重复记录)
SELECT * FROM 表名1 UNION SELECT * FROM 表名2;
;合并两张表的结果(不去出重复记录)
SELECT * FROM 表名1 UNION ALL SELECT * FROM 表名2;
语法:SELECT 列名 FROM 表1 连接方式 表2 ON 连接条件;
连接方式:
INNER JOIN:内连接,匹配不到不返回
LEFT JOIN ON:左外连接,以左表为主表依次向右匹配,匹配到返回结果,匹配不到对应列返回NULL值填充
RIGHT JOIN ON:右外连接,以右表为主表依次向左匹配,匹配到返回结果,匹配不到对应列返回NULL值填充
增加一行:INSERT INTO 表名(列1,列2...) VALUES(值1,值2...);
增加多行:INSERT INTO 表名(列1,列2...) VALUES(值1,值2),(值1,值2),...,(值1,值2);
UPDATE 表名 SET 列1 = 值1,列2 = 值2,... WHERE 条件;
DELETE FROM 表名 WHERE 条件;
TRUNCATE TABLE 表名;
ALTER TABLE 表名 操作;
ALTER TABLE 表名 ADD 列名 数据类型;
ALTER TABLE 表名 MODIFY 列名 数据类型;
ALTER TABLE 表名 DROP 列名;
ALTER TABLE 表名 CHANGE 列名 新列名 数据类型;
表中的一行数据代表一个实体(entity),实体完整性的作用是标识每一行数据不重复、实体唯一。
PRIMARY KEY唯一,标识表中的一行数据,此列的值不可重复,且不能为NULL。
UNIQUE唯一,标识表中的一行数据,不可重复,可以为NULL
AUTO_INCREMENT自动增长,给主键数值列添加自动增长。从1开始,每次加1。不能单独使用和主键配合。
限制列的单元格的数据正确性
NOT NULL非空,此列必须有值
DEFAULT值为列赋予默认值,当新增数据不指定值时,书写DEFAULT,以指定的默认值进行填充。
语法:CONSTRAINT 引用名 FOREIGN KEY(列名) REFERENCES 被引用表名(列名)
详解:FOREIGN KEY引用外部表的某个列的值,新增数据时,约束此列的值必须是引用表中存在的值。
PRIMARY KEY AUTO_INCREMENT
UNIQUE NOT NULL
事务是一个原子操作。是一个最小执行单元。可以由一个或多个SQL语句组成,在同一个事务当中,所有的SQL语句都成功执行时,整个事务成功,有一个SQL语句执行失败,整个事务都执行失败。
开始:连接到数据库,执行一条DML(增,删,改)语句。上一个事务结束后,又输入一条DML语句,即事务的开始。
结束:
a.显示提交:commit;
b.隐式提交:一条创键、删除的语句,正常退出(客户端退出连接);
2)回滚:
a.显示回滚:rollback;
b.隐式回滚:非正常退出(断电、宕机),执行里创键、删除的语句,但是失败了,会为这个无效的语句执行回滚。
数据库会为每个客户端都维护一个空间独立的缓存区(回滚段),一个事务中所有的增删改语句的执行结果都会缓存在回滚段中,只有当事务中所有SQL语句均正常结束(commit),才会将回滚段中的数据同步到数据库。否则无论因为哪种原因失败,整个事务将回滚(rollback)。
表示一个事务内的所有操作是一个整体,要么全部成功,要么全部失败
表示一个事务内有一个操作失败时,所有的更改过的数据都必须回滚到修改前状态。
事务查看数据操作是数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。
持久性事务完成之后,它对于系统的影响是永久性的。
应用环境:基于增删改语句的操作结果(均返回操作后受影响的行数),可通过程序逻辑手动控制事务提交或回滚。
CREATE USER 用户名 IDENTIFIED BY 密码;
GRANT ALL ON 数据库.表 TO 用户名;
REVOKE ALL ON 数据库.表 FROM 用户名;
DROP USER 用户名;
视图,虚拟表,从一个表或多个表中查询出来的表,作用和真实表一样,包含一系列带有行和列的数据。视图中,用户可以使用SELECT语句查询数据,也可以使用INSERT,UPDATE,DELETE修改记录,视图可以使用户操作方便,并保障数据库系统安全。
当用户对数据库中的一张或者多张表的某些字段的组合感兴趣,而又不想每次键入这些查询时,用户就可以定义一个视图,以便解决这个问题。视图中列可以来自于表里的不同列,这些列都是用户所感兴趣的数据列。
视图与表不同,它在物理上不是真实存在的,而是一个虚表。在数据库里仅存放视图的定义,而不存放视图对应的数据。视图中的这些数据存放在其对应的表中,如果表中的数据发生了变化,从视图中查询出的数据也会随之发生改变。从这个意义来看,视图就像一个窗口,透过它可以看到数据库中用户感兴趣的数据及变化。每一次查看视图或引用视图的的时候,都会运行一次视图上的查询。
用户可以使用SELECT语句从视图里查询数据,对于符合一定约束条件的视图,还可以使用INSERT、UPDATE、DELETE、MERGE INTO等语句修改视图对应的基础表里的数据。视图在提供操作方便的同时,还可以保障数据库数据的安全。
语法:CREATE VIEW 视图名 AS 查询数据源表语句;
把视图当作表正常操作即可
DROP VIEW 视图名
1.视图不会独立存储数据,原表发生改变,视图也发生改变。没有任何查询优化。
2.如果试图包含以下结构中的一种,则视图不可更新
当需要对某的表的一列或几列单独查询时,为了减少麻烦,可以使用视图把这几列单独取出来
索引的目的在于提高查询效率
语法:CREATE INDEX 索引名称 ON 表名(字段名称(长度))