数据库的创建备份等基本操作(1)
登陆数据库 mysql -uroot -p
创建数据库mydb1 create database mydb1;
查看数据库 show databases;
创建一个使用utf-8字符集的mydb2的数据库 create database mydb2 character set utf8;
创建一个使用utf-8字符集的mydb3的数据库,并带校对规则(一般默认utf8_general_ci不改)
create database mydb3 character set utf8 collate utf8_general_ci;
查看库的创建信息 show create database mydb3;
删除前面创建的数据库mydb1 drop database mydb1;
查看服务器中的数据库,并把其中某一个库的字符集改为gb2312
alter database mydb2 character set gb2312;
show create database mydb2;
备份库中的数据,并恢复(中间文件为脚本文件)
a.备份库:1,准备库的数据
create database mydb1;
use mydb1;
create table test
(
id int
);
insert into test(id) values(1);
2.备份mydb1(windows命令)
mysqldump -uroot -p mydb1>c:\test1.sql
3.恢复库(mysql命令)
create database mydb1;
use mydb1;
source c:\test1.sql(没有分号)
以上为第一种方式,以执行脚本文件的方式
b.(windows命令)
create database mydb1;(还是要先在数据库里创建库mydb1)
mysql -uroot -p mydb1<c:\test1.sql
数据库的使用(2)
1.创建表-->创建一个员工表
id 整形
name 字符形
gender 字符形
birthday 日期形
Entry_date 日期形
job 字符形
salary 小数形
resume 大文本形
use mydb1; 进入库
create table employ
(
id int,
name varchar(20),
gender varchar(4),
birthday date,
entry_date date,
job varchar(40),
salary double,
resume text
)character set utf8 collate utf8_general_ci;
2.修改表(add,modify,drop)
alter table table_name add (column datatype...); 增加一列
alter table table_name modify (column datatype...); 修改列名或者列的数据类型
alter table table_name drop (column); 删除一列
rename table 原来的表名 to 新表名; 修改表名
alter table table_name character set gb2312; 修改表的字符集
查看表的创建细节: show create table employ;
查看标的结构:desc employ;
alter table user change column name username varchar(20); 修改列的名称和数据类型
数据库的增删改查1(3)#####################
3.数据库CRUD语句
insert(增加) update(更新) delete(删除) select(查找)
1.插入
insert into table(column,column...) values (value,value....);//字符和日期型数据应包含在单引号中
插入空值,不指定或者insert into table value(null)
insert into employee(id,username,birthday,entry_date,job,salary,resume)
values(1,'aaa','1980-02-03','1989-02-06','bbb',1000,'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb');
insert into employee(id,username,birthday,entry_date,job,salary,resume)
values(2,'小李','1980-02-03','1989-02-06','bbb',1000,'bbbbbbbbbb');
//出错,它要的是utf8,但写入的是gb2312。
正确的如下:显式告诉他我插入的是gb2312,然后他就会转成utf8存入
show variables like 'chara%';//character_set_client:utf8客户端是以utf8存入的,要改成gb2312
set character_set_client=gb2312; //插入失败后的解决方案
set character_set_results=gb2312; //显示失败后的执行方案
insert into employee(id,username,birthday,entry_date,job,salary,resume)
values(2,'小李','1980-02-03','1989-02-06','bbb',1000,'bbbbbbbbbb');
2.更新
update table_name set column1_mane=expr1 [,column2_mane=expr2] [where where_definition]
set指示要修改哪些列和要给与哪些值,where指定更新哪些行,如果没有where,则更新所有的行
1,将所有员工的薪水改为5000
update employee set salary=5000;
2,将姓名为aaa的员工的薪水改为3000
update employee set salary=3000 where username='aaa';
3,将姓名为aaa的员工的薪水改为4000,job改为ccc
update employee set salary=4000,job='ccc' where username='aaa';
4,将wu的薪水在原因的基础上增加1000
update employee set salary=salary+1000;
3.删除
delete from table_name [where where_defination];
1.删除表中某一条记录
delete from employee where username='aaa';
2.删除表中所有记录
delete from employee; //一条一条删除
3.使用truncate删除表中所有记录
truncate table employee; //一次性将表全部摧毁
4.查询
(1)单纯的显示
select [distinct] *{cloumn1,column2,column3...} from table_name;
有distinct就过滤掉所有的数据(数据在c:\student.sql)
练习:
1.查询表中所有的学生的信息
select id,name,chinese,english,math from student;==select * from student;
2.查询表中所有的姓名和对应的英语成绩
select name,english from student;
3.过滤表中重复数据
select distinct english from student;
(2)在select语句中使用表达式对查询的列进行运算
select *|{column1|expression,column2|expression,...} from table_name;
练习:(查询列)
1.在所有学生的英语分上加10分特长分(只是查询,没有改变数据库里面的值)
select name,english+10 from student;
2.统计每个学生的总分
select name,(english+chinese+math) from student;
(3)在select语句中可使用as语句
select column as 别名 from 表名;
练习:(查询列)
3.使用别名表示学生分数
select name as 姓名,(english+chinese+math) as 总分 from student;
//或者:select name 姓名,(english+chinese+math) 总分 from student;
练习:(查询行)
1.查询姓名为'王五'的学生的成绩
select * from student where name='王五';
2.查询英语成绩大于90分的同学
select * from student where english>90;
3.查询总分大于200分的所有同学
select * from student where (english+chinese+math)>200;
数据库的增删改查2(4)#####################
(4)在where语句中经常使用的运算符
比较:> < >= <= = <>
between...and...
in(num1,num2)
like '张pattern'(模糊查询) :pattren为%代表0或多个任意字符,_代表一个字符;
is null
逻辑:and or not
练习:
1.查询英语分数在80-90之间的同学
select * from student where english>80 and english<90;
select * from student where english between 80 and 90;
2.查询数学分数为89,90,91的同学
select * from student where math=89 or math=90 or math=91;
select * from student where math in(89,90,91);
3.查询所有姓李的学生成绩
select * from student where name like '李%';
4.查询数学分数>80,语文分数>80的同学
select * from student where math>80 and chinese>80;
(5)使用order by子句排序查询结果
select column1,column2,column3...from table_name order by column asc|desc
练习:
1.对数学成绩排序后输出
select name,math from student order by math;
2.对总分排序后输出,然后再按从高到低的顺序输出
select name,(math+english+chinese) from student order by (math+english+chinese) desc;
3.对姓李的学生成绩排序后输出
select name,(math+english+chinese) from student where name like '李%' order by (math+english+chinese) desc;
(6)合计函数-count,sum,avg,max/min
count:
select count(*) |count(列名) from table_name [where where_definition]
练习:
1.统计一个班共有多少学生
select count(*) from student;//根据行数统计
select count(name) from student;//根据姓名进行统计,如果有空则少算一行,所以最好用count(*)
2.统计数学成绩大于90的学生有多少个
select count(*) from student where math>90;
3.统计总分大于250的人数有多少
select count(*) from student where (math+english+chinese)>250;
sum:
select sum(列名)[,sum(列名)...] from table_name [where where_definition]
练习:
1.统计一个班的数学总成绩
select sum(math) from student;
2.统计一个班语文、英语、数学各科的总成绩
select sum(math),sum(english),sum(chinese) from student;
3.统计一个班语文、英语、数学的成绩总和
select sum(math+english+chinese) from student;
4.统计一个班语文成绩平均分
select sum(chinese)/count(chinese) from student;
avg:
select avg(列名)[,avg(列名)...] from table_name [where where_definition]
练习:
1.求一个班级数学平均分
select avg(math) from student;
2.求一个班级总分平均分
select avg(math+english+chinese) from student;
max/min:
select max(列名) from table_name [where where_definition]
练习:
1.求班级最高分和最低分(数值范围在统计中特别有用)
select max(chinese+english+math),min(chinese+math+english) from student;
(7)其他语句
使用group by子句对列进行分组
select column1,column2... from table_name group by column;
练习:
1.对订单中商品归类后,显示每一类商品的价格(有同样的商品买了多次)
select product,sum(price) from orderer group by product;
使用having子句过滤(类似where,只是having可以跟在group by 后面)
select column1,column2... from table_name having column;
练习:
1.查询购买了几类商品,并且每类总价大于100的商品
select product,sum(price) from orderer group by product having sum(price)>100;
(8)时间日期相关函数
示例:
select addtime('02:30:30',01:01:01);
select current_date();
(9)字符串相关函数
(10)数字相关函数
定义表的约束(5)为了阻止非法数据的录入,约束越严格越好
1.定义主键约束:
primary key:不允许为空,不允许重复
id int primary key;//定义id为主键
删除主键:alter table table_name drop primary key;
2.定义主键自动增长//最好不要用,因为有可能我的Id还有自己用,所以最好用uuid算法自己维护
auto_increment
id int primary key auto_increment;
3.定义唯一约束
unique
name varchar(20) unique
4.定义非空约束
not null
name varchar(20) unique not null;
5.定义外键约束//多表使用
constraint ordersid_FK foreign key(ordersid) references orders(id);