MySql数据库操作(一)

数据库

定义
数据库是持久存储有组织可共享数据的容器
分类:
关系型数据库:MySQL、Oracle、SQL Server、SQLite、DB2
非关系型数据库:Redis、MongoDB

数据库管理系统

定义
数据库管理系统是操作和管理数据库的软件
包括:
MySql Oracle DB2

SQL分类

在这里插入图片描述

存储引擎

定义
存储引擎是给数据库提供数据存储、处理和保护等核心服务的程序
包括:
InnoDB MyISAM
注:MySQL5.5后的默认存储引擎为InnoDB

两个存储引擎的区别
在这里插入图片描述

数据库操作的语法

创建数据库: CREATE DATABASE [IF NOT EXISTS] 数据库名;
查看数据库: SHOW DATABASES;
使用数据库: USE 数据库名;
删除数据库: DROP DATABASE [IF EXISTS] 数据库名;

数据表字段操作的语法

创建表语法(create 属于ddl)
CREATE TABLE [ IF NOT EXISTS ] 表名 (
字段名1 数据类型 [属性],
字段名2 数据类型 [属性],
… …
字段名n 数据类型 [属性]
) ;

设置存储引擎和指定数据表编码格式:
CREATE TABLE [ IF NOT EXISTS ] 表名 (
字段名1 数据类型 [属性],
字段名2 数据类型 [属性],
… …
字段名n 数据类型 [属性]
) [ 存储引擎 ] [ 表字符集 ];

加入注释
CREATE TABLE [ IF NOT EXISTS ] 表名 (
字段名1 数据类型 [属性] COMMENT [字段注释],
字段名2 数据类型 [属性] COMMENT [字段注释],
… …
字段名n 数据类型 [属性] COMMENT [字段注释]
) [ 存储引擎 ] [ 表字符集 ] [表注释];

查看数据库中的表:
SHOW TABLES;

显示表结构:
DESC 表名;
删除表语法(DROP属于DDL)
DROP TABLE [ IF EXISTS ] 表名;
修改表名: ALTER TABLE 旧表名 RENAME AS 新表名
添加字段: ALTER TABLE 表名 ADD 字段名 字段类型 [ 属性 ]
修改字段:
ALTER TABLE 表名 MODIFY 字段名 字段类型 [ 属性 ]
修改属性:
alter table student modify sex enum(‘男’,‘女’);
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 字段类型 [ 属性 ]
删除字段:
ALTER TABLE 表名 DROP 字段名;
展示表的创建过程
show create table 表名;
更改表的存储引擎
ALTER TABLE 表名 ENGINE = 存储引擎

数据表中数据的操作

dml 数据操作语言 insert 添加 数据的 delete 删除数据 update 修改数据
1. 添加数据

  1. 标准的添加的sql语句
    insert into student(id,name,sex,birthday,grade,scid) values(1,‘张三’,‘男’,‘2017-12-12’,60.23,2 );

  2. 常用的添加的sql语句 student 表名后面不写字段默认的是 这个表的所有的字段名
    insert into student values(2,‘李四’,‘女’,‘2006-06-06’,99,5);

  3. 指定 字段添加数据
    insert into student(id,name,sex,scid) values(3,‘王五’,‘男’,6);

  4. 指定字段的赋值
    insert into student set id=4,name=‘赵六1’,sex=‘男’,birthday=‘2016-11-01’ ;
    insert into student set id=3, name=‘赵六’, sex=‘男’, birthday=‘2016-10-01’;

修改 update
指定字段名 的值
update student set name=‘李七’ where id=4;
update 表名 set 字段名=新字段值,字段名=新字段值,字段名=新字段值,字段名=新字段值 where 指定字段名=指定字段名的值;
update student set name=‘潇潇’, sex=‘女’ , grade =65, scid=9 where id=4;
update student set name=‘李七’;
删除 delete 单删
指定 一个 字段 进行删除 前提条件 这个字段的值 是 唯一的
1.delete from student where id=4;
delete from student;
删除数据
2.truncate table student;
3.drop table student;
DELETE语句和TRUNCATE TABLE语句对比
在这里插入图片描述

dql 数据查询语言 selete 查询 展示数据的
* 代表的是 所有的字段名
– 空 null
select * from student
– 要求 只展示studnet 表中的 编号 和名称
select id,name,sex,birthday ,grade,scid from student;

– 要求 只展示studnet 表中的 编号 和名称
select id ,name from student;

约束

