MySQL数据库的常用操作
2016-07-28 23:06
531 查看
-- 数据库的常用操作 -- 管理数据:查看、添加、修改、删除数据 -- 查询数据:查询所有字段、查询指定字段、查询时指定别名、查询时合并列、查询时添加常量列、查询时取出重复数据 -- 条件查询、分页查询、查询后排序、聚合(统计)查询、分组查询、分组后筛选(条件)、子查询 -- 数据约束 -- 约束分类:默认值、非空、唯一、主键、自增长约束、外键、级联操作 -- 数据库设计:第一范式、第二范式、第三范式
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 -- 数据库范式跟数据库查询效率成反比! -- 数据库范式越高,查询效果越低!
相关文章推荐
- navicat远程连接mysql,2003 can't connect to mysql server on 10038
- mysql56 在线源码查看
- Mysql数据库基本操作
- MySQL进阶(二)——子查询
- mysqldump中使用flush tables with read lock的风险分析
- MySQL灾难恢复
- MySQL存储过程
- 开源分布式MySQL中间件探究与应用 dba+
- mysqldump原理及实践
- mysql 易错误理解
- MySQL之Replication
- Mysql异常:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException
- Mysql异常:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
- Mysql查询缓存研究
- mysql的函数
- MYSQL 技术内幕 博客学习
- MySQL 5.6 for Windows 解压缩版配置安装
- mysql 触发器示例
- mysql命令2
- MySQL之逻辑查询处理流程