1.术语
数据库:一些关联表的集合;
表:数据的矩阵;
行:一组相关的数据;
列:一组相同类型的数据;
冗余:存储两倍数据(降低了性能,提高了数据安全性);
主键:唯一(一个数据表最多有一个主键,值具有唯一性);
外键:用于关联两个表;
复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引;
索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录;
参照完整性:
实体完整性:
MySQL数据库:MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
2.语句
创建数据库:CREATE DATABASE test0420
删除数据库:DROP DATABASE test0420
创建表:
CREATE TABLE w_tbl(
w_id INT NOT NULL AUTO_INCREMENT, //自增
w_title VARCHAR(100) NOT NULL,//非空
w_author VARCHAR(40) NOT NULL,
submission_date DATE,
PRIMARY KEY ( w_id ) //声明主键
)ENGINE=InnoDB DEFAULT CHARSET=utf8; //设置引擎和编码
删除表:DROP TABLE w_tbl
插入:INSERT INTO z_tbl (z_id, z_name, z_desc) VALUES (1,'wxe','cute')
查询:
SELECT * FROM table_name
[WHERE Clause] // 查询条件 AND、OR、以及逻辑运算符等
[OFFSET M ] //开始查询的数据偏移量,默认情况下偏移量为0
[LIMIT N] // 设定返回的记录数
更新:UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
删除:DELETE FROM table_name [WHERE Clause]
LIKE子句:%表示任意字符
UNION操作符:
SELECT f1, f2, ... fn FROM tables1 [WHERE conditions1]
UNION [ALL | DISTINCT] //默认是DISTINCT去重,ALL不去重
SELECT e1, e2, ... en FROM tables2 [WHERE conditions2];
ORDER BY排序: [ASC [DESC]] 默认是ASC升序,DESC为降序
GROUP BY分组:
1)语法:
SELECT column_name, function(column_name) //可以是COUNT, SUM, AVG等函数
FROM table_name
WHERE column_name operator value
GROUP BY column_name // 按照某一列进行分组
WITH ROLLUP; //在以该列分组上在进行统计(COUNT, SUM, AVG等操作)
2)示例:
按name分组,统计每个用户的记录数:
SELECT name,COUNT(*) as user_count FROM employee_tbl GROUP BY name;
按name分组,统计每个用户的登录数:
SELECT name,SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP;
其中记录 NULL 表示所有人的登录次数。
可以使用 coalesce 来设置一个可以取代 NUll 的名称,coalesce 语法:
select coalesce(a,b,c);
参数说明:如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)。
SELECT COALESCE(name,'总数') as user_name,SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP;
Join连接
1)INNER JOIN ON(内连接,等值连接,默认的JOIN方式):获取两个表中字段匹配关系的记录;
例:select a.id, a.name,b.describe from t_one a inner join t_two b on a.name = b.name;
等同于:select a.id, a.name,b.describe from t_one a, t_two b where a.name = b.name;
2)LEFT JOIN ON(左连接):获取左表所有记录,即使右表没有对应匹配的记录;
3)RIGHT JOIN ON(右连接):反之2);
MySQL事务
1)在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
2)事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
3)事务用来管理 insert,update,delete 语句。
事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)
例子:
MYSQL 事务处理主要有两种方法:
1、用 BEGIN, ROLLBACK, COMMIT来实现
BEGIN 开始一个事务
ROLLBACK 事务回滚
COMMIT 事务确认
2、直接用 SET 来改变 MySQL 的自动提交模式:
SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1 开启自动提交
ALTER 修改数据库表名或者字段
1)删除表字段:alter table t_one drop title;
2)添加表字段:
alter table t_one add title varchar; 添加vcarchar类型的title字段到尾部
alter table t_one add title varchar first; 添加varchar类型的title字段到首位
alter table t_one add title varchar after name;添加varchar类型的title字段到name字段后边;
3)修改字段类型或名称:
alter table t_one modify name CHAR(10);修改那么字段的类型
4)修改表明:
ALTER TABLE t_one RENAME TO t_two;
INDEX索引
索引分为单列索引和组合索引;
索引其实已是一张表,里面包含了主键与索引字段,并指向实体表的记录;
优缺点:
虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件;
建立索引会占用磁盘空间的索引文件。