定义
约束是为了确保表中数据的完整性而做出的限制。
主键约束:primary key
唯一约束:unique
非空约束:not null
默认约束:default
外键约束:foreign key
检查约束:check
约束 规则
在 创建表的时候 可以 添加约束 或者是在修改 表结构的时候 添加约束

      create   table  student(
         id     int     primary key ,         -- 主键  非空  null  且唯一          方便  外面的表便于数据引用  和 对表中的字段的约束        
         name     varchar(30)   not  null,           --  名称不能 为 空    
         sex    varchar(3)    default '男' ,                  -- 默认 是 男  
         email    varchar(60)     unique    --  唯一约束     
        );   
  -- check   检查性约束 

外键约束
列后加入:references 主表名(主键列);
foreign key (字段名) references 主表名 (主键列);
alter table 表名 add foreign key(列名) references 主表名(主键列)

删除约束 alter table 表名 drop foreign key 外键名;

唯一约束
列级约束 xs_idnum VARCHAR(11) unique
表级约束 unique(字段1,字段2)
修改表 alter table 表名 modify 字段名 字段类型 unique;
alter table 表名 add [constraint <唯一键名>] unique(字段名 字段类型);
alter table 表名 drop index 惟一键名称;
检查约束
列后加入:check(xs_sex=‘男’ OR xs_sex=‘女’);
删除约束: alter table 表名 drop check 检查约束名称;

默认约束
修改表时添加约束:
alter table 表名 alter 字段名 set default 默认值
删除约束 alter table 表名 alter 字段名 drop default;
非空约束
alter table 表名 modify 字段名 字段类型 not null;加入非空约束
alter table 表名 modify 字段名 字段类型 null;取消非空约束

E-R图

定义
E-R图是用来描述现实世界实体及实体间关系的概念数据模型
E-R图符号
在这里插入图片描述

数据表中的查询

条件查询是通过WHERE子句进行检索的查询方式
select * from 表名 where 字段 = 值;
select* from comments where cmtId=1;

多条件查询是利用逻辑运算符把多个条件组合起来的条件查询
select * from 表名 where 字段1=值 逻辑值 字段2=值;
SELECT * FROM comments WHERE cmtId=1 AND cmtAuthor=‘张三1’;

IN关键字(查询符合括号内条件的数据 )
select 字段列1,字段2……from 表名 where 字段名 in(值1,zhi2);
SELECT * FROM comments WHERE newsId IN(1,2);

between and(查询值1和值2区间的数据,并且包含值1和值2)
select 字段列1,字段2 ,…FROM 表名 where 字段x between 值1 and 值2;
SELECT * FROM comments WHERE cmtId BETWEEN 1 AND 10

模糊查询是使用SQL 通配符替代一个或多个字符的条件查询
select * from表名 where 字段 like ‘包含通配符的值’;
_ 一个字符 A LIKE ‘C_’ CS、 Cd等
% 任意长度的字符串 B LIKE ‘CO%’ CONST、COKE等
[ ] 括号中所指定范围内的一个字符 C LIKE ‘9W0[1-2]’ 9W01或9W02
[^] 不在括号中所指定范围内的一个字符 D LIKE ‘9W0[^1-2]’ 9W03或9W07等

distinct关键字(去掉SELECT查询返回的记录结果中重复的记录, 相同记录只返回一条)
SELECT DISTINCT 字段名1, 字段名2… FROM 表名
SELECT DISTINCT cmtContent FROM comments ;

order by 关键字(一组数据按照升序或降序排列)
SELECT 字段名列表 FROM 表名 [WHERE <查询条件>]
[ORDER BY <排序的列名> [ASC 或 DESC]]
SELECT * FROM comments order by cmtId DESC

limit关键字(MySQL查询语句中使用LIMIT子句限制结果集)
SELECT <字段名列表> FROM <表名> [WHERE <查询条件>]
[ORDER BY <排序的列名> [ASC 或 DESC]] [LIMIT [位置偏移量, ]行数];
SELECT * FROM comments LIMIT 2,5

null 关键字
SELECT * FROM comments where cmtAuthor is null;(is not null )

聚合函数(聚合函数是可以对一组值进行计算,并返回单个值的函数)
SELECT 聚合函数 FROM <表名>
SELECT COUNT(*) AS 总数 FROM comments;

分组查询(按照指定的字段分类汇总结果的查询方式 )
SELECT <字段名列表> FROM <表名>
[WHERE <查询条件>]
[GROUP BY <分组的字段名>]
[ORDER BY <排序的列名> [ASC 或 DESC]]
[LIMIT [位置偏移量, ]行数];
SELECT newsId 新闻编号,COUNT(*) AS 数量 FROM comments GROUP BY newsId

高级查询

