目录
1、管理数据库
1.1 查看所有数据库
mysql> show databases; --分号结束。sql语句就会发送给mysql服务器端执行 +--------------------+ | Database | +--------------------+ | information_schema | --mysql元数据数据库。 | mysql | --mysql配置数据库。其中user表用于管理mysql用户和密码、权限信息。 | performance_schema | --mysql性能监控信息数据库。 | test | --测试数据库。 +--------------------+ 4 rows in set (0.00 sec) mysql> |
1.2 创建数据库
1)创建数据库,并制定默认字符集
mysql> create database day16 -> default character set utf8; Query OK, 1 row affected (0.00 sec) |
查看数据库的状态(默认字符串):show create database day15;
2)创建数据库,同时指定默认字符集,以及字符集的默认校验规则。
mysql> create database day15 -> default character set utf8 -> collate utf8_general_ci; --指定默认的校验规则 Query OK, 1 row affected (0.00 sec) |
校验规则:一个字符集可以同时存在多种校验规则。
a)使用A校验规则:取字符的ascii码值,进行比较大小
a < b
97 98
b)使用B校验规则:取字符的ascii码值的负数,进行比较大小
a > b
-97 -98
查看常用的字符串集的校验规则:show character set;
1.3 删除数据库
mysql> drop database day15; Query OK, 0 rows affected (0.00 sec) |
1.4 修改数据库
修改数据库默认字符集
mysql> alter database day15 default character set gbk; Query OK, 1 row affected (0.00 sec) |
2、管理表
2.1 查询所有表
mysql> use day15; --选择数据库 Database changed mysql> show tables; --查看数据库中的所有表 |
2.2 创建表
mysql> create table student( -> id int, -字段:字段名称 字段类型 -> name varchar(20), -> age int -> ); |
查看一个表结构:
show creata table student; 以sql格式返回
desc student; 以表格格式返回
2.3 删除表
mysql> drop table student; Query OK, 0 rows affected (0.01 sec) |
2.4 修改表
1)添加字段
mysql> alter table student add column gender varchar(2); Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0 |
mysql> alter table student add a int,add b int; 多个操作
2)修改字段类型
mysql> alter table student modify column remark varchar(100); Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 |
3)修改字段名称
mysql> alter table student change column remark remark2 varchar(100) Query OK, 0 rows affected (0.05 sec) Records: 0 Duplicates: 0 Warnings: 0 |
4)删除字段
mysql> alter table student drop column a,drop column b; Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0 |
5)修改表名
mysql> alter table student rename to student2; Query OK, 0 rows affected (0.01 sec) |
3、管理数据
-- *************** 一、 数据增删修改操作 ********************--------- -- 1.1 查看表的数据 SELECT * FROM student; -- 1.2 插入数据 -- 插入所有列(所有列的值都要按顺序依次插入) INSERT INTO student VALUES(1,'eric',20,'广州人','男'); INSERT INTO student VALUES(2,'rose',25,'佛山人','女'); -- 插入部分列(列的数据和值的顺序和数量一定保持一致!) INSERT INTO student(id,NAME,age,remark2) VALUES(3,'jacky',27,'佛山人'); -- 1.3 修改数据 -- 修改所有(用的很少) UPDATE student SET gender='男'; -- 修改某个某些条件的数据(用的较多) UPDATE student SET gender='女' WHERE id=2; -- 修改多个列(SET 列名=值,列名=值...) UPDATE student SET age=28,remark2='韶关人' WHERE id=2; -- 1.4 删除数据 -- 删除表的所有数据(用的较少) -- 注意: -- 1)只能删除表中的数据,不能影响表中的自增长约束 -- 2)使用delete删除的数据,通过事务可以回滚。 -- 3)后面带条件 DELETE FROM student; -- 删除部分 DELETE FROM student WHERE id=3; -- 删除所有数据 -- 注意: -- 1)既能删除表的数据,也能够把表的子增长约束置为0. -- 2)使用truncate删除的数据,不能回滚! -- 3)后面不能带条件 TRUNCATE TABLE student; |
4、查询数据(重点)
4.1 查询所有列
-- 2.1 查询所有列 SELECT * FROM student; |
4.2 查询指定列
-- 2.2 查询指定列(多个列之间以逗号分隔) SELECT NAME,gender FROM student; |
4.3 查询时指定别名
-- 2.3 查询时给列指定别名(AS) SELECT NAME AS '姓名',gender AS '性别' FROM student; -- AS可以省略 SELECT NAME '姓名',gender '性别' FROM student; |
4.4 合并列查询
-- 2.5 合并列查询 -- 添加servet,jsp成绩列 ALTER TABLE student ADD servlet INT,ADD jsp INT; SELECT * FROM student; UPDATE student SET servlet=86,jsp=75 WHERE id=1; UPDATE student SET servlet=90,jsp=65 WHERE id=2; UPDATE student SET servlet=78,jsp=50 WHERE id=3; UPDATE student SET servlet=85,jsp=80 WHERE id=4; -- 需求: 查询每个学生的servlet和jsp的总成绩 -- 注意: 必须是数值类型 SELECT NAME '姓名',(servlet+jsp) '总成绩' FROM student; -- 注意,和数值以外合并没有意义 SELECT NAME '姓名',(gender+jsp) FROM student; |
4.5 查询时添加常量列
-- 2.4 查询时添加常量列 -- 需要: 在查询学生表时都带上一个班级列,内容为"java就业班" SELECT NAME '姓名',gender '性别',age '年龄','java就业班' AS '班级' FROM student; |
4.6 查询去除重复数据
-- 2.6 查询去除重复数据 -- 需求: 统计学生都来自于哪里 SELECT DISTINCT remark2 FROM student; -- 这种语法也可以 SELECT DISTINCT(remark2) FROM student; |
4.7 条件查询
-- 2.7 条件查询(where) SELECT * FROM student; -- 1) 逻辑条件: and or -- 需求: 查询id值为3,且性别为男的学生(交集:两个条件同时满足) SELECT * FROM student WHERE id=3 AND gender='男'; -- 需求:查询id为3,或性别为男的学生(并集: 两个条件其中一个满足) SELECT * FROM student WHERE id=3 OR gender='男'; -- 2)比较条件: > < >= <= = between and -- 需求: 查询servlet分数大于80分的学生 SELECT * FROM student WHERE servlet>80; -- 需求:查询jsp分数小于或等于80分的学生 SELECT * FROM student WHERE jsp<=80; SELECT * FROM student WHERE jsp<80 OR jsp=80; -- 需求: 查询servlet成绩大于等于80,且小于等于88的学生 SELECT * FROM student WHERE servlet>=80 AND servlet<=88; -- 等价于上面 SELECT * FROM student WHERE servlet BETWEEN 80 AND 88; -- (包前包后) -- 3)判空条件: ='' is null <>'' is not null UPDATE student SET remark2="" WHERE id=1; UPDATE student SET remark2=NULL WHERE id=4; -- 需求: 查询remark字段为空的学生(包含null,也包含字符串) -- null 和 空字符串的区别: -- null: 没有数据。 判断null: is null,判断不为null: is not null -- 空字符: 有数据,数据就是空字符串。判断空字符: =''; 判断不为空字符串: <>'' SELECT * FROM student WHERE remark2 IS NULL; SELECT * FROM student WHERE remark2=''; SELECT * FROM student WHERE remark2 IS NULL OR remark2=''; -- 需求:查询remark字段不为空的学生 SELECT * FROM student WHERE remark2 IS NOT NULL AND remark2<>''; -- 4) 模糊条件: like -- like后面跟上符合 -- %: 表示任意多个字符(0-多个) -- _: 表示一个字符 -- 需求: 查询姓张的学生 SELECT * FROM student WHERE NAME LIKE '张%'; -- 需求: 查询姓名中包含'张'字的学生 SELECT * FROM student WHERE NAME LIKE '%张%'; -- 需求: 查询姓张,且姓名只有两个字的学生 SELECT * FROM student WHERE NAME LIKE '张__'; |
4.8 聚合查询
-- 2.8 聚合查询 SELECT * FROM student; DELETE FROM student WHERE id=5; -- 需求: 查询所有学生servlet的总分 (SUM: 求和函数) SELECT SUM(servlet) FROM student; -- 需求: 查询所有学生servlet的平均分(AVG; 平均函数) SELECT AVG(servlet) FROM student; -- 需求:查询最高的servlet分数(MAX:最大值函数) SELECT MAX(servlet) FROM student; -- 需求:查询最低的servlet分数(MIN:最小值函数) SELECT MIN(servlet) FROM student; -- 需求: 一共几个学生(COUNT: 统计数量函数) SELECT COUNT(*) FROM student; SELECT COUNT(id) FROM student; -- 效率会比count(*)效率稍高 -- 注意: 聚合函数,会排除null值的数据 SELECT COUNT(remark2) FROM student; |
4.9 分页查询
-- 2.11 分组查询 -- 需求: 查询男女的数量各自多少 -- 预期结果: -- 男 3 -- 女 2 -- 1) 对性别进行分组(group by) 2)在分组基础上进行聚合函数总计 SELECT gender,COUNT(*) '人数' FROM student GROUP BY gender; |
4.10 分组筛选
-- 2.12 分组筛选(group by + having(条件)) -- 需求: 查询人数大于2的性别 -- 1)分组 2)统计 3)条件 SELECT gender,COUNT(*) '人数' FROM student GROUP BY gender HAVING COUNT(*)>2; |