02.DML与DQL基础用法

1: DML语句

​ insert into values

insert intovalues(1,2,值n);
insert into(字段1,字段2,字段n) values(1,2,值n);

两种语法的区别:
	基本语法1的插入语句,表中有多少个字段就必须要插入多少个值。一个不能多,一个也不能少。若有默认值,不想传,可以写上null。
	基本语法2中,除非有必填字段必须要写入值外。如果有默认值的不想写可以忽略不写。mysql会自动补主默认值

​ delete from

delete from[where 条件];

TRUNCATE TABLE 表名;
清空表的数据,并且让自增的id从1开始自增
-- 删除一条纪录
-- 一般情况下,我们是使用主键作为标识;
-- 根据where后面的条件,精准的删除我们数据库的某一条纪录;
-- 当我们的主键为自增的情况下,删掉的纪录,主键也默认为自增还是以前的数字;
DELETE FROM test WHERE id = 3;
DELETE FROM test WHERE NAME = 'rose';

-- 清空数据表 ; 主键自增也会回归1;
TRUNCATE TABLE test;

​ update 表名 set 字段名=更新值

update 表名 set 字段1=1,字段2=2,字段n=值n [where 条件];

-- 如何修改我们的数据表里面的纪录
-- 修改编号为2的人 将它的名字修改成 xxxx

UPDATE test SET NAME='xiaomei'; -- 修改所有的;将name字段,全部改成xiaomei

-- 如果你只想修改一条语句,一定要where要精准
-- 如果你想改多条,条件也一定要记得注意;
-- sql符合条件的都都会修改掉;
UPDATE test SET NAME='jack',age=22 WHERE id = 2;
UPDATE test SET NAME='rose',age=22 WHERE NAME = 'tony'; -- 所有的name为tony改掉


2: DQL语句(数据库查询语句)

2.1 关系型数据库
--表与表之间,可以建立关系;称之为主外键;

主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性
	1: int类型,自增
	2: varchar类型 , UUID
	3: 自定义(当前时间+时间戳+机器码+int自增序列) ; 适用于分布式系统

外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的。所以说,如果谈到了外键,一定是至少涉及到两张表.

外键的使用需要满足下列的条件:

1. 两张表必须都是InnoDB表,并且它们没有临时表。

注:InnoDB是数据库的引擎。MySQL常见引擎有两种:InnoDB和MyISAM,后者不支持外键。

2. 建立外键关系的对应列必须具有相似的InnoDB内部数据类型。

3. 建立外键关系的对应列必须建立了索引。

4. 假如显式的给出了CONSTRAINT symbol,那symbol在数据库中必须是唯一的。假如没有显式的给出,InnoDB会自动的创建。

例如:

​ 图书表和图书类别表 / 学生和班级表 / 部门和员工表 / 用户和图书和借阅关系


2.2 表之间的关系

​ 2.2.1 一对一(一个人对应一张身份证)

1: A表的主键,是B表的外键;
2: A表的某个字段,是B表的外键,切设置了唯一索引;

​ 2.2.2 一对多(一个图书类别对应多本图书)

1: A表的某个字段,是B表的外键;

​ 2.2.3 多对多(老师和班级)

1: 一般通过第三方表来描述两个表之间的多对多的关系

2.3 数据库三范式(设计表的原则) NF:normal form

​ 说明: 严格意义上,有5NF; 1NF,2NF,3NF,4NF,5NF;BCNF;

第一范式(1NF)
	1NF的定义为:符合1NF的关系中的每个属性都不可再分
	1NF是所有关系型数据库的最基本要求,你在关系型数据库管理系统(RDBMS),例如SQL Server,Oracle,MySQL中创建数据表的时候,如果数据表的设计不符合这个最基本的要求,那么操作一定是不能成功的。
	
	学号 班级 姓名 系名 系主任 课程 语文 高数 英语 

	只满足1NF会有问题:数据冗余过大,插入异常,删除异常,修改异常;
	冗余: 相同数据重复出现
	插入问题: 3月份新开一个系,但是没有学生和班级; 如何插入数据?
    删除问题: 某个班级不存在了,学生和系信息怎么办?
    修改问题: 如果李四转到英语系,涉及到多条数据更改
