MySQL数据库的常用操作

-- 数据库的常用操作
-- 管理数据:查看、添加、修改、删除数据
-- 查询数据:查询所有字段、查询指定字段、查询时指定别名、查询时合并列、查询时添加常量列、查询时取出重复数据
	 --  条件查询、分页查询、查询后排序、聚合(统计)查询、分组查询、分组后筛选(条件)、子查询
-- 数据约束
-- 约束分类:默认值、非空、唯一、主键、自增长约束、外键、级联操作
-- 数据库设计:第一范式、第二范式、第三范式


student表数据:

MySQL语句:
-- 查看数据库
SHOW DATABASES;

-- 使用数据库
USE day15;

-- 查看表
SHOW TABLES;


SELECT * FROM student;

-- 查询数学成绩大于60小于90的学生
SELECT * FROM student WHERE math BETWEEN 60 AND 90;

-- 查询姓名不等于李一的学生
SELECT * FROM student WHERE NAME<>'李一';

-- 为表添加一列性别默认为难
ALTER TABLE student ADD COLUMN gender CHAR(1) DEFAULT '男';

-- 将id为7的性别改为女
UPDATE student SET gender='女' WHERE id=7;

-- 添加数据
INSERT INTO student VALUES(8,'婓南苇',99,100,100,'女');

-- 删除数据
DELETE  FROM student WHERE id = 8 ;

-- 修改数据
UPDATE student SET NAME='李诗雁',gender='女' WHERE id =4;
UPDATE student SET gender=NULL WHERE id=2;
UPDATE student SET gender='' WHERE id=6;

SELECT * FROM student;

-- 查询指定字段
SELECT NAME,gender FROM student;

-- 查询是指定别名
SELECT NAME '姓名',gender '性别' FROM student;


-- 查询没有真实性别数据的学生
SELECT * FROM student WHERE gender IS NOT NULL OR gende='';


-- 分页查询
-- 查询第1,2条数据
SELECT * FROM student LIMIT 0,2;
-- 查询第5,6,7条数据
SELECT * FROM student LIMIT 4,3;

-- 目前共8条数据,每页显示3条数据,共3页
-- 第一页:
SELECT * FROM student LIMIT 0,3;
-- 第二页:
SELECT * FROM student LIMIT 3,3;
-- 第三页:
SELECT * FROM student LIMIT 6,3;

-- 查询每页数据的sql
SELECT * FROM student LIMIT (当前页-1)*每页行数,每页行数;


-- 查询后排序(order by)
-- 一个排序,按id排序
SELECT * FROM student ORDER BY id DESC;

-- 多个排序:按chinese降序,再按照math降序
SELECT * FROM student ORDER BY chinese DESC,math DESC;




-- 聚合(统计)查询
-- 查询学生chinese的最高分
SELECT MAX(chinese) FROM student;

-- 查询学生english的最低分
SELECT MIN(english) FROM student;

-- 查询所有学生的math总分
SELECT SUM(math) FROM student;

-- 查找chinese的平均分
SELECT AVG(chinese) FROM student;

-- 查询现在有多少名
SELECT COUNT(*) FROM student;
-- count(字段)如果存在null,则不统计该数量
SELECT COUNT(gender) FROM student;


-- 分组查询(groud by)
-- 查询男女各有几人
SELECT gender, COUNT(math) FROM student WHERE gender IS NOT NULL AND gender<>'' GROUP BY gender;


-- 分组后筛选(条件)
-- 查询人数大于2人的性别
-- 1,先把性别进行分组;2、再对每组人数进行统计;3、统计人数大于2
SELECT gender,COUNT(gender) FROM student WHERE gender IS NOT NULL AND gender<>'' GROUP BY gender HAVING COUNT(gender)>2;

-- 子查询:把一个sql查询的结果作为另一个查询的条件
-- 查询chinese最高分的学生
SELECT * FROM student WHERE chinese=(SELECT MAX(chinese) FROM student);




-- 约束分类

-- 默认值
CREATE TABLE staff(
	id INT,
	NAME VARCHAR(20),
	gender CHAR(1) DEFAULT'男'
);

