管理数据库
注意:mysql的关键字不区分大小写
- 查询所有的数据库
show databases;
- 创建数据库的SQL语句
格式:create database 数据库名 default character set 字符编码 collate 字符编码校验规则
eg: create database demo default character set utf8 collate utf8_general_ci;
- 修改数据库的字符编码
格式:alter database 数据库名 default character set 字符编码
eg: alter database demo default character set gbk;
- 删除数据库
格式:drop database 数据库名
eg: drop database demo;
- 切换操作的数据库
格式:use 数据库名
eg: use demo;
字符集,
什么是字符集
我们都知道,计算机底层只能存二进制,01010000
abc,您好,55665,这些如果存到计算机,得有对应的二进制编码规则
二进制的编码规则就是字符集,有很多个
对应中国的用户来说,中英文数字特殊字符。。。。
我们也有自己的字符集,gbk,utf-8,目前用的最多的是utf-8,这个字符集对中文的支持最好
如果想要把公司的所有员工都存到数据库
- 有一个表来保存员工信息,给表一个名字,这个表名在当前的数据库下表名是唯一的,一般表名的命名都是要有含义,首选英文名称,emp
- 给表定义要存什么,员工是一个概念,对应要存员工的什么(信息)进行进一步的分解,各级实际的情况来分解,id,姓名,性别,身份证号,部门
- 表存数据是以行的形式来存储,一个行数据就一个完成的概念,对应emp来说,它的一行数据就一个员工
- 在步骤2,我们又知道员工的整体概念被分解一个个单独信息(id,姓名,性别,身份证号,部门等等这些东西),这些就被称为一行的多个列,正式这些多个列的信息构成一行完整的数据
- 被分解一个个单独信息,我们称之为字段(属性的意思)
- 表名–字段名的关系,具体到我们现在的员工表的例子,就是员工有哪些字段(属性),这样就通过表名–字段名这样的形式,就把员工给描述清楚了
- 字段的名和表名也是一样,也得最好有含义,首选英文名称
id,姓名,性别,年龄,身份证号,部门,对于这些字段来说,要存到数据库的表中,要对字段做一个数据类型
年龄,一般是数字的
姓名,字符串类型
身份证号,一般用字符串类型规定
生日,日期类型
这个也是RDMS的特有的东西,就是数据的结构化,可以规则某一列是指定的某种数据类型
浮点数和定点数,都有有效数字位数m和小数位位数d的定义
有效数字,是之一个数从左开始(不是0的)向右计数
- 2.34,2位有效数字,2.3
- 0.123,2位有效数字,0.12
管理表
注意:mysql的关键字不区分大小写
- 查看当前数据库的所有表
- 查看当前操作的数据库有哪些表
show tables;
- 创建表
格式:
CREATE TABLE 表名 (
字段名 字段类型 [NOT NULL] [AUTO_INCREMENT],
[字段名 字段类型 ,]
.....
[字段名 字段类型 ,]
[PRIMARY KEY (字段名)]
)
示例:
#创建学生表 (表名和字段名经量用有含义的中文来表示)
create table student(
id int not null,
#id为主键,不能是null
name varchar(100),
age int(2),
primary key(id)
)
- 修改表
- 给表添加一个字段
格式:
alter table 表名 add column 字段名 字段类型;
示例:
alter table student add column sex varchar(2);
- 给表添加多个字段
格式:
alter table 表名 add 字段名 字段类型,add 字段名 字段类型,...,add 字段名 字段类型;
示例:
alter table student add a int,add b int,add c int;
- 修改字段数据类型
格式:
alter table 表名 modify column 字段名 字段类型;
示例:
alter table student modify column sex char(4);
- 修改字段的名称
格式:
alter table 表名 change column 原字段名 新字段名 字段的数据类型
示例:
alter table student change column a a1 int;
- 删除表的一到多个字段
格式:
alter table 表名 drop column 字段名;
alter table 表名 drop column 字段名,...,drop column 字段名;
示例:
alter table student drop column a1;
alter table student drop column b,drop column c;
- 修改表名
格式:
alter table 原表名 rename to 新表名;
示例:
alter table student rename to stu;
- 删除表
格式:
drop table 表名
示例:
drop table student;
- 查看表结构
格式:
describe 表名
示例:
describe student;
管理数据
- 查询表的所有数据
格式:
select * from 表名;
示例:
select * from student;
- 给表插入数据
- 单条全量插入数据,注意’’(一组单引号)代表字符串,在给所有字段插入数据时,要根据表结构的字段顺序给值
格式:
insert into 表名 values (字段1的值,字段2的值,...,字段n的值);
示例:
insert into student values (1,'张三',14,'男');
- 单条指定字段插入数据,注意插入的值要和前面指定的字段的顺序保存一致
格式:
insert into 表名 (字段1,字段2,...,字段n) values (字段1的值,字段2的值,...,字段n的值);
insert into 表名 (字段1,字段3,字段5) values (字段1的值,字段3的值,字段5的值);
示例:
insert into student (id,name,age) values (2,'李四',15);
insert into student (name,age,id) values ('王五',16,3);
注意:字段的值必须可以空才可以指定输入
- 批量插入数据
格式:
insert into 表名 values
(字段1的值,字段2的值,...,字段n的值),
(字段1的值,字段2的值,...,字段n的值),
...
(字段1的值,字段2的值,...,字段n的值);
示例:
insert into student values (4,'lucy',14,'女'),(5,'小明',15,'男'),(6,'小红',16,'女');
注意:在插入数据时,如果某一个字段是自动递增的,可以不用插入这个字段的值,而由数据库自己计算填充
- 修改数据
- 修改一到多个指定字段的所有行的值
格式:
update 表名 set 字段名 = 值,字段名 = 值,...,字段名 = 值;
示例:
把表的当前所有行的class字段的值改成'二班'
update student set class = '二班';
- 按条件修改指定字段的值
格式:
update 表名 set 字段名 = 值 where 字段名 = 值;
示例:
把id为2的学生的性别修改为男
update student set sex = '男' where id = 2;
- 按条件修改一到多个指定字段的所有行的值
- 这种查询是前面2种查询的结合使用
- 按条件改表某一行的某几个字段,注意不加where条件会改变当前所有行的数据
格式:
update 表名 set 字段名 = 值,字段名 = 值,...,字段名 = 值where 字段名 = 值;
示例:
把id为3的学生的姓名改为张三,年龄改为12,性别改为男,班级改为一般
update student set name = '张三',age = 12,sex = '男',class = '一班' where id = 3;
- 删除表
删除表都是按行删除
- 按条件删除
格式:
delete from 表名 where 字段名 = 值;
示例:
删除学生表中id为2的对应行数据
delete from student where id = 2;
删除学生表中姓名为lili1的对应行数据(如果有多个叫lili1,就是删除多行)
delete from student where name = 'lili1';
- 整体删除,删除表当前的所有行数据
格式:
delete from 表名
示例:
删除学生表的所有行数据
delete from student;
注意:
- 如果表中有字段是字段递增类型的,使用delete删除全表后,自动递增的起始点保留。例如,一个表的id已经自动递增到了10,那么使用delete删除全表后,再次insert插入数据时,id是从10继续往后递增,而不会从0开始计算。
- 如果想要让自动递增也回归初始状态,需要把表drop掉,然后重新建表。
- 如果表中有字段是字段递增类型的时候,删除中间的某条数据,不会影响递增的累加。例如,一个表的id已经自动递增到了10,那么使用delete删除id为3的那行数据,再次insert插入数据时,id是从10继续往后递增,中间缺失的3就缺失了,除非你在insert的时候指定插入的id字段的值为3。
查询数据(重点)
简单查询
- 查询所有列
格式:
select * from 表名;
示例:
select * from student;
- 查询指定的列
格式:
select 字段,字段,...,字段 from 表名;
示例:
select name,class from student;
- 给查询的指定列取一个别名
格式:
select 字段名 别名,字段名 别名 from 表名;
示例:
select name '姓名',class '班级' from student;
注意:取别名在多表联合查询时可能会用,例如表a有一个字段叫name,表b有一个字段叫name,我们就可以通过设置别名来区分这两个name
- 合并列查询,
例如,我们想做把班级和姓名放在一个列中查询,展示的时候是 类似二班-张三这种的
select CONCAT(class,'-',name,'-',age,sex) '班级-姓名' from student;
合并查询可以做算数查询,例如查询servlet和jsp的总成绩
select name '姓名',(servlet + jsp) '总成绩' from student;
- 查询时添加常量列
#就是直接查询一个普通的字符串,这个字符串在查询中就会作为一个常量在结果结果集中展示
select name, age, (servlet + jsp) '总成绩', class, '光明小学' from student;
select '常量' from student;
- 去除某个列重复数据,
使用distinct 列名,注意在使用的时候去重的列要单独查询,不要和其他队列一起查询
格式:
select distinct 字段名 from 表名;
示例:
查询学生的所有的年龄,查询时去除重复的年龄
select distinct age from student;
条件查询
基本格式:
select 字段,字段,...,字段 from 表名 where 查询条件
比较条件
符号 含义
= 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
between and 在a和b两个值之间,包含a和b
- 查询所有年龄大于14岁的学生的姓名,性别,班级
select name,sex,class,age from student where age > 14;
- 查询所有年龄大于等于14岁的学生的姓名,性别,年龄,班级
select name,sex,class,age from student where age >= 14;
- 查询所有年龄小于14岁的学生的姓名,性别,年龄,班级
select name,sex,class,age from student where age < 14;
- 查询所有年龄小于等于14岁的学生的姓名,性别,年龄,班级
select name,sex,class,age from student where age <= 14;
- 查询所有jsp成绩在80到90之间的学生,(包含80和90)
select * from student where jsp between 80 and 90;
逻辑条件
符号 含义
and 并且
or 或者
- and 和or可以无限连用
- 查询二班的jsp成绩在95分以上的学生,这里查询要使用and,意思就并且
select * from student where class = '二班' and jsp > 95;
- 查询二班的jsp成绩在95分以上的男学生
select * from student where class = '二班' and jsp > 95 and sex = '男';
- 例如查询servlet的成绩在85分以上或者jsp成绩在95分以上的学生
select * from student where servlet > 85 or jsp > 95;
- 例如查询servlet的成绩在85分以上或者jsp成绩在95分以上或者id为4的学生
select * from student where servlet > 85 or jsp > 95 or id = 4;
- 比较条件和逻辑条件混合使用
查询二班jsp成绩在95分以上或者一班servlet成绩在85分以上的学生
select * from student where (class = '二班' and jsp > 95) or (class = '一班' and servlet > 85);
判空条件
符号 含义
='' 是空字符串''
is nul 是null值
is not null 不是null值
<> 不是,非
<>'' 不是空字符串'',也不是null值
- 查询name是’'的数据
SELECT * from student where name = '';
- 查询name是null的数据
SELECT * from student where name is null;
- 查询name不是null的数据,is not null单纯的指的是值不是null
SELECT * from student where name is not null;
- 查询name不等于’'的数据,这个里面包含不等于null,也就是说<> '‘代表的意思是不是’'也不是null
SELECT * from student where name <> '';
- 不等于条件<>,还可以用来判断别的值
例如:
查询所有姓名不是张三的学生
SELECT * from student where name <> '张三';
查询所有年龄不是14的学生
SELECT * from student where age <> 14;
模糊条件
字段类型为字符串时,查询字段值是否包含某些子串
例如:查询行姓张的学生都有哪些,这个需要模糊查询
符号 含义
like 包含
not like 不包含
模糊查询立刻主要是用来查询字符串,like 要配合_或者%一起使用
_是匹配0到1个字符,%是匹配0到多个字符
- 查询name中含有一个张字的学生
select * from student whe