MySQL--数据库、数据表和数据的管理
数据库的管理
1、连接数据库指令:
$ mysql -u root -p --用root用户登录数据库
提示密码后,输入密码,完成输入。
2、查看数据库指令:
mysql> show databases; --显示当前用户下的所有数据库
3、创建数据库指令:
mysql> create database test
-> default character set utf8; --创建数据库名为test的数据库,默认字符集为utf-8
4、修改数据库指令(一般只修改数据库的默认字符集)
mysql> alter database test default character set gbk; --修改数据库test的默认字符集为gbk
5、查看数据库的字符集
mysql> show create database test; --查看数据库的test的字符集
6、删除数据库指令:
mysql> drop database test; --删除数据库,数据库的名字为test
数据表的管理
1、查看数据库中含有的表
mysql> show tables;
2、创建表的指令:--创建表的时候要先切换到对应的数据库。
2.1 切换数据库指令:
mysql> use test; --切换到test数据库
2.2 创建表指令:
mysql> create table student( -> id int, -> name varchar(20), -> age int -> ); --创建student表,表中含有id,name,age三个字段。
3、查看表的详情指令:
mysql> desc student; --查看student表的表结构
4、修改表的指令:
4.1 修改表名:
mysql> alter table student rename to teacher; --把student表名改为teacher
4.2 添加表中的字段:
mysql> alter table teacher add column gender varchar(2); --在teacher表中添加gender字段
4.3 修改字段的名:
mysql> alter table teacher change gender tgender varchar(20); --把teacher表中的gender字段名改为 tgender,数据类型也改成了20个字符。
4.4 修改字段的数据类型:
mysql> alter table teacher modify tgender varchar(2); --把teacher表中的tgender的数据类型改为varchar(2)
4.5 删除字段
mysql> alter table teacher drop tgender; --删除teacher表中的tgender字段。
5、删除表
mysql> drop table teacher; --删除teacher表
数据的操作
1、插入数据
mysql> insert into student values(1,'zhangsan',20); --按照列全部插入
mysql> insert into student(id,name,age) values(1,'lisi',30); --插入指定列数据
注意:插入的时候一定要values的一定要和前面的列名一一对应,类名可以省略,省略之后代表插入所有列的数据。
2、修改数据
mysql> update student set id=2 where name='lisi'; --把名字为lisi的id给我2;
3、删除数据
mysql> delete from student; --删除表中的所有数据 mysql> delete from student where id=2;--根据条件删除数据 mysql> TRUNCATE TABLE student; --删除表中的所有数据
truncate table 和 delete from的区别:
truncate table:
1):不可以带条件删除
2):即可以删除表的数据,也可以删除表的约束
3):使用truncate table删除的数据不能回滚
delete from:
1):可以带条件删除
2):只能删除表的数据,不能删除表的约束
3):使用delete from删除的数据可以回滚(事务)
4、查看数据
4.1 查询所有列
mysql> select * from student; --查看表中的所有数据。
4.2 查询指定列
mysql> select id,name from student; --查看指定列数据。
4.3 查询是添加常量列
mysql> select id,name,age,'one levele' as 'garde' from student; --增加grade列并赋值为one levele
4.4 查询是合并列
SELECT id,NAME,(servlet+jsp) AS '总成绩' FROM student; --合并servlet 和jsp 为一列
注意:合并列只能是数值类型。
4.5 去重查询
SELECT DISTINCT gender FROM student; -- 另一种语法 SELECT DISTINCT(gender) FROM student;
4.6 条件查询--where关键字代表条件的开始
mysql> select * from student where name='zhangsan'; --根据条件查询所有列
查询时可以多条件查询:
1)逻辑条件查询: and、or
SELECT * FROM student WHERE id=2 AND NAME='李四'; -- 交集 SELECT * FROM student WHERE id=2 OR NAME='张三'; -- 并集
2)比较条件 :> < >= <= = <>(不等于) between and (等价于>= 且 <=)
SELECT * FROM student WHERE jsp>=75 AND jsp<=90; -- 另一个语法 SELECT * FROM student WHERE jsp BETWEEN 75 AND 90; -- (包前包后) SELECT * FROM student WHERE gender<>'男';
3)判空条件:is null / is not null / ='' / <>''
SELECT * FROM student WHERE address IS NULL ; -- 判断空字符串 SELECT * FROM student WHERE address=''; SELECT * FROM student WHERE address IS NULL OR address=''; -- (包括null和空字符串)
4) 模糊查询--like
通常使用以下替换标记:
% : 表示任意个字符
_ : 表示一个字符
-- 需求: 查询姓‘张’的学生 SELECT * FROM student WHERE NAME LIKE '李%'; -- 需求: 查询姓‘李’,且姓名只有两个字的学生 SELECT * FROM student WHERE NAME LIKE '李_';
5) 聚合查询 --sum() avg() max() min() count()
-- 需求:查询学生的servlet的总成绩 (sum() :求和函数) SELECT SUM(servlet) AS 'servlet的总成绩' FROM student; -- 需求: 查询学生的servlet的平均分 SELECT AVG(servlet) AS 'servlet的平均分' FROM student; -- 需求: 查询当前servlet最高分 SELECT MAX(servlet) AS '最高分' FROM student; -- 需求: 查询最低分 SELECT MIN(servlet) AS '最低分' FROM student; -- 需求: 统计当前有多少学生(count(字段)) SELECT COUNT(*) FROM student; SELECT COUNT(id) FROM student;
注意:count()函数统计的数量不包含null的数据,使用count统计表的记录数,要使用不包含null值的字段。
一般聚合查询会和分组(group by)一块使用。
6)分页查询 --limit(开始行号,每页显示行数)
-- 需求: 查询第1,2条记录(第1页的数据) SELECT * FROM student LIMIT 0,2; -- 查询第3,4条记录(第2页的数据) SELECT * FROM student LIMIT 2,2; -- 查询第5,6条记录(第3页的数据) SELECT * FROM student LIMIT 4,2; -- 查询第7,8条记录 (没有记录不显示) SELECT * FROM student LIMIT 6,2;
注意:
分页规律公式:SELECT * FROM student LIMIT (当前页-1)*每页显示多少条,每页显示多少条;
7)排序查询 -- order by 字段 asc/desc
-- asc: 顺序,正序。数值:递增,字母:自然顺序(a-z)
-- desc: 倒序,反序。数值:递减,字母:自然反序(z-a)
-- 默认情况下,按照插入记录顺序排序 SELECT * FROM student; -- 需求: 按照id顺序排序 SELECT * FROM student ORDER BY id ASC; SELECT * FROM student ORDER BY id; -- 默认正序 SELECT * FROM student ORDER BY id DESC;-- 反序 -- 注意:多个排序条件 -- 需求: 按照servlet正序,按照jsp的倒序 SELECT * FROM student ORDER BY servlet ASC,jsp DESC;
8) 分组查询 -- group by 字段
-- 需求: 查询男女的人数 -- 预期结果: -- 男 3 --- 女 2 -- 1) 把学生按照性别分组(GROUP BY gender) -- 2) 统计每组的人数(COUNT(*)) SELECT gender,COUNT(*) FROM student GROUP BY gender;
9) 分组条件查询 group by 字段 having 条件
-- 需求: 查询总人数大于2的性别 -- 1) 查询男女的人数 -- 2)筛选出人数大于2的记录(having) --- 注意: 分组之前条件使用where关键字,分组之前条件使用having关键字 SELECT gender,COUNT(*) FROM student WHERE GROUP BY gender HAVING COUNT(*)>2;