数据库的管理
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 tablestudent(-> 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 FROMstudent;--另一种语法
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的总成绩' FROMstudent;--需求: 查询学生的servlet的平均分
SELECT AVG(servlet) AS 'servlet的平均分' FROMstudent;--需求: 查询当前servlet最高分
SELECT MAX(servlet) AS '最高分' FROMstudent;--需求: 查询最低分
SELECT MIN(servlet) AS '最低分' FROMstudent;--需求: 统计当前有多少学生(count(字段))
SELECT COUNT(*) FROMstudent;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 * FROMstudent;--需求: 按照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;