一、基础
mysql安装目录
msql卸载
1、双击安装包,点击下一步,然后点击remove。卸载。
2、手动删除Program Files中的MySQL目录。
3、 手动删除ProgramData目录 (这个目录是隐藏的。)中的MySQL。、
1、 sql、DB、DBMS分别是什么,之间的关系?
- DB: DataBase(数据库,数据库实际上在硬盘上以文件的形式存在)
- DBMS: DataBase Management system (数据库管理系统,常见的有: MySQL oracle DB2 sybase sq1Server…)
- SQL
结构化查询语言,是一门标准通用的语言。标准的sq1适合于所有的数据库产品。
sQL属于高级语言。只要能看懂英语单词的,写出来的sq1语句,可以读懂什么意思。
SQI语句在执行的时候,实际上内部也会先进行编译,然后再执行sql。(sql 语句的编译由DBMS完成。) - DBMS->SQL->DB
2、什么是表?
表: table
表:table是数据库的基本组成单元,所有的数据都以表格的形式组织,目的是可读性强。
每一个字段应该包括哪些属性?
3、sql分类
1.数据查询语言(DQL)
数据查询语言(Data Query Language, DQL)是SQL语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有FROM,WHERE,GROUP BY,HAVING和ORDER BY。这些DQL保留字常与其他类型的SQL语句一起使用。
2.数据定义语言(DDL)
数据定义语言 (Data Definition Language, DDL) 是SQL语言集中,负责数据结构定义与数据库对象定义的语言,由CREATE、ALTER与DROP三个语法所组成,最早是由 Codasyl (Conference on Data Systems Languages) 数据模型开始,现在被纳入 SQL 指令中作为其中一个子集。
3.数据操纵语言(DML)
数据操纵语言(Data Manipulation Language, DML)是SQL语言中,负责对数据库对象运行数据访问工作的指令集,以INSERT、UPDATE、DELETE三种指令为核心,分别代表插入、更新与删除。
4.数据控制语言(DCL)
数据控制语言 (Data Control Language) 在SQL语言中,是一种可对数据访问权进行控制的指令,它可以控制特定用户账户对数据表、查看表、预存程序、用户自定义函数等数据库对象的控制权。由 GRANT 和 REVOKE 两个指令组成。DCL以控制用户的访问权限为主,GRANT为授权语句,对应的REVOKE是撤销授权语句。
5.指针控制语言(CCL)
它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。
6.事务处理语言(TPL)
它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
4 、source 命令 执行sql脚本
- 简单描述表结构: 字段类型 desc tabl_name;
显示表结构,字段类型,主键,是否为空等属性,但不显示外键。
例如:desc table_name
删除数据库: drop database 数据库名 ;
注意: SQL语句不区分大小写 字段的具体类容要区分大小写。mysql 语句松散一些,oracle语法严谨
去除重复的 distinct
distinct只能出现在所有查询字段的最前面。
在distinct后面的 查询的是后面字段联合去重。
6、排序 select字段名1,字段名2 from 表名 order by (根据那个字段名排序的字段) desc;
排序 select xh,xm,cssj,zxf,bz from xs order by zxf desc; 升序(默认)
6·1 执行顺序分析
7 分组函数(多行处理函数)
- count 计数
- avg 平均值
- sum 求和(如果字段有值为null,不需要添加过滤条件 sum函数自动忽略null)
- max 最大值
- min 最小值
- 分组函数自动忽略null
- 分组函数只有5个
- 多行处理函数:输入多行,输出一行
- 只要有null参与的运行结果计数null
- count(*)和count(具体字段),他们有什么区别?
count(*):不是统计某个字段中数据的个数,而是统计总记录条数。(和某个字段无关);count ( comm) :表示统计comm字段中不为NULL的数据总数量。
8、当行处理函数:就是输入一行,输出一行
- ifnull (可能为NULL的数据,被当做什么处理) :属于单行处理函数。
select name , ifnull (comm,0) as comm from emp ;
9、group by 和having
- group by:按照某个字段或者某些字段进行分组。
- having:是对分组之后的数据进行再次过滤
示例的查询
注意: 分组函数一般和group by联合使用,这也是称它为分组函数的原因。
- 并且任何一个分组函数(count sum avg max min) 都是在group by语句执行结束之后才会执行的。
- 当一条sql语句没有group by的话,整张表的数据会自成一组。
having 是group by的搭档 ,是对分组之后的数据进行再次过滤。
10、总结一个完整的DQL语句怎么写?
- 查询语句执行顺序
select 第五步
…
from 第一步
…
where 第二步
…
group by 第三步
…
having 第四步
…
order by 第六步
…
二、链接查询( 多表查询)
根据语法出现的年代来划分的话,包括:
- SQL92(–些老的DBA可能还在使用这种语法。
- sQI99(比较新的语法)
根据表的连接方式来划分,包括:
sql 99:
select
·· e.ename,d.dname
from
·· enp e
join
·· depno.d
on
·· e.deptno=d.deptno
where
语法:
-
非等值连接
inner 可以省略,on 条件:e.sal的值在s.losal到s.hisal之间。- 自己连接自己,把 一张表看成两张表
-
2、外连接:
-
假设A和B表进行连接,使用外连接的话,AB两张表中有一张表是主表, 一 张表是副表,主要查询主表中
的数据,捎带着查询副表,当副表中的数据没有和主表中的数据匹配上,副表自动模拟出NULL与之匹配。- 左外连接(左):表示左边的表示主表
- 右外连接 表示右边的表hi主表
- 左连接有右链接的写法,右链接有左连接的写法,
-
全连接(这个不讲,很少用!) 思考:避免了笛卡尔积现象,会减少记录的匹配次数吗?
不会,次数还是56次。只不过显示的是有效记录。 -
三张表怎么链接
4、union(将查询的结果集相加)
两张的表不相等 可以用union 拼接,查询时字符的数量一致。
5、limit(重点,分页查询),mysql特有的 。
5.1 作用:limit取结果集中的部分数据 。
5.5 语法机制
limit startIndex, length
startIndex表示起始位置,从开始,0表示第一条数据。
length表示取几个
5.4、limit是 sql语句最后执行的一一个环节:
重點:*每页显示pagesize条记录:
第pageNo页:(pageNo -1)pagesize, pagesize
6、创建表
char 和 varchar
在实际的开发中,当某个字段中的数据长度不发生改变的时候,是定长的,例如:性别、生日等都是采用char。
当一个字段的数据长度不确定,例如:简介、姓名等都是采用varchar。
一次插入一组数据
insert into 表名 (字段1,字段2…)values(值1,值2…);
8、表的复制
语法:
create table 表名 as select 语句;
将查询结果当做表创建出来。
- 删除10部门数据?
delete from dept1 where deptno = 10; - 删除所有记录?
delete from dept1 ; . - 怎么删除大表? (重点 )
truncate table emp1; //表被截断,不可回滚。永久丢失。 - 删除表?
drop table 表名; //这个通用。
drop table if exists表名; // oracle不支持这种写法。
增删改查有一个术语: CRUD操 作
Create (增)
Retrieve (检索) Update (修改) Delete ( 删除)
13.1、 什么是约束?常见的约束有哪些呢?
在创建表的时候,可以给表的字段添加相应的约束,添加约束的目的是为了保证表中数据的 合法性、有效性、完整性。
常见的约束有哪些呢?
- 1、非空约束(not null): 约束的字段不能为NULL(只有列级约束)
- 2、唯一约束(unique):约束的字段不能重复(有表级约束,列级约束)
唯一约束修饰的字段具有唯一一性,不能重复。,但可以为NULL。
- 3、主键约束(primary key): 约束的字段既不能为NULI,也不能重复( 简称PK)
主键作用:主键值是这行记录在这张表当中的唯一标识。(就像一个人的身份证号码-一样。)
一张表的主键约束只能有1个。(必须记住)
主键的分类? - 根据主键字段的字段数量来划分:
推荐:单一主键(推荐的,常用的。)
不推荐:复合主键(多个字段联合起来添加一一个主键约束) (复合主键不建议使用,因为复合主键违背三范式。) - 根据主键性质来划分:
推荐:自然主键:主键值最好就是-一个和业务没有任何关系的自然数。( 这种方式是推荐的)
不推荐:业务主键:主键值和系统的业务挂钩,例如:拿着银行卡的卡号做主键,拿着身份证号码作为主键。(不推荐用 )
最好不要拿着和业务挂钩的字段作为主键。因为以后的业务一旦发生改变的时候,主键值可能也需要. 随着发生变化,但有的时候没有办法变化,因为变化可能会导致主键值重复。
auto_ increment // id字段自动维护一个自增的数字,从1开始,以1递增。
- 4、外键约束(foreign key): … (简称FK)
1、外键值可以为NULL?
外键可以为NULL。
2、外键字段引用其他表的某个字段的时候,被引用的字段必须是主键吗?
注意:被引用的字段不一定 是主键,但至少具有unique约束(唯一性)。
- 检查约束(check) :注意orac1e数据库有check约束,但是mysql没有,目前mysql不支持该约束。
13.2 、约束详情
1)not null :非空约束,保证字段的值不能为空
s_name VARCHAR(10) NOT NULL, #非空
2)default:默认约束,保证字段总会有值,即使没有插入值,都会有默认值!
age INT DEFAULT 18, #默认约束
3)unique:唯一,保证唯一性但是可以为空,比如座位号
s_seat INT UNIQUE,#唯一约束
4)check:检查性约束【MySQL不支持,语法不报错,但无效】
s_sex CHAR(1) CHECK(s_sex=‘男’ OR s_sex=‘女’),#检查约束(Mysql无效)
5)primary key :主建约束,同时保证唯一性和非空
id INT PRIMARY KEY,#主建约束(唯一性,非空)
6)foreign key:外键约束,用于限制两个表的关系,保证从表该字段的值来自于主表相关联的字段的值!
teacher_id INT REFERENCES teacher(id) #这是外键,写在列级,Mysql无效