INSERT INTO staff(id,NAME) VALUES(1,'左莫');
INSERT INTO staff(id,NAME) VALUES(2,'韦剑胜');
INSERT INTO staff(id,NAME) VALUES(3,'我离');



-- 删除表
DROP TABLE staff;

-- 非空
-- name不能出现null;
CREATE TABLE staff(
	id INT,
	NAME VARCHAR(20) NOT NULL,
	gender CHAR(1)
);

INSERT INTO staff(id,NAME,gender) VALUES(1,'左莫','男');
INSERT INTO staff(id,NAME,gender) VALUES(2,'韦剑胜','男');
INSERT INTO staff(id,gender) VALUES(3,'男'); -- 将会自动赋值空字符串



-- 唯一
-- id值唯一
CREATE TABLE staff(
	id INT UNIQUE,
	NAME VARCHAR(20),
	gender CHAR(1)
);

-- 插入数据
INSERT INTO staff(id,NAME,gender) VALUES(1,'左莫','男');
INSERT INTO staff(id,NAME,gender) VALUES(1,'韦剑胜','男')  -- 错误;Duplicate entry '1' for key 'id'
INSERT INTO staff(id,gender) VALUES(3,'男'); -- 将会自动赋值空字符串

SELECT * FROM staff;




-- 主键

CREATE TABLE staff(
	id INT PRIMARY KEY,
	NAME VARCHAR(20),
	gender CHAR(1)
);

INSERT INTO staff(id,NAME,gender) VALUES(1,'左莫','男');
INSERT INTO staff(id,NAME,gender) VALUES(1,'韦剑胜','男')    -- 错误;Duplicate entry '1' for key 'PRIMARY'
INSERT INTO staff(id,gender) VALUES(3,'男'); -- 将会自动赋值空字符串

DROP TABLE staff;

-- 自增长
CREATE TABLE staff(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20),
	gender CHAR(1) DEFAULT '男'
);

INSERT INTO staff(NAME) VALUES('左莫');
INSERT INTO staff(NAME) VALUES('韦剑胜');
INSERT INTO staff(NAME) VALUES('我离');

SELECT * FROM staff;

-- delete from: 这种删除不会影响自增长约束
-- truncate table:这种删除会影响自增长约束(必须是全表删除)(用的少)
TRUNCATE TABLE staff;




-- 外键

-- 先建立主表:部门表
CREATE TABLE dept(
	id INT PRIMARY KEY AUTO_INCREMENT,
	departName VARCHAR(20)
);

-- 再建立副表或从表:员工表
CREATE TABLE employee(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20) NOT NULL,
	deptId INT,
	CONSTRAINT employee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id)
	--            外键名称                   外键字段	    参考表(主键)
);


-- 级联操作
-- 即对主表进行操作的结果同时副表也会有相同的效果

CREATE TABLE employee(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20) NOT NULL,
	deptId INT,
	CONSTRAINT  employee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE 
	-- 给外键天机级联修改和级联删除	
);





-- 数据库设计

-- 第一范式
-- 每个表的每个字段都必须是(从业务角度)不可分割的独立单元!
student : id NAME   	-- 违反第一范式					
	  1  张三|小三
	  2  李四|铁四
	  
student id NAME oldname    -- 符合第一范式 
	1  张三  小三
	2  李四  铁四
	
-- 第二范式
student: id NAME id NAME(老师的名字)	-- 违反第二范式
	 1  张三
	 2  李四
		  1    老乐
		  2    老王
		  
student: id NAME      -- 符合第二范式
	 1  张三
	 2  李四
teacher: id NAME
	 1  老乐
	 2  老王


-- 第三范式
-- 在第二范式的基础上,一张表的主键除外的去爱她字段都应该跟主键字段是直接决定关系
employee: id NAME gender deptName(出现冗余)   -- 违反第三范式
admin: id NAME

employee: id NAME deptId(fk)      -- 符合第三范式
dept: id deptName
admin: id NAME

-- 数据库范式跟数据库查询效率成反比!
-- 数据库范式越高,查询效果越低!	  




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值