Mysql数据库学习
来源:互联网 发布:股票比价关系软件 编辑:程序博客网 时间:2024/06/06 04:48
1.mysql -u root -p
root
创建一个名称为Mercurial的数据库。
//如果这个数据库事先就存在了,你还想叫这个名称
drop database Mercurial;//删除一个存在的数据库
create database Mercurial;
创建一个使用gbk字符集的Mercurial2数据库。
create database Mercurial2 character set gbk;
创建一个使用gbk字符集,并带校对规则的Mercurial3数据库。
create database Mercurial3 character set gbk collate gbk_chinese_ci;
查看当前数据库服务器中的所有数据库
show databases;
查看前面创建的Mercurial2数据库的定义信息
show create database Mercurial2;
删除前面创建的Mercurial3数据库
drop database Mercurial3;
drop database Mercurial2;
要使用某个数据库
use 数据库名;
2.建表
create table 表名(
列名1 数据类型,
列名2 数据类型
......
);
修改表的名称:Rename table 表名 to 新表名
修改表的字符集: alter table 表名 character set 字符集名
create table employee(
id int,
name varchar(10),
gender char(1),
birthday date,
enterdate date,
job varchar(20),shouw
salary double,
resume text
);
--查看这个表
desc employee;
--显示所有表
show tables;
--显示表的字符编码
show create table employee;
在上面员工表的基本上增加一个image列。
alter table employee add image blob;
修改job列,使其长度为60。
alter table employee modify job varchar(60);
删除image列。
alter table employee drop image;
表名改为user。
rename table employee to user;
修改表的字符集为gbk
alter table user character set gbk;
列名name修改为username
alter table user change name username varchar(10);
alter table user change username name varchar(20);
3.数据操作语言
INSERT UPDATE DELETE
insert
字符和日期型数据应包含在单引号中。
插入空值,不指定或insert into table value(null)
1.客户端编码问题
--查看支持的变量有哪些
show variables like 'character%';
--设置客户端编码
set character_set_client=gbk;--设置客户端用什么编码
set character_set_results=gbk;--查看数据库时,显示编码
2.添加三个员工信息
insert into user(id,name,gender,birthday,enterdate,job,salary,resume)values(1,'张三','男','1988-10-1','2013-12-31','android开发工程师',100000,'他是一个NB的工程师');
insert into user values(2,'王二小','男','1992-9-20','2010-11-11','java架构师',20000,'这是一个顶级架构师');
insert into user values(2,'小丽','女','1995-8-8','2014-9-11','android高级开发工程师',30000,'这是一个顶级安卓高手');
insert into user(username,password,email,birthday,description) values('李四','321456','123457894@qq.com','2014-9-11','李四是一个好人');
Update:
3.将所有员工薪水修改为5000元。
update user set salary=5000;
将姓名为’张三’的员工薪水修改为3000元。
update user set salary =3000 where name=‘张三';
将姓名为’王二小’的员工薪水修改为40000元,job改为ccc。
update user set salary=40000,job='ccc' where name='王二小';
将小丽的薪水在原有基础上增加1000元。
update user set salary=salary+1000 where name='小丽';
将小丽的id改为3
update user set id=3 where name='小丽菁';
Delete: delete from 表名 where 条件
删除表中名称为’zs’的记录。
delete from user where name='张三';
删除表中所有记录。
delete from user; --一行一行删除,效率不高
使用truncate删除表中记录。
truncate table user;//效率高
4.SELECT
用于查询
select 字段 from 表名 where 条件 group by 分组 having 分组后条件 order by 排序字段(asc|desc)
查询表中所有学生的信息。
select * from user;
查询表中所有学生的姓名和对应的英语成绩。
select name,english from student;
过滤表中重复数据。
过滤英语成绩中重复数据
select distinct english from student;
在所有学生数学分数上加10分特长分。
select name,math+10 from student; (update student set math=math+10 )
select name as '姓名',math+10 成绩 from student;
统计每个学生的总分。
select name,chinese+math+english 总分 from student;
使用别名表示学生分数。
查询姓名为王五的学生成绩
select * from student where name='王五';
查询英语成绩大于90分的同学
select name from student where english>90;
查询总分大于200分的所有同学
select name,math+chinese+english from student where math+chinese+english>200;
查询英语分数在 80-90之间的同学。
select * from student where english between 80 and 90;
select * from student where english>=80 and english<=90;
查询数学分数为89,90,91的同学。
select * from student where math=89 or math=90 or math=91;
select * from student where math in(89,90,91);
查询所有姓李的学生成绩。
select * from student where name like '李%'; //%代表任意的
查询数学分>80,语文分>80的同学。
select * from student where math>80 and chinese>80;
使用order by 子句排序查询结果
对数学成绩排序后输出。(降序,)
select * from student order by math desc;
对总分排序后输出,然后再按从高到低的顺序输出
select name,chinese+math+english from student order by (chinese+math+english) desc;
对姓李的学生成绩排序输出
select name,chinese+math+english from student where name like '李%' order by (chinese+math+english);
3.数据完整性:
保证插入的数据的正确性。
实体完整性
1 李四 20
通过主键来保证实体完整性(逻辑主键,实际主键)
主键的写法:
primary key,它特点是唯一性,非空性
create table teacher(
id int primary key,
name varchar(10)
);
insert into teacher values(1,'wyj');
insert into teacher values(2,'wyj4');
alter table teacher drop primary key;
域完整性
就是保证某个字段达到要求
not null:非空
unique:唯一
create table teacher(
id int ,
name varchar(10) not null,
primary key(id)
);
insert into teacher values(1,null);
参照完整性
一个表中的某列数据,对应的只能来自于另外一个表的某个列
点名册(包含所有的学生姓名)
成绩表(成绩表中的名字必须会在点名册中出现,否则这个学生就不是这个班级的)
在数据库表面如何实现参照完整性
1.一对多 (直接通过外键)
通过外键来实现
constraint FK_score_sid foreign key (sid) references student(sid);
关键字 外键名 外键 字段 关键字 主表(主键)
create table student1(
id int primary key,
name varchar(20)
);
1 李四
insert into student1 values(1,'李四');
2 张三
insert into student1 values(2,'张三');
//自动增长 auto_increment
1 1 59
2 2 80
3 1 70
create table score(
scoreid int auto_increment primary key,
sid int ,
scores double,
constraint FK_score_sid foreign key(sid) references student1(id)
)
//自动增长,所以id没写值
insert into score(sid,scores) values(1,90);
insert into score(sid,scores) values(2,80);
一对多:在多的一方加入一的一方的主键充当它的外键
多对多关系:往往通过中间表进行关系的关联
create table teacher3(
tid int primary key,
tname varchar(20)
);
insert into teacher3 values(1,'wyj');
insert into teacher3 values(2,'lc');
create table student3(
sid int primary key,
sname varchar(20)
);
insert into student3 values(20,'陈冠希');
insert into student3 values(21,'段正淳');
//联合主键 primary key(字段1,字段2)
create table t_s_r3(
tid int ,
ssid int ,
primary key(tid,ssid),
constraint FK_t_s_r3_tid foreign key (tid) references teacher3(tid),
constraint FK_t_s_r3_sid foreign key (ssid) references student3(sid)
)
insert into t_s_r3 values(1,20);
insert into t_s_r3 values(1,21);
insert into t_s_r3 values(2,20);
1,20
1,21
2,20
一对一:
基于外键的一对一
4.连接查询
select 字段 from 表名1 连接类型(内连接,左外联接,右外联接) 表名2 on 连接条件 where 条件......
交叉联接
CROSS JOIN
select * from customer cross join orders;
select * from customer , orders;
内联接
显式内联接:inner (outer) join
select * from customer inner join orders on (customer.id=orders.customer_id)
where customer.id=1;
隐式内联接
select * from customer ,orders where customer.id=orders.customer_id
左外联接:left (outer) join,就是左表中联不上的记录也会显示出来
显示出所有的客户,有订单的显示订单,没有订单的也要显示客户信息
select * from customer left join orders on (customer.id=orders.customer_id) ;
右外联接 right join(就会导致右表的记录都会显示出来)
显示所有的订单,没有指定客户的这个订单也会显示出来
select * from customer right join orders on (customer.id=orders.customer_id) ;
子查询
查询“陈冠希”的所有订单信息
select id from customer where name='陈冠希';
select * from orders where customer_id=1;
-- select * from orders where customer_id=(select id from customer where name='陈冠希');
联合查询:union
将两个select 查出来的结果进行合并,就是重复记录只显示1遍.
查询订单金额>=200的,和陈冠希的订单
select * from orders where price>=200;//4
select * from orders where customer_id=(select id from customer where name='陈冠希');//3
select * from orders where price>=200
union
select * from orders where customer_id=(select id from customer where name='陈冠希');
5.报表查询
1.聚合函数: max()最大值, min()最小值, sum()求和,count()统计行数, avg()平均数
2.分组group by
分组后的条件having
统计一个班级共有多少学生?
select count(*) from student;
统计数学成绩大于等于90的学生有多少个?
select count(*) from student where math>==90;
统计总分大于250的人数有多少?
select count(*) from student where (chinese+math+english)>250;
统计一个班级数学总成绩?
select sum(math) from student;
统计一个班级语文、英语、数学各科的总成绩
select sum(chinese) 语文总成绩,sum(english) 英语总成绩,sum(math) 数学总成绩 from student;
统计一个班级语文、英语、数学的成绩总和
select sum(chinese)+sum(english)+sum(math) from student;
统计一个班级语文成绩平均分
select sum(chinese)/count(*) from student;
select avg(chinese) from student;
求一个班级数学平均分?
select avg(math) from student;
求一个班级总分平均分
select (sum(chinese)+sum(english)+sum(math))/count(*) from student;
select avg(chinese+english+math) from student;
求班级总分,最高分和最低分
select max(chinese+english+math),min(chinese+english+math) from student;
create table ordersw(
id int,
product varchar(20),
price float
);
insert into ordersw(id,product,price) values(1,'电视',900);
insert into ordersw(id,product,price) values(2,'洗衣机',100);
insert into ordersw(id,product,price) values(3,'洗衣粉',90);
insert into ordersw(id,product,price) values(4,'桔子',9);
insert into ordersw(id,product,price) values(5,'洗衣粉',90);
对订单表中商品归类后,显示每一类商品的总价
select product,sum(price) from ordersw group by product ;
查询购买了几类商品,并且每类总价大于100的商品
select product from ordersw group by product having sum(price)>100;
6.数据库备份:
mysqldump -u root -p test>test.sql
root
创建一个名称为Mercurial的数据库。
//如果这个数据库事先就存在了,你还想叫这个名称
drop database Mercurial;//删除一个存在的数据库
create database Mercurial;
创建一个使用gbk字符集的Mercurial2数据库。
create database Mercurial2 character set gbk;
创建一个使用gbk字符集,并带校对规则的Mercurial3数据库。
create database Mercurial3 character set gbk collate gbk_chinese_ci;
查看当前数据库服务器中的所有数据库
show databases;
查看前面创建的Mercurial2数据库的定义信息
show create database Mercurial2;
删除前面创建的Mercurial3数据库
drop database Mercurial3;
drop database Mercurial2;
要使用某个数据库
use 数据库名;
2.建表
create table 表名(
列名1 数据类型,
列名2 数据类型
......
);
修改表的名称:Rename table 表名 to 新表名
修改表的字符集: alter table 表名 character set 字符集名
create table employee(
id int,
name varchar(10),
gender char(1),
birthday date,
enterdate date,
job varchar(20),shouw
salary double,
resume text
);
--查看这个表
desc employee;
--显示所有表
show tables;
--显示表的字符编码
show create table employee;
在上面员工表的基本上增加一个image列。
alter table employee add image blob;
修改job列,使其长度为60。
alter table employee modify job varchar(60);
删除image列。
alter table employee drop image;
表名改为user。
rename table employee to user;
修改表的字符集为gbk
alter table user character set gbk;
列名name修改为username
alter table user change name username varchar(10);
alter table user change username name varchar(20);
3.数据操作语言
INSERT UPDATE DELETE
insert
字符和日期型数据应包含在单引号中。
插入空值,不指定或insert into table value(null)
1.客户端编码问题
--查看支持的变量有哪些
show variables like 'character%';
--设置客户端编码
set character_set_client=gbk;--设置客户端用什么编码
set character_set_results=gbk;--查看数据库时,显示编码
2.添加三个员工信息
insert into user(id,name,gender,birthday,enterdate,job,salary,resume)values(1,'张三','男','1988-10-1','2013-12-31','android开发工程师',100000,'他是一个NB的工程师');
insert into user values(2,'王二小','男','1992-9-20','2010-11-11','java架构师',20000,'这是一个顶级架构师');
insert into user values(2,'小丽','女','1995-8-8','2014-9-11','android高级开发工程师',30000,'这是一个顶级安卓高手');
insert into user(username,password,email,birthday,description) values('李四','321456','123457894@qq.com','2014-9-11','李四是一个好人');
Update:
3.将所有员工薪水修改为5000元。
update user set salary=5000;
将姓名为’张三’的员工薪水修改为3000元。
update user set salary =3000 where name=‘张三';
将姓名为’王二小’的员工薪水修改为40000元,job改为ccc。
update user set salary=40000,job='ccc' where name='王二小';
将小丽的薪水在原有基础上增加1000元。
update user set salary=salary+1000 where name='小丽';
将小丽的id改为3
update user set id=3 where name='小丽菁';
Delete: delete from 表名 where 条件
删除表中名称为’zs’的记录。
delete from user where name='张三';
删除表中所有记录。
delete from user; --一行一行删除,效率不高
使用truncate删除表中记录。
truncate table user;//效率高
4.SELECT
用于查询
select 字段 from 表名 where 条件 group by 分组 having 分组后条件 order by 排序字段(asc|desc)
查询表中所有学生的信息。
select * from user;
查询表中所有学生的姓名和对应的英语成绩。
select name,english from student;
过滤表中重复数据。
过滤英语成绩中重复数据
select distinct english from student;
在所有学生数学分数上加10分特长分。
select name,math+10 from student; (update student set math=math+10 )
select name as '姓名',math+10 成绩 from student;
统计每个学生的总分。
select name,chinese+math+english 总分 from student;
使用别名表示学生分数。
查询姓名为王五的学生成绩
select * from student where name='王五';
查询英语成绩大于90分的同学
select name from student where english>90;
查询总分大于200分的所有同学
select name,math+chinese+english from student where math+chinese+english>200;
查询英语分数在 80-90之间的同学。
select * from student where english between 80 and 90;
select * from student where english>=80 and english<=90;
查询数学分数为89,90,91的同学。
select * from student where math=89 or math=90 or math=91;
select * from student where math in(89,90,91);
查询所有姓李的学生成绩。
select * from student where name like '李%'; //%代表任意的
查询数学分>80,语文分>80的同学。
select * from student where math>80 and chinese>80;
使用order by 子句排序查询结果
对数学成绩排序后输出。(降序,)
select * from student order by math desc;
对总分排序后输出,然后再按从高到低的顺序输出
select name,chinese+math+english from student order by (chinese+math+english) desc;
对姓李的学生成绩排序输出
select name,chinese+math+english from student where name like '李%' order by (chinese+math+english);
3.数据完整性:
保证插入的数据的正确性。
实体完整性
1 李四 20
通过主键来保证实体完整性(逻辑主键,实际主键)
主键的写法:
primary key,它特点是唯一性,非空性
create table teacher(
id int primary key,
name varchar(10)
);
insert into teacher values(1,'wyj');
insert into teacher values(2,'wyj4');
alter table teacher drop primary key;
域完整性
就是保证某个字段达到要求
not null:非空
unique:唯一
create table teacher(
id int ,
name varchar(10) not null,
primary key(id)
);
insert into teacher values(1,null);
参照完整性
一个表中的某列数据,对应的只能来自于另外一个表的某个列
点名册(包含所有的学生姓名)
成绩表(成绩表中的名字必须会在点名册中出现,否则这个学生就不是这个班级的)
在数据库表面如何实现参照完整性
1.一对多 (直接通过外键)
通过外键来实现
constraint FK_score_sid foreign key (sid) references student(sid);
关键字 外键名 外键 字段 关键字 主表(主键)
create table student1(
id int primary key,
name varchar(20)
);
1 李四
insert into student1 values(1,'李四');
2 张三
insert into student1 values(2,'张三');
//自动增长 auto_increment
1 1 59
2 2 80
3 1 70
create table score(
scoreid int auto_increment primary key,
sid int ,
scores double,
constraint FK_score_sid foreign key(sid) references student1(id)
)
//自动增长,所以id没写值
insert into score(sid,scores) values(1,90);
insert into score(sid,scores) values(2,80);
一对多:在多的一方加入一的一方的主键充当它的外键
多对多关系:往往通过中间表进行关系的关联
create table teacher3(
tid int primary key,
tname varchar(20)
);
insert into teacher3 values(1,'wyj');
insert into teacher3 values(2,'lc');
create table student3(
sid int primary key,
sname varchar(20)
);
insert into student3 values(20,'陈冠希');
insert into student3 values(21,'段正淳');
//联合主键 primary key(字段1,字段2)
create table t_s_r3(
tid int ,
ssid int ,
primary key(tid,ssid),
constraint FK_t_s_r3_tid foreign key (tid) references teacher3(tid),
constraint FK_t_s_r3_sid foreign key (ssid) references student3(sid)
)
insert into t_s_r3 values(1,20);
insert into t_s_r3 values(1,21);
insert into t_s_r3 values(2,20);
1,20
1,21
2,20
一对一:
基于外键的一对一
4.连接查询
select 字段 from 表名1 连接类型(内连接,左外联接,右外联接) 表名2 on 连接条件 where 条件......
交叉联接
CROSS JOIN
select * from customer cross join orders;
select * from customer , orders;
内联接
显式内联接:inner (outer) join
select * from customer inner join orders on (customer.id=orders.customer_id)
where customer.id=1;
隐式内联接
select * from customer ,orders where customer.id=orders.customer_id
左外联接:left (outer) join,就是左表中联不上的记录也会显示出来
显示出所有的客户,有订单的显示订单,没有订单的也要显示客户信息
select * from customer left join orders on (customer.id=orders.customer_id) ;
右外联接 right join(就会导致右表的记录都会显示出来)
显示所有的订单,没有指定客户的这个订单也会显示出来
select * from customer right join orders on (customer.id=orders.customer_id) ;
子查询
查询“陈冠希”的所有订单信息
select id from customer where name='陈冠希';
select * from orders where customer_id=1;
-- select * from orders where customer_id=(select id from customer where name='陈冠希');
联合查询:union
将两个select 查出来的结果进行合并,就是重复记录只显示1遍.
查询订单金额>=200的,和陈冠希的订单
select * from orders where price>=200;//4
select * from orders where customer_id=(select id from customer where name='陈冠希');//3
select * from orders where price>=200
union
select * from orders where customer_id=(select id from customer where name='陈冠希');
5.报表查询
1.聚合函数: max()最大值, min()最小值, sum()求和,count()统计行数, avg()平均数
2.分组group by
分组后的条件having
统计一个班级共有多少学生?
select count(*) from student;
统计数学成绩大于等于90的学生有多少个?
select count(*) from student where math>==90;
统计总分大于250的人数有多少?
select count(*) from student where (chinese+math+english)>250;
统计一个班级数学总成绩?
select sum(math) from student;
统计一个班级语文、英语、数学各科的总成绩
select sum(chinese) 语文总成绩,sum(english) 英语总成绩,sum(math) 数学总成绩 from student;
统计一个班级语文、英语、数学的成绩总和
select sum(chinese)+sum(english)+sum(math) from student;
统计一个班级语文成绩平均分
select sum(chinese)/count(*) from student;
select avg(chinese) from student;
求一个班级数学平均分?
select avg(math) from student;
求一个班级总分平均分
select (sum(chinese)+sum(english)+sum(math))/count(*) from student;
select avg(chinese+english+math) from student;
求班级总分,最高分和最低分
select max(chinese+english+math),min(chinese+english+math) from student;
create table ordersw(
id int,
product varchar(20),
price float
);
insert into ordersw(id,product,price) values(1,'电视',900);
insert into ordersw(id,product,price) values(2,'洗衣机',100);
insert into ordersw(id,product,price) values(3,'洗衣粉',90);
insert into ordersw(id,product,price) values(4,'桔子',9);
insert into ordersw(id,product,price) values(5,'洗衣粉',90);
对订单表中商品归类后,显示每一类商品的总价
select product,sum(price) from ordersw group by product ;
查询购买了几类商品,并且每类总价大于100的商品
select product from ordersw group by product having sum(price)>100;
6.数据库备份:
mysqldump -u root -p test>test.sql
阅读全文
0 0
- 学习数据库之MySql数据库
- MYSQL数据库学习----MYSQL数据类型
- MYSQL数据库学习----MYSQL函数
- 学习使用数据库MySQL
- Mysql数据库学习入门
- Mysql数据库学习
- 学习使用数据库MySQL
- 学习MYSQL数据库
- mysql数据库学习笔记
- Mysql数据库学习总结
- Mysql数据库学习
- 数据库的学习MySQL
- MYSQL数据库的学习
- MySQL数据库学习初步
- MySql数据库学习
- MySQL空间数据库学习
- 数据库之mysql学习
- 数据库学习--mysql引擎
- java并发编程之Thread和Runnable之实例应用(三)
- Python checkio First Word解决方案
- 浅析Class文件
- Python + Django 如何支撑了 7 亿月活用户的 Instagram?
- 对map集合按照value从大到小进行排序
- Mysql数据库学习
- QT控件大全 四十二 QTickerGraph
- 学习随记
- SQL查询执行某条SQL语句所花费的时间
- CentOS下Samba服务器配置
- UI设计如何在一年后达到月薪一万五?
- Operational Factors and Data Models
- 《算法导论》学习笔记之Chapter10---数据结构之链表
- 找到链表中倒数第k个结点