----------------------------------------------------------

第二范式(2NF)
	2NF的定义为: 主键依赖,该表里面的其他字段,必须和主键相关;
	即一张表格只描述一个对象(主键),其它列名(副键)与对象之间相互完全依赖。
	
	生产一批香蕉,需要给香蕉进行记录,以便追踪去了哪里;首先给每把香蕉进行编号,然后描述他的颜色,成熟度,香味等;

第三范式(3NF)
    3NF的定义为: 主键以外的字段,不能有相互依赖的关系;

	比如,你想要对香蕉进行【编号】、【颜色】、【香味】、【香味得分】、【香味评级】这种列名,那么你要另开一张专门描述香味的表格。
	
	比如,你想要做【学号】、【姓名】、【性别】、【班级】、【班主任】这种列名,由于【班主任】受【班级】影响,那么你要另开一张专门描述班级的表格。



2.4 DQL语句 ; 绝对不会影响我们数据库的存储
语法:SELECT列名FROM表名【WHERE-->GROUP BY-->HAVING-->ORDER BY-->LIMIT】

组合使用,必须按照这个顺序来;

SELECT selection_list/要查询的列名称/
FROM table_list/要查询的表名称/
WHERE condition/行条件
GROUP BY grouping_columns/对结果分组/
HAVING condition/分组后的行条件
ORDER BY sorting_columns/对结果排/序
LIMIT offset_start, row_count/结果限定/

​ 2.4.1 基本查询

	select * from test
	select 字段1,字段2 from test
	select distinct 字段 from test   -- 字段去重查询,非分组
    
    -- 给字段取别名
    select 字段1 别名1, 字段2 别名2 from test
    select 字段1 as 别名1 , 字段2 as 别名2 from test

​ 2.4.2 条件查询; 带上 where,给定条件查询; 条件是可以组合的; where用在 update delete

比较运算符   
    =    !=  > < >= <= ;
    between A and B;
    in(1,2,3);
    is null;
    is not null;
关系运算符
	and or not;

判断时,可用算数运算符;
 + - * / %;   ifnull(x,0);  如果x是null,0替换;

​ 2.4.3 模糊查询

通配符

 _ : 代表一个字符
 % : 代表任意字符

​ 2.4.4 排序


order by  字段 asc/desc
order by 字段1 asc, 字段2 desc

​ 2.4.5 聚合函数

count(); 统计不为null的行数
max(); 求字段的最大值
min(); 求字段的最小值
sum(); 求字段和
avg(); 求字段的平均值

 # 当前日期 curdate();
 # 当前时间 curTime();
 # 当前日期和时间 NOW();


​ 2.4.6 分组查询

group by 字段;  根据字段来分组;

​ 2.4.7 分页查询

limit 纪录起始位置,纪录条数;

​ 2.4.8 连接查询(关系)

内连接: inner join

select * from  A,B
select * from A inner join B on  A.b = B.b   -- SQL标准语法

外连接: 左右外连接 

select * from A left join B on A.b = B.b
select * from A right join B on A.b = B.b

案例: 
	teacher/class/ teacher_class 三表的连接查询; 查看某某老师负责哪些班级授课

​ 2.4.9 子查询;查询里面有查询;

select * from 表名1 where 字段1=(select 字段1 from 表名1 where 条件表达式);

3: 数据库导入导出(sqlyog)


备份:
mysqldump -u root -p lhp>d:\lhp.sql
密码过后输入
mysqldump -u root -proot  lhp>d:\lhp.sql

恢复:
前提:必须先创建数据库
需先登录mySQL,进入指定数据库后执行SQL
Source d:\\lhp.sql

还有一种方式
Mysql -uroot -proot lhp<d:\lhp.sql
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值