字符串连接
select concat(‘my’,‘s’,‘ql’)字符串连接;
– 字符串替换
select insert(‘这是sql语言’,2,3,‘mysql’)字符串替换;
– 字符串转小写
select lower(‘aADASDAFaFSDFGREW’)字符串转小写;
– 字符串转大写
select upper(‘asdafsdsaafs’)字符串转大写;
– 字符串截取 从1开始
select substring(‘老二是我儿’,1,3)字符串截取 ;
– 字符串字符个数
select char_length(‘老二是我儿’)字符串字符个数;
– 字符串去左右空格
select trim(’ 老二是我儿 ')字符串去左右空格;
– 将字符串重复count次后返回
select repeat(‘老二’,3)将字符串重复count次后返回;
– 将字符串反转后返回
select reverse(‘老二是弟弟’)将字符串反转后返回;
– 获取当前日期
select curdate()获取当前日期;
– 获取当前时间
select curtime()获取当前时间;
– 获取当前时间日期
select now();
– 返回日期date为一年中的第几周
select week(now())返回日期date为一年中的第几周;
– 返回日期date的年份
select year(now())返回日期date的年份;
– 返回时间time的小时值
select hour(now())返回时间time的小时值;
– 返回时间time的分钟值
select minute(now())返回时间time的分钟值;
– 返回日期参数date和date之间相隔的天数
select datediff(now(),‘2018-8-8’);
– 计算日期参数date加上n天后的日期
select adddate(now(),5)计算日期参数date加上n天后的日期;
– 返回大于或等于数值X的最小整数
select ceil(2.3)向上取整;
– 返回小于或等于数值x的最大整数
select floor(2.3)向下取整;
– 返回0~1间的随机数
select rand() 返回0到1间的随机数;
– 求一个数的绝对值
select abs(-48954)绝对值;
– 求一个数的平方根
select sqrt(9)平方根;
– 求一个数的幂运算符
select power(2,3)幂运算;
– 返回当前数据库名
select database()返回当前数据库名;
– 返回当前客户的连接id
select connection_id()返回当前客户的连接id;
– 返回最后一个select查询进行检索的总行数
select found_rows()返回最后一个select查询进行检索的总行数;
– 返回当前登录用户名
select user()返回当前登录用户名;
– 返回mysql服务器的版本
select version()返回mysql服务器的版本;

连接查询

– 两表查询

   --  查询 员工  的 详细信息 包含他的所在部门的名称

       select  *  from  dept;      
  
   --  隐式内连接  
      select     *  from    emp e,  dept d    where e.deptno=d.did ; 

    --  内连接    inner   join    on  筛选条件的关键字    查出的数据是两表的交集的数据  
     select   *  from   emp   inner  join  dept     on  emp.deptno=dept.did;

外连接 左 left join on 连接 右连接 right join on

     -- 左连接 是   以 左为主     left  join   表名   on 条件           
      
     select   *  from   emp    left  join  dept   on   emp.deptno=dept.did;

     -- 右连接 是   以 左为主   right   join  表名   on 条件      

      select   *   from  emp    right  join  dept   on   dept.did=emp.deptno;

– 全连接 – FULL join

--  UNION    
select   *  from   emp    left  join  dept   on   emp.deptno=dept.did
UNION
select   *   from  emp    right  join  dept   on   dept.did=emp.deptno;        

--   分组   group  by  
  --  查询  每个部门中 的 员工的 数量 并显示 部门的名称  以及员工的数量        
    -- select  dept.dname , count(*)  from   emp    right  join  dept    on   emp.deptno  = dept.did   group  by    emp.deptno; 


--  按照 有员工的部门 的编号进行分组  并 计算出部门中的员工的个数
         
 select  dept.dname, count(*)   from    emp   inner  join   dept   on   emp.deptno=dept.did   group by  dept.did;
   
-- 按照 有员工的部门 的编号进行分组  并 计算出部门中的员工的个数 且 员工的个数大于 1的 

select  dept.dname, count(*)   from    emp   inner  join   dept   on   emp.deptno=dept.did   group by  dept.did  having count(*) >1;
   
 --   各个部门薪水最高的员工信息
        -- in()                  
select   e.*, d.dname  from   emp   e  inner  join  dept d on e.deptno=d.did  where  e.sal      in  (select  max(sal)   from   emp   group  by  deptno )

子查询

EXISTS子查询
SELECT 字段 FROM 表名 WHERE EXISTS(子查询);
注:子查询有返回结果:EXISTS子查询结果为TRUE,外层查询执行
子查询无返回结果:EXISTS子查询结果为FALSE,外层查询不执行

范式

定义
范式是为了设计冗余较小、结构合理的关系型数据库而遵循的规范

  1. 第一范式是为确保数据表的字段都符合原子性的范式
  2. 第二范式(2NF)是指在1NF的基础上,表中必须有主键,
    其它列必须与主键完全依赖的范式
  3. 第三范式(3NF)是 在2NF的基础上,非主键列必须
    直接依赖于主键的范式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值