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


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;-- 查询每页数据的sqlSELECT * 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、统计人数大于2SELECT 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 NAMEemployee: id NAME deptId(fk)      -- 符合第三范式dept: id deptNameadmin: id NAME-- 数据库范式跟数据库查询效率成反比!-- 数据库范式越高,查询效果越低!