在操作数据库前需要把MySQL安装和配置好,这里我就不讲述可以看B站中博哥的视频。MySQL启动需要输入密码,然后就可以对数据库进行操作。
数据库的操作
1.创建数据库
create database 数据库名 charset utf8;
如果数据库中的表中存在中文的情况,没有使用utf8插入时会报错的,所以大家尽量在创建数据库时就把utf8加进去。下面是创建数据库没有使用utf8,后创建表时出现的问题。
MySQL中特定含义的单词、关键字,是不能用来作为数据库名、表名和列名的,而且MySQL是对大小写不敏感的;
创建数据库时,如果原先的数据库中已经存在的就不能再用相同的数据库名,如果不知道之前有没有创建过那就在数据库名前面加if not exists,这样不管有没有它都是存在这个数据库的(就是如果之前就存在的话会出现一个警告但不影响)
2.查看数据库
show databases;
MySQL中可以存在很多数据库所以查看时需要使用databases(复数);
3.选中数据库
use 数据库名;
选中数据库是对这个单独的数据库进行操作,在后面创建表时也需要选中当前数据库。
4.删除数据库
drop database 数据库名;
数据库删除后内部看不到对应的数据库,里面的表和数据全部被删除。删除数据库是一个很危险的操作,在往后工作中如果要使用该操作需要确保该数据库中数据是否保存或确定不要才能进行删除。
常用数据类型
1.数值类型
数值类型可以指定为无符号(unsigned),表示不取负数。 1字节(bytes)= 8bit。
对于整型类型的范围:
- 有符号范围:-2^(类型字节数*8-1)到2^(类型字节数*8-1)-1,如int是4字节,就 是-2^31到2^31-1
- 无符号范围:0到2^(类型字节数*8)-1,如int就是2^32-1
尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其 如此,还不如设计时,将int类型提升为bigint类型。
2.字符串类型
3.日期类型
表的操作
在使用表的任一操作时,一定需要选中一个数据库进行表的操作。
1.创建表
create table 表名(列名,类型,列名,类型……);
我们还可以通过comment来增加字段提示,这个只是用来提示该列表示的含义,后对续没有影响。
create table new_table(id int comment '序号', name varchar(20) comment '姓名');
2.查看所有表
show tables;
3.查看指定表的结构
desc 表名;
4.删除表
drop table 表名;
5.插入数据
insert into 表名 values(按格式插入数据);//一次插入一个
insert into 表名 values(按格式插入数据),(数据),(数据);//一次插入多个记录
6.查询表中数据
6.1全列查询
select * from 表名;
该种查询是将表中所有数据都显现出来;
6.2指定列查询
select 列名,列名,列名…… from 表名;
可以指定多列查询,如果该表中存在多个列,而我们只需要其中的几列时就可以用到指定列查询,可以大大减少查询的次数;
6.3查询的字段为表达式
select 列名,表达式,…… from 表名;
可以多列表达式计算,这个新创建的表是一个临时表,在服务器中并没有对原先表进行计算
6.4另取别名
select 表达式 as 别名 from 表名;
可以多个列名进行取别名,别名可以相同。
6.5数据去重(distinct修饰)
select distinct 列名,列名…… from 表名;
distinct修饰某一列或多个列,如果输入多个列时,必须满足多个列的每一列都相同才能去掉。
6.6指定列排序(order by)
select 列名…… from 表名 order by 列名…… asc/desc;//对指定列进行某列排序
select * from 表名 order by 列名…… asc/desc;//对整个表进行某列排序
asc是升序(默认情况下就是升序从小到大,可以不用写),desc是降序从大到小。也可以对多个列进行排序,比较时先看第一个列名,如果第一个相同那就看第二个接着往下继续比较。注:null参与任何运算结果都是null,null也是最小的。
6.7条件查询(where)
- 比较运算符
- 逻辑运算符
select 显示列 from 表名 where 表达式;
下面是一些案例:
select name, english from new_table where math < 60;//查询英语小于60的同学
select name, chinese, english from new_table where chinese > english;//查询语文大于英语的同学
select name, chinese+math+english as sum from new_table where chinese+math+english < 250;//总分小于250的同学
select * from new_table where chinese > 80 and english > 80;//语文和英语都大于80的同学
select * from new_table where chinese >80 or english > 80;//语文或英语大于80的同学
//
select name, chinese from new_table where chinese between 80 and 90;//语文成绩在80到90之间的同学,也可以用and实现between … and …
select name,math from new_table where math in(80.0,95.0);//数学成绩是80或90的同学,也可以用or实现in(……)
select name from new_table where name like '张%';//张%是姓张的同学,张_是姓张但是名字只有两个字的同学
select * from new_table where name is not null;//姓名不为空的同学
select * from new_table where name is null;//姓名为空的同学
6.8分页查询(limit)
select 显示列 from 表名 (order by) limit n;//选取前n个
select 显示列 from 表名 limit n offset x;//从下标x开始查询
从表中选取前三个,也可以在排完序后取前三个,也可以在下标x开始查询前n个(下标从0开始)
6.9修改数据
update 表名 set 列名 = 更新值, 列名 = 更新值…… where 条件;
修改数据也是需要谨慎操作的,确保数据确定要修改再操作。如果要更新某一列的值那就不能自增+=或自减-=,只能x = x+3这样操作。如果update不写条件那就默认表中所有数据都要修改。
注:如果使用decimal(3,1)进行操作时如果超过了它的表现形式那就会报错,例如90.4,如果加10就等于100.4那就超过了三位数。
7.删除表
- 删除表
drop table 表名;
- 删除表中数据
delete from 表名 where 条件;//删除满足条件的数据
delete from 表名;//删除表中所有数据,但是还存在当前表