一、数据库的概念
1.DB和DBMS的概念
DB是数据库集合
DBMS是数据库管理系统,可以对数据库进行控制
2 数据库的分类:
-关系型数据库: Oracle mysql db2 SQL server
-非关系型数据库: Nosql
二、MySQL的安装与卸载
-安装路径不要有中文特殊符号
-卸载用remove 不要直接删除
三、mysql的服务与登录
-服务启动和关闭(管理员运行cmd)
1) net start mysql
2)net stop mysql
-登陆的三种方式
1)命令提示符
mysql -h hostname -P port -u username -p
2) 客户端(可视化图形工具)
3)编程语言 jdbc等
四、密码的修改
-进入mysql后有三种方式
1)alter user username@ip identified by '新密码';
2)set password for username@ip=password('新密码');
3)修改mysql库里的user表中的密码字段
->use mysql
->update user set authentication_string=password('新密码') where user='root' and host='localhost';
->flush privileges;
-不进入mysql
mysqladmin -u username -pOldPassword password newPassword
-忘记密码
停止服务,进入my.ini ,加入skip-grant-tables(跳过权限检查) 启动服务 按照第三种修改密码的方法进行操作,修改完关闭服务,进入my.ini 删除掉skip-grant-tables,启动服务, 成功修改密码
五、sql语言的概念和分类
-结构化查询语言,在DBMS中管理和维护DB的
-五类
DDL DML DQL DCL TCL
六、DDL之库操作
-创建数据库
1) create database 库名;
2) create database 库名 character set utf8;
-修改数据库的字符集
alter database 库名 character set utf8;
-查看数据库
1)查询所有数据库
show databases;
2)查询当前数据库
select database();
3)查看建库语句
show create database 库名;
-切换数据库
use 库名;
-删除数据库
drop database 库名;(若有表能否删除成功?)
-查看字符集:show variables like 'character%';
-查看数据库的数据文件的路径(数据目录的位置)
show variables like 'datadir%';
七、DDL之表操作
-创建表(可以同时指定字符集)create table [if not exists] tableName () character set charName;
-查看表
1)查看表结构
desc tablename;
2)查看建表语句
SHOW CREATE TABLE tablename;
3)查看库里的所有表
show tables;
-修改表结构
1)添加字段
alter table tabname add sex varchar(5);
2)修改字段类型
alter table tabname modify sex char(1);
3)修改字段名称
alter table tabname change sex sex1 char(1);
4)删除字段
ALTER TABLE t_users DROP sex1;
-重命名表名 rename table oldTableName to newTableName
-克隆表结构 create table tableName like oldTableName
-复制表 create table tableName as select [colName......] from oldTableName [condition];
-truncate关键字:把表删除后,重建(无法找回)
DELETE 和 TRUNCATE
1. delete删除表中的数据,表结构还在;删除的数据可以恢复。
2. truncate是直接将表DROP掉,然后再按照原来的结构重新创建一张表。数据不可恢复。
3. truncate删除效率比delete高。
八、DML操作
-insert into
1)给所有字段赋值写法
insert into tableName values (...,.....);
2)给指定字段赋值写法
insert into tableName (colName, ......) values (........);
3)如果没有非空约束,那么所有字段值都可以是null,默认也是null
-delete
# 删除数据 DELETE FROM t_student;
# 按照条件进行删除 WHERE DELETE FROM t_student WHERE sname = '韦一笑';
# 删除掉表中所有的数据 TRUNCATE TABLE t_student;
-update 修改数据
UPDATE t_student SET score_mysql = score_mysql + 10 where sname = '灭绝师太';
-null值操作
-在where中
-在set中
九、DQL操作
-基本查询语句的子句组成
-select关键字可以做运算操作: select empno,ename,sal(ifnull(comm,0) '收入' from emp;
-子句的执行顺序
1. 先执行from子句:基于表进行查询操作
2. 再执行where子句:进行条件筛选或者条件过滤
3. 再执行group by子句:对剩下的数据进行分组查询。
4. 再执行having子句:分组后,再次条件筛选或过滤
5. 然后执行select子句:目的是选择业务需求的字段进行显示
6. 再执行order by子句:对选择后的字段进行排序
7. 最后执行limit子句:进行分页查询,或者是查询前n条记录
-where子句
-关系表达式 >,>=,<,<=,=,!=,<>
-条件连接符 and,or, [not] between ..and..
-集合操作:[not] in (set)
>all(set).....
-模糊查询:like
占位符:_
多字通配符:%
-分组查询
-通常和聚合函数一起用
-聚合函数有忽略空值的特点 要考虑avg ifnull(colName,value);
-聚合函数(五个)
注意:
- 所有的聚合函数,都会忽略字段为null的那条记录。
- count(*),不会忽略null值所在的行记录,即通常用于统计总行数。
-having子句
分组后过滤, 多数情况下和关系表达式结合
-order by 子句
用于排序,可以指定多个字段进行排序,会先按照第一个字段排序 相同则找第二个进行排序
-limit 分页
-真分页和假分页(假分页一次性从数据库查询所有,在内存中分页 容易造成内存溢出)
-limit [m,] n
m 表示从第几条记录开始查询,没m,表示从0开始查询n条
n是查询的记录数
-mysql的记录的下标是从0开始
-去重关键字 distinct
十一、多表查询(关联查询)
-概念
-写法:
-第一种是在from子句中,直接写多个表名,表名之间使用逗号分隔开,如: select A.*,B.*,C.* from A,B,C where 关联条件
-第二种是在from子句中,多个表名之间使用join关键字连接,并在on关键字后面添加关联条件。
- select A.*,B.*,C.* from A join B on 关联条件
- select A.*,B.*,C.* from A join B on AB关联条件 join C on AC或BC关联条件
- select A.*,B.*,C.* from A join B join C on AB的关联条件 and BC或AC关联条件
-笛卡尔积(无意义)
-join连接
1)内连接 (和等值连接效果一样,度娘说join快where)
2) 外连接: 驱动表的概念 全显示驱动表值(包括null)
-左外连接
-右外连接
-全外连接用union 连接两个select语句
3)自连接
十一、子查询
-概念
-在where子句中
-在from子句中
-在having子句中
-在select子句中
-扩展
case when语句
case [colName] when 条件或者固定值 then 值
when 条件或者固定值 then 值
。。。。
else 值
end
if(condition,value1,value2)
十二、约束
-概念
-NN
-UK
-PK
-FK
-CK: MySQL中语法通过,但是ck失效 可以使用enum
十三、函数
-日期函数
-字符串函数
-数值函数
十四、DCL操作
-用户操作
1)创建用户
2)修改用户密码
3)删除用户
-权限操作
1)授权
2)撤销权限
3)刷新权限
十五、数据库备份
-mysqldump命令
十六、exists关键字的使用
-用途:遍历左表中的数据是否存在,存在就返回该值,直接break执行下一次扫描,比in快 (根据对右表的查询的结果来判断,左表和右表必须有关联)
-[not] exists
-必须放在where关键字后
十七、sql模式(5.6与5.7存在某些差别)
select @@sql_mode;
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION