MySQL语法-2

本文详细介绍了MySQL的DML数据操作,包括插入、修改、删除记录,并讲解了DQL查询语句,如查询、别名、去重、条件、模糊、聚合、排序、分组、筛选和分页。此外,还阐述了数据库的备份与还原方法以及各种约束(默认、非空、唯一、主键和外键)的概念与应用。
摘要由CSDN通过智能技术生成

MySQL语法-2

1.DML数据:数据库操作语句 :操作表的记录

①插入数据
插入数据的语法1:
insert into 表名 values(值1,值2,值3,值4...值n); 插入全部数据
插入表的数据支持 :一次插入多条数据
insert into 表名 values(值1,值2,值3,值4...值n),(值1,值2,值3,值4...值n),(值1,值2,值3,值4...值n);
语法2:
插入部分字段,没有插入的字段,默认值就是null, 也支持一次性插入多条数据
insert into 表名(字段名称1,字段名称2....) values(值1,值2...) ;
注意事项:
1)插入的这些值必须要和表中的字段对应上; 先后顺序保证一致!
2)目前没有加入"数据库约束",可以插入非法数据,举例:id重复 ,
后期需要使用数据库约束来限定用户的操作表的行为!
②修改数据
一般实际开发中修改:都是带条件修改  (推荐)
语法1:update 表名 set 字段名称 = 值 where 条件 ;
例:需求:将name为张佳宁的学生id改为8
UPDATE student SET id = 8 WHERE NAME = '张佳宁' ;
语法2:一次性修改多个字段
update 表名 set 字段名称1 = 值 ,字段名称2 =值2.... where 条件;
例2:需求:将id为6的学生 的年龄改为25,性别改为女,地址改为上海
UPDATE student SET age = 25,gender ='女',address='上海市' WHERE id = 6 ;
语法3:不带条件 属于批量修改 (部分场景可以用的)
update 表名 set 字段名称= 值,字段名称2 =值2....
③删除数据
语法1:delete  from 表名 where 条件 ; 带条件删除记录 (使用的非业务字段id删除)
语法2:delete from 表名 :删除全表数据
语法3:truncate table 表名; 删除全表数据
--注意:
	delete from 表名 和 truncate table 表名 :两个区别?
    共同点:都是可以删除全表的记录的;
    不同点:
		delete from 表名 ; 仅仅只是将表的全部记录删除了,表还在!
		它针对id(非业务字段:设置主键并且自增长),它不影响自增长主键的这个值; (数据库约束后面讲)
		truncat table 表名; 将表所有数据删除,而且还会把删除之后,
		自动创建一个张一模一样的表,影响自增主键的值!
④自增
创建一个学生表,id 加入主键(非空且唯一)和自增长(不断的自增1)约束
CREATE TABLE student(
	id INT PRIMARY KEY AUTO_INCREMENT  -- id主键并且自增长
	);

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

①DQL语句最通用的语法:查询表的全部数据,基本条件查询 select 关键字
语法1:SELECT * FROM student ; (查询student表中所有数据)
语法2:SELECT 
	id,
	NAME,
	age,
	sex,
	address,
	math,
	english
FROM 
	student3;
* 代表所有字段,仅仅是自己玩的时候可以用,实际开发中不能用*,需要写上全部的字段名称
②as别名
-- 查询全部字段的时候,给字段起一个别名  as '别名名称' ,as省略
SELECT 
	id AS '编号',
	NAME AS '姓名',
	english AS '英语成绩' 
FROM
	student3 ;
-- as 可以省略,如下:
	SELECT 
  		id  '编号',
 		NAME  '姓名',
		english  '英语成绩' 
	FROM
 		student3 ;
③字段冗余(重复度大) 字段去重
DISTINCT 后面跟上字段名称  
SELECT  DISTINCT address FROM student3;
④where条件
比较运算符 <,<=,>,>=,!=,mysql中的不等于是<> 
逻辑运算符&& || mysql推荐使用 and , or
针对两个范围查询: 可以使用&&,可以使用and, 也可以 "字段名称 between 值1 and 值2"
or查询年龄是18岁或者是20或者是45岁的学生的所有信息语句可以简化为 in(值1,值2,值3..值n) ;in集合语句,如:
SELECT  
	*
FROM
	student3
WHERE 
	age IN(18,20,45) ;
-- Java语言中:去判断某个条件的内容为null ,mysql语言不支持这个格式 ==null
	需求:查询学生的英语成绩为null的学生所有信息
	mysql中判断某个字段为null,使用的语法是 is null 
	判断某个字段不为null,使用的语法是 is not null
-- 关于int类型字段求和的时候,注意: int类型的值 + null 的值 = null;
	mysql提供函数 ifnull(字段名称,值);  如果字段名称是null,给一个默认值,如:
	SELECT  
    	NAME '姓名',
    	(math+IFNULL(english,0)) '总分'
	FROM
    	student3 ;
⑤模糊查询 like
DQL语句之 where条件后面加入模糊查询 ---关键字 like
select 字段列表 from 表名 where 字段名称 like '%xxx%' ;
%:代表任何多个字符或者某个字符   (使用居多):网站门户系统---"搜索商品" ,模糊搜索
_:代表某个单个字符
⑥聚合函数查询:针对int类型:单行单列数据
select  聚合函数 from 表名 where 还可以指定条件;
count(字段名称):查询表中记录 ,字段名称使用都是id,非业务字段
avg(字段名称): 查询这个字段中平均值 
sum(字段列表):求和函数
max(字段名称):最大值
min(字段名称):最小值
-- select语句嵌套select语句 --- 子查询
	需求:查询出学生数学成绩大于 数学平均分的学生所有信息;
	使用where 条件 后面带上 比较运算符...,如下:
	SELECT 
		*
	FROM 
		student3
	WHERE 
		math >  (SELECT AVG(math) FROM student3) ;
⑦排序查询 oder by
select 字段列表 from 表名 order by 字段名称 排序规则(asc(默认值就是升序)或者desc 降序)
注意:
同时使用where条件和order by,order by在where的后面
多个字段要同时排序,首先第一个字段排序规则,然后才是第二个字段
⑧分组查询 group by
select 字段列表 from 表名  group by 分组字段名称;
注意事项:1)查询的字段列表中可以使用 分组字段
	    2)group by之后不能使用聚合函数
带条件分组查询的语法:  where 条件 必须放在group by 之前,否则语法错误!
select 字段列表包含分组字段,聚合函数.. from 表名 where 条件  group by 分组字段;如:
 SELECT
     sex '性别',
     AVG(math) '数学平局分'
 FROM
 
	student3
WHERE 
	math > 70    -- 先满足条件,然后才能分组;

GROUP BY 	
	sex   ;
⑨筛选查询 having
SELECT 字段列表 FROM 表名	WHERE 条件 GROUP BY 分组字段名称 HAVING 聚合函数;
where条件,group by,having  必须先有条件,分组,然后才筛选!
注意:筛选的后面可以使用聚合函数,group by的后面是不能使用聚合函数的
SELECT 
     sex  '性别',
     COUNT(id) '总人数',
     AVG(math) '数学平均分'
     
FROM
    student3	
WHERE 
	math > 70
GROUP BY 
	sex 
HAVING      -- 后面可以使用聚合函数
	COUNT(id) > 2 ;
	
-- 优化为
SELECT 
     sex  '性别',
     COUNT(id) 人数,
     AVG(math) '数学平均分'
     
FROM
    student3	
WHERE 
	math > 70
GROUP BY 
	sex 
HAVING      -- 后面可以使用聚合函数
	人数 > 2 ;
⑩分页查询 limit
select 字段列表 from 表名   limit 起始行数,每页显示的条数;
起始行数:从0开始算的,    
起始行数 = (当前页码-1)*每页显示的条数

3.数据库的备份和还原

①图形界面化
备份:
选中库名,右键----->BACKUP/Export 备份导出---->选中Sql脚本,存储到本地某个磁盘上----->StructureAndData:表的结构和数据都需要备份
还原:
先在SqlYog将myee_2203删除了,新建库右键---->Import 导入---->选中执行execute sql 脚本
②命令行
-- 数据库的备份和还原命令行的方式2
备份:
	以管理员身份进入dos,不需要登录mysql
			  保存到指定路径上
	mysqldump -uroot -p你的密码  库名 >  磁盘上的路径xx\xx\xx.sql
还原: 
	进入dos控制台,登录mysql
 	先将库删除,新建一个库
 	使用这个库 use库名;
  	加载指定路径的sql脚本
  	source 备份的sql脚本路径(D:\EE_2203\day9\code\mysql_01.sql)

4.数据库的约束

概念
限制用户操作数据库的一种行为(非法行为)
①默认约束 default
DEFAULT '默认值'    -- 加入默认约束
设置一个默认值,如果某个字段没有插入数据,那么默认约束会让它插入默认值
-- 通过sql语句将默认约束去掉
ALTER TABLE stu MODIFY gender VARCHAR(3) ;
INSERT INTO stu(id,NAME) VALUES(4,'赵又廷') ;

-- 通过sql语句给gender字段加上默认约束
ALTER TABLE stu MODIFY gender VARCHAR(3) DEFAULT '男' ;
DELETE FROM stu WHERE id = 4;
②非空约束 not null
当前这个字段值不能为null
-- 通过sql语句将非空约束去掉--修改表的类型
ALTER TABLE stu MODIFY address VARCHAR(50) ;
-- 通过sql语句将非空约束加上
ALTER TABLE stu MODIFY address VARCHAR(50) NOT NULL  ;
③唯一约束unique (属于一种index :索引)
设置字段必须是唯一的
-- 删除唯一约束的语法:atler table 表名 drop index  索引的字段名称(就当前类的字段名称一致的) ;
ALTER TABLE stu DROP INDEX phone_number ;
-- 通过sql语句添加唯一约束,此时语法就和修改表的字段类型的语法一致了
ALTER TABLE stu MODIFY phone_number VARCHAR(11) UNIQUE ;
④主键约束 primary key
primary key(非空且唯一的) 一般和auto_increment(自增长约束)使用多一些
-- 设置在id非业务字段上
如: id INT PRIMARY KEY AUTO_INCREMENT , 
通过sql将主键约束删除
-- alter table 表名 drop PRIMARY  KEY ;
通过sql语句将主键约束加入(唯一起作用)
--ALTER TABLE stu MODIFY id INT PRIMARY KEY  ;
⑤外键约束 foreign key
外键约束 foreign key ,主表和从表建立关联
	dept_id INT,  --主表id 
	CONSTRAINT  -- 声明 
	dept_emp_fk -- 外键名称  命名规则:主表名称_从表名称_fk
	FOREIGN KEY (dept_id)   -- 作用在这个dept_id字段上 
	REFERENCES dept(id)  -- 关联主表的主键id
加入外键约束:修改和删除是很麻烦,需要先修改或者删除从表数据,然后修改/删除主表数据
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值