数据库中:库和表 的增删改查命令
连接mysql
连接MySQL服务器的话,则:mysql -u root -p
(注意:我的用户名是root),然后输入密码就可以再次连接了
显示数据库
show databases;
显示数据库中的表
使用某个库
use 库名;
//注意先使用use 库名
show tables;
在库中导入sql文件
mysql -u root -p123456 --database login < login.sql
// mysql -r 数据库账号 -p数据库密码 --库名 需要导入的表名 < 将要导入的sql文件
创建数据库,并设置编码格式为utf8
create database if not exists 库名 character set utf8;
显示某个库的编码格式
show create database 库名
使用某个库
use 库名;
修改某个库的编码格式
alter database 库名 character set 编码格式
删除某个库
drop database if exists 库名;
数据表操作:增删改查
创建表
create table if not exists 表名(
字段名称 数据类型 约束
)
数据类型
整形 tinyint / int()
浮点型 float(数字的总位数,小数点后的位数) / double
字符串 char(定长5) varchar(变长5)
布尔值 1 0
时间
约束
主键:primary key,默认就是不能为空,auto_increment
唯一:unique key, 手机号,身份证,学号
非空:not null
默认约束: default ‘’
外键约束:foreign key
查看表结构
返回sql语句
show create table 表名
返回table表格形式:
describe 表名
修改表
添加字段
alter table 表明 add 字段名 数据类型 约束
修改字段名称
alter table 表名 change uname username 数据类型 约束
更改表名
alter table stu rename student
删除字段
alter table 表名 drop 字段名称
删除表
drop table 表名
添加约束
alter table 表明 add 字段名 数据类型 约束
alter table 表名 change uname uname 数据类型 约束
alter table 表名 alter 字段名称 set 约束
删除约束
删除唯一约束
数据库中 表 记录的:增删改查
创建表
create table member5(
id int(5) unsigned key auto_increment,
name varchar(24),
sex enum("man","women") default "man",
age tinyint,
province varchar(30),
salary float(8,2)
);
增加
插入单条数据
INSERT [INTO] <表名> VALUES <值列表>
Eg: insert into 表名 values(null,‘张三’,default,45,‘河南’,6666.66);
insert into member5 values(null,'张三',default,45,'河南',6666.66);
insert into member5 values(null,'张三丰',default,65,'河南',7500);
insert into member5 values(null,'张子仪','women',39,'洛杉矶',6666.66);
insert into member5 values(null,'傻子张','women',26,'北京',3000);
insert into member5 values(null,'大张伟',default,33,'北京',9999.99);
insert into member5 values(null,'小张宁',default,19,'河南',99999.99);
insert into member5 values(null,'李四','women',15,'河北',2000);
插入多条数据
insert into 表名(字段名称) values(对应字段值),(对应字段值); 字段名:可以省略
insert into member5(name,age,province,salary) values('王小二',17,'河北',1800),('二郎神',98,'宝莲灯',8900),('李二牛',19,'北京',3200);
insert into member5 values(null,'JACK',default,45,'洛杉矶',3000);
查找
select 字段1,字段2,… from 表名 [where 条件子句] [group by 字段][haveing 条件子句][order by 字段] [limit [起始值] 条数]
查找某个表中所有的数据
select * from 表名;
下面都是上面创建的表的查询例子
查找表中字段name,age,salary
select name,age,salary from member5; member5 是表名;
查找表中字段name,age,salary并且age大于30的
select name,age,salary from member5 where age > 30;
查找表中字段province 是null的
select * from member5 where province is null;
查找表中字段province 不是null的
select * from 表名
select 字段名,字段名 from 表名 where [条件]
select * from member5 where province is not null;
select * from member5 where age >= 30 and age<=40;
select * from member5 where age between 30 and 40;
select * from member5 where salary not between 5000 and 10000;
select * from member5 where name like '张%';
select * from member5 where name like '_张_';
select * from member5 where name like '_张%';
select * from member5 where name like '%张%';
select * from member5 where binary name = 'JAck';
select * from member5 where sex='women' and age > 30;
select * from member5 where age > 80 or salary > 10000;
select * from member5 order by age desc limit 0,10;
select province,count(province) from member5 group by province; 查询所有省份和对应的人数
select province,count(province) from member5 group by province having count(province) >=3;
where: 条件的内容必须是你这个表中存在的字段;不能跟对应的函数
like : 模糊查询
% : 0个或多个 (类似于正则表达式)
_ : 必须有一个
binary :区分字母大小写
删除
delete from <表名> [where 删除条件] 这种方式删除:自动递增的id不会被彻底清除;
truncate <表名> 这种方式删除:快速清空一个数据库中的所有表, 自动递增的id会被彻底清除;(斩草除根)
此语句删除表中的行,如果不带where子句,则删除整个表中的记录,但是表不被删除。
删除年龄大于80或者工资大于1000的人
delete from member5 where age>80 or salary>10000;
删除年龄最大的那个人
delete from member5 order by age desc limit 1;
修改
update <表名> set <字段名 = 值> where [条件]
给性别为女且年龄》30岁的涨薪500
update member5 set salary = salary + 500 where sex=‘women’ and age >30;
数据库的多表操作
多表操作实例练习
多表操作
创建student和score表
CREATE TABLE student (
id INT(10) NOT NULL UNIQUE PRIMARY KEY ,
name VARCHAR(20) NOT NULL ,
sex VARCHAR(4) ,
birth YEAR,
department VARCHAR(20) ,
address VARCHAR(50)
);
创建score表。SQL代码如下:
CREATE TABLE score (
id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT ,
stu_id INT(10) NOT NULL ,
c_name VARCHAR(20) ,
grade INT(10)
);
为student表和score表增加记录
INSERT INTO student VALUES( 901,'张老大', '男',1985,'计算机系', '北京市海淀区');
INSERT INTO student VALUES( 902,'张老二', '男',1986,'中文系', '北京市昌平区');
INSERT INTO student VALUES( 903,'张三', '女',1990,'中文系', '湖南省永州市');
INSERT INTO student VALUES( 904,'李四', '男',1990,'英语系', '辽宁省阜新市');
INSERT INTO student VALUES( 905,'王五', '女',1991,'英语系', '福建省厦门市');
INSERT INTO student VALUES( 906,'王六', '男',1988,'计算机系', '湖南省衡阳市');
INSERT INTO score VALUES(NULL,901, '计算机',98);
INSERT INTO score VALUES(NULL,901, '英语', 80);
INSERT INTO score VALUES(NULL,902, '计算机',65);
INSERT INTO score VALUES(NULL,902, '中文',88);
INSERT INTO score VALUES(NULL,903, '中文',95);
INSERT INTO score VALUES(NULL,904, '计算机',70);
INSERT INTO score VALUES(NULL,904, '英语',92);
INSERT INTO score VALUES(NULL,905, '英语',94);
INSERT INTO score VALUES(NULL,906, '计算机',90);
INSERT INTO score VALUES(NULL,906, '英语',85);
- 查询student表的所有记录
select * from student;
- 查询student表的第2条到4条记录
select * from student limit 1,3;
- 从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息
select id,name,department from student;
- 从student表中查询计算机系和英语系的学生的信息
select * from student where department = '计算机系' or department = '英语系';
- 从student表中查询年龄18~22岁的学生信息
这里根据时间时间,现在是2022年
select * from student where birth>=2000 and birth<=2004;
- 从student表中查询每个院系有多少人
select department,count(department) from student group by department;
- 从score表中查询每个科目的最高分
select * from score group by c_name order by grade desc limit 3;
- 查询李四的考试科目(c_name)和考试成绩(grade)
select c_name,grade from student inner join score on student.id = score.stu_id where name = '李四';
- 用连接的方式查询所有学生的信息和考试信息
select stu_id,name,sex,birth,department,address,c_name,grade from student as st inner join score as sc on st.id = sc.stu_id;
或者:
select stu_id,name,sex,birth,department,address,c_name,grade from student,score where student.id = score.stu_id;
- 计算每个学生的总成绩
select name,sum(grade) from student inner join score on student.id = score.stu_id group by stu_id;
- 计算每个考试科目的平均成绩
select name,sum(grade)/count(stu_id) from student inner join score on student.id = score.stu_id group by stu_id;
- 查询计算机成绩低于95的学生信息
select stu_id,name,sex,birth,department,address,c_name,grade from student as st inner join score as sc on st.id = sc.stu_id where c_name = '计算机' and grade < 95;
- 查询同时参加计算机和英语考试的学生的信息
select name,birth,department,c_name,address,grade from student as st inner join score as sc on st.id = sc.stu_id where c_name like "计算机%" or c_name like "英语%" group by name having count(name) = 2;
select name,birth,department,c_name,address,grade from student as st inner join score as sc on st.id = sc.stu_id where c_name = "计算机" or c_name = "英语" group by name having count(name) = 2;
- 将计算机考试成绩按从高到低进行排序
select stu_id,name,sex,birth,department,address,c_name,grade from student as st inner join score as sc on st.id = sc.stu_id where c_name = '计算机' order by grade desc;
- 从student表和score表中查询出学生的学号,然后合并查询结果
select stu_id,name from student as st inner join score as sc on st.id = sc.stu_id;
- 查询姓张或者姓王的同学的姓名、院系和考试科目及成绩
select stu_id,name,department,c_name,grade from student as st inner join score as sc on st.id = sc.stu_id where name like "张%" or name like "王%";
- 查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩
select name,birth,department,c_name,grade from student as st inner join score as sc on st.id = sc.stu_id where address like "湖南%";