基础术语

数据库:用来组织、存储和管理数据的仓库。

关系数据库特点:数据以表格(关系)的形式出现;行表示元组,列表示属性;许多行和列组成表格;许多表格组成database。

主码:用于在一个关系中区分不同元组

外码:一个关系中的属性包括另一个关系的主码

参照完整性:比如一个表示学校的数据库,其中有两个表,一个是教授表,教授表中存在教授所在系的名字,而系的名字又是系表的主码,所以要求教授所在系的名字,一定是存在于系表中的

索引:类似于书籍的目录,可以帮助快速访问数据库表的特定信息

MySQL管理

运行MySQL之后,输入正确的密码。

mysql 用户主机掩码 mysql主码是什么_mysql 用户主机掩码


添加用户:在mysql数据库的user表中添加新用户,设置用户名,密码,以及进行授权

例如使用如下SQL语言(以分号作为结束标识):

mysql> INSERT INTO user (host, user, password, select_priv, insert_priv, update_priv) 
           VALUES ('localhost', 'guest', PASSWORD('guest123'), 'Y', 'Y', 'Y');

选择需要操作的数据库

mysql> show databases;显示出所有已经创建的数据库

mysql 用户主机掩码 mysql主码是什么_mysql 用户主机掩码_02

mysql> use university 选择其中的一个数据库进行管理

mysql 用户主机掩码 mysql主码是什么_数据_03

mysql> show tables;显示指定数据库的所有表

mysql 用户主机掩码 mysql主码是什么_mysql 用户主机掩码_04

mysql> show columns from instructor;显示选定数据表的属性,看到下图的instructor表的主码是ID

mysql 用户主机掩码 mysql主码是什么_mysql_05


使用create创建数据库,使用drop删除数据库

mysql> create database happy;
mysql> drop database happy;谨慎,所有数据都将会消失

MySQL语言

mySQL支持的数据类型:数值(int,numeric,float),日期/时间(date),字符串/字符(char ,varchar)

创建数据表

create table 表名 ( 属性名  属性类型,...);

create table dapartment
(dept_name  varchar(20),
building  varchar(15),
budget  numeric(12,2),
primary  key (dept_name));

删除数据表

drop  table 表名;执行之后所有的数据都不存在了,表也将不存在
delete from 表名 ;执行之后,只将表中的数据删除,而表仍然保留

插入数据

insert  into  表名  (属性1,属性2,属性3,...)
values  (值1,值2,值3,...);

insert  into  course(course_id,title,dept_name)
values('CS-101',‘Database Systems’,‘Comp.Sci’);

查询数据

select  属性名1,属性名2..  from  表名  where  约束条件;

更新数据

update  表名
set  属性名1 = 新值1,属性名2 = 新值2,...
where  约束条件

update instructor  
set  salary = salary*1.05;涨工资

字符串模式匹配

匹配字符串时不区分大小写,使用like操作符进行模式匹配(模式区分大小写)
%:匹配任意字符串
_:匹配任意一个字符

select  dept_name  from  department  
where  building like '%Waston%';找出建筑名称中包含子串Waston的所有系名

集合运算union,intersect,except

union:连接两个以上的select语句结果到一个新的集合中,删除重复数据
(select语句1)
union
(select语句2);
intersect:将两个或以上的select语句结果取交集到一个新的集合中,去除重复
except:select语句1执行结果减去select语句2执行结果得到的结果到一个新集合中,去除重复

聚集运算

avg:平均值
min:最小值
max:最大值
sum:总和
count:计数

select  count(distinct ID)
from teachs  where year = 2019; 算出这个关系中元组的个数

分组聚集

groupe  by
select  dept_name,avg(salary) 
from  instructor
group  by  dept_name;
第一步是分组,然后在每个分组上进行聚集运算avg
所以表示的意思是:找出每个系的平均工资

MySQL连接

使用join在多个表中查询数据
inner join:获取两个表中字段匹配关系的记录,自然连接natural join是一种内连接,该种连接可能会失去某些数据,例如将instructor表和teaches表进行自然连接,那么结果中不会出现没有教授任何一门课程的教授信息
left join:获取左表所有记录,即使右表没有对应匹配的记录
right join:获取右表所有记录,即使左表没有对应匹配的记录

null值处理

除了count遇到null也会加1外,其余都会自动忽略null