1. 基础操作
MySQL语句执行顺序
1.1 启动服务
a.手动启动
我的电脑->右键->管理->服务->mysql->右键启动/启动
b.命令方式
在管理员模式下运行cmd,执行如下操作:
net start mysql --启动服务
net stop mysql --关闭服务
1.2 命令连接数据库(客户端连接数据库)
运行cmd,执行如下操作:
mysql -h 主机名 -u用户名 -p密码
退出数据库命令:
quit;
exit;
1.3 防止乱码
set names gbk;
注意:为了防止乱码,所以登录成功后,就需要设置字符集。登录成功后,以后的语句都必须添加分号
1.4 查看所有的数据库
show databases;
1.5 创建数据库
create database 数据库名字 charset utf8 [collate 校对规则名];
字符集名类似这些:utf8,gbk,gb2312,big5,ascii等。推荐用utf8.
校对规则名:通常都不用写,而是使用所设定字符集的默认校对规则。说明:在定义语法结构的时候,如果加有中括号,代表的意思可以不写
1.6 查看数据库创建信息
show create database 数据库名;
1.7 删除数据库
drop database 数据库名;
1.8 选择某个数据库
一个项目中,具体进行有关数据操作(增删改查)之前,都需要先“选择/进入”该数据库。
use 数据库名;
1.9 显示所有表
show tables;
1.10 创建表
create table 表名(字段1,字段2,字段3.....字段n) [charset=字符集][type=表类型];
例如: create table student(id int,name varchar(50),sex char(2),age int);
其中:
a.字段的形式为:字段名 字段类型 [字段属性…]
b.字符集包括:utf ,gbk,gb2312,big5等等,默认是数据库的字符集,可以不写
c.表类型包括:InnoDB,MyIsam,BDB等,默认是InnoDB,可以不写
注意事项:
a.表字段名不可以是中文
b.常用数据类型有:
中文 | 关键字 | 其他 |
---|---|---|
字符串 | varchar,char,text | name varchar(50),字符串类型必须写上长度 |
数字 | int | age int;整数可以不用写长度 |
布尔 | bit | 0=false,1=true |
时间 | datetime,date | birthday datetime;不用写长度 |
浮点 | float | money float;不用写长度 |
1.11 查看表结构
desc 表名;
所谓数据表的结构,其实就是一个表的每个字段的具体信息
1.12 查看表的创建语句
show create table 表名;
1.13 删除表
drop table 表名;
1.14 字段操作
1.14.1 添加字段
alter table 表名 add 字段名 字段类型 [字段属性][after某字段或first];
其中:
after某字段名:意思是,新加的字段,放在该现有字段的后面
first:表示新加的字段放在第一位(最前面)
例如:
在这里插入图片描述
1.14.2 修改字段
alter table 表名 change 旧字段名 新字段名 字段类型 [字段属性];
如果不修改字段名,而只是修改字段的其他信息,则可以使用
alter table 表名 modify 要修改的字段名 字段类型 [字段属性];
1.14.3 删除字段
alter table 表名 drop 要删除的字段;
注意: MySql不支持下面这种批量删除
alter table 表名 drop COLUMN 要删除的字段1,drop COLUMN 要删除的字段2;
MySql不支持删除表中的全部字段,可用drop table 表名
代替
1.14.4 修改表名
alter table 表名 rename 新的表名;
1.14.5 修改字符集
alter table 表名 charset="新的字符集";
2. 数据操作
数据都是存储在数据表中
数据的操作基本有4种,增(插入insert),删(删除delete),改(修改update),查(查询select).
即所谓的CRUD操作:create(创建),retrieve(获取),update(更新),delete(删除)
2.1 插入数据
insert into 表名(字段1,字段2....) values(数据1,数据2....);
--普通的,完整的添加数据
insert into student(id,name,sex,telphone,age) values(1,'张三','男','123455',18);
--查询表中的所有数据
select * from 表名;
--特殊的添加数据
insert into student values(2,'里斯','男','123455',19);--添加一条完整的数据
insert into student values(3,'王五','男','123456',19),(4,'小张','女','999',20);--一次性插入多条数据
insert into student select 5,'小李','女','999',21;--新增一条数据
insert into student select 6,'小周','女','888',22 union select 7 ,'小王','男','123',23;--一次性插入多条数据
--会出错的情况
insert into student(id,name,sex,telphone,age) values(1,'张三','男','123455','十八');--age字段是数字类型,而插入的值却是字符串类型,类型不匹配
insert into student(id,name,sex,telphone,age) values(1,'张三','男','123455');--插入罗列的字段和值的数量是不匹配的
insert into student values(3,'王五','男','123455');--值和字段数量不匹配
注意事项:
1.字符串和时间类型在使用的时候,是必须添加单引号,不要加成双引号了
2.在插入数据的时候,需要一一匹配,匹配包括数据类型,数量,顺序都必须一一匹配
3.在表后罗列字段的时候,是可以不写字段的。但是,如果不罗列字段,那么你的值就必须是这张表所有字段的值。比如表有10个字段,那么就的意义罗列10个值,且一一对应
2.2 查询数据
select 字段 from 表 [where 条件];
案例:
--查询不重复的列
select distinct depart from teacher;
--统计满足条件的数据行数
select count(*) from student where class='95031';
--查询Score表中的最高分的学生学号和课程号。
select * from score order by degree desc limit 0,1;--排序之后,读取数据是从索引0开始,截取第0-1个,但是不包含1
--查询所有的学生信息
select id,name,sex,telphone,age from student;--查询出所有的学生信息
select * from student;--查询出所有的学生信息
select name,telphone from student;--只查出用户名和电话号码
--查询id=1的学生信息
select * from student where id=1;
--查询所有的男学生
select * from student where sex='男';
--查询年龄大于18的学生信息
select * from student where age>18;
--查询性别为'男'且年龄大于20的学生
select * from student where sex='男' and age>20;
--查询姓名为张三和里斯的学生
select * from student where name='张三' or name='里斯';
select * from student where name in('张三','里斯');
--查询年龄在19-23之间,包含19和23
select * from student where age>=19 and age<=23;
select * from student where age between 19 and 23;
--查询不是张三也不是里斯的所有学生
select * from student where name<>'张三' and name<>'里斯';
select * from student where name not in('张三','里斯');
--模糊查询,like
select * from student where name like '小';--where name='小'
select * from student where name like '小%';--name以小开头的所有学生信息
select * from student where name like '%小';--name以小结尾的所有学生信息
select * from student where name like '%小%';--name包含小的所有的学生信息
select * from student where name like '%小%大%';--name 既包含小有包含大的所有学生信息
--查询所有以小开头的学生信息
select * from student where name like '小%';
--排序查询
select * from student order by id;--根据id进行查询,order by 默认是顺序,asc
select * from student order by id asc;
select * from student order by id desc;--根据id倒序查询
--聚合查询
count(),sum(),avg(),max(),min()
2.3 删除数据
delete from 表 [where 条件];
说明:
A. 删除数据指的是删除表中的某些行,比如原来有10行,可以将其中的3行删除,则剩下7行
B. where条件表示删除数据所应满足的条件,含义跟select中的一样。
C. where 条件可以不写,如果不写,则会删除所有数据——通常都不会这么用
案例:
--删除id为7的数据
delete from student where id=7;
--删除性别为男,且年龄小于20的学生信息
delete from student where sex='男' and age<20;
--删除表中第一条数据
delete from student limit 1;
2.4 修改数据
update 表名 set 字段1=值1,字段2=值2....[where 条件]
说明:
A. 修改数据指的是修改表的某些行的某些字段
B. where条件表示修改数据所应满足的条件,含义跟select中的一样
C. where条件可以不写,如果不写,则会修改所有数据——通常都不会这么用
案例:
--修改id为2的姓名为张三,电话号码为123456
update student set name='张三',telphone='123456' where id=2;
3. 练习1
--建库
create database school charset utf8;
--建学生表
create table student (
sno varchar(3) not null,
sname varchar(4) not null,
ssex varchar(2) not null,
sbirthday datetime,
class varchar(5)
);
--添加学生数据
insert into student values('108','曾华','男','1977-9-1','95033');
insert into student values('105','匡明','男','1975-10-2','95031'),('107','王丽','女','1976-1-23','95033'),('101','李军','男','1976-2-20','95033'),('109','王芳','女','1975-2-10','95031'),('103','陆君','男','1974-6-3','95031');
--创建教师表
create table teacher (tno