MYSQL

 

 

MySQL

MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

数据储存方式:

 

 

数据库服务器、数据库和表的关系:

 

创建数据库:

 

 其中的中的为判断,判断数据库中是否存在相同的数据库,且这句可加可不加只要是带中括号的都是可加可不加,加上后,若存在则什么也不执行,若不存在,则直接创建,若不加的话,

若数据库中存在一个相同的会报错,不存在照常创建。

删除、查看数据库: 

对数据库进行修改、备份、恢复:

 

 重点:需要了解并掌握。

 方式如下:

演示恢复备份:

create database tt;
use tt;
create table a(
name varchar(20)
);
insert into a (name) values('aaaa');
select *from a;
----看到a表有数据;----------

对tt库做备份操作,启动一个window命令窗口,执行如下命令;
mysqldump -uroot -p tt>d: t.sql

 

演示恢复:
1.先删除库
drop database tt;
2.在恢复tt库(1);
只能恢复库里的数据,而不能直接恢复库:
2.1因此要先将tt库创建出来:create database tt;
恢复前:use tt;
2.2再恢复库source d: t.sql;
3.在恢复tt库(2);
3.1因此要先将tt库创建出来:create database tt;
3.2 恢复库 mysql -uroot -p999909 tt<d: t.sql

创建表(基本语句)

 MYSQL的常用数据类型:

 修改表:

练习:

一些重要的练习操作示意:

演示恢复备份:

create database tt;
use tt;
create table a(
name varchar(20)
);
insert into a (name) values('aaaa');
select *from a;
----看到a表有数据;

对tt库做备份操作,启动一个window命令窗口,执行如下命令;
mysqldump -uroot -p tt>d: t.sql

 

演示恢复:
1.先删除库
drop database tt;
2.在恢复tt库(1);
只能恢复库里的数据,而不能直接恢复库:
2.1因此要先将tt库创建出来:create database tt;
恢复前:use tt;
2.2再恢复库source d: t.sql;
3.在恢复tt库(2);
3.1因此要先将tt库创建出来:create database tt;
3.2 恢复库 mysql -uroot -p999909 tt<d: t.sql

创建一个员工表:
create table employee
(
id int,
name varchar(40),
sex char(4),
birthday date,
entry_data date,
job varchar (40),
sarary decimal(8,2),
resume text
);

show tables; 查看库的所有表
show create table employee; 查看表的创建细节;
desc employee ;查看表的结构
在上面的员工表的基本上增加一个image列。
alter table employee add imag
修改job列使其长度为60;
alter table emploee modify job varchar(60);
请删除性别这一列;
alter table employee drop sex;
表名改为user;
修改表的名称:Rename table 表名 to 新表名

rename table employee to user;
请将表名改为utf-8
修改表的字符集:alter table student character set 编码方式;
alter table user character set utf8;
列名name修改为username
alter table user change column name username varchar ;

INSERT语句:

使用insert语句向表中插入三个员工的信息。
rename table user to employee;
插入数据的细节1
第一种简化方法:不必写出前面的列名:
insert into table employee (1,'aaa','1999-08-01','1999-02-01','bbb',90,'aaaa');
第二种推荐方法:
insert into table use wo employee(id,username,birthday,entry_date,job,salary,
resume) values(1,'aaa','1999-08-01','1999-02-01','bbb',90,'aaaa');
插入数据的细节2:
插入的数据在mysql语句中都可以用‘’引起来,以便引起不必要的麻烦。
插入数据的细节3:乱码问题:(插入中文数据)
告诉MySQL客户端采用gb2312编码
show variables like 'char%';
set character_set_client=gb2312;
insert into employee (id,username) values('3','张三');
要想查看时不乱吗就要告诉MySQL输出结果是也要用gb2312
set variables like 'char%';
set character_set_results=gb2312;
select * from employee;
UPDATE语句:


练习:
将所有员工的薪水改为5000元。
update employee set salary=5000;
将姓名为ccc的员工的员工薪水修改为3000元;
update employee set salary=3000 where username='bbb';
请将姓名为‘bbb’的员工薪水修改为4000,job改为‘ccc’.
update employee set salary=4000,job='ccc' where username='ccc';
将bbb的薪水在原来的基础上增加1000元。
update employee set salary=salary+1000 where username='ccc';

DDELETE语句:

使用delete语句删除表中的数据:如果不用where子句,将会删除表中的所有数据;
delete 语句不能删除某一列的值(可以使用update)
使用delete 语句仅删除记录,不删除表本身。如要删除,使用drop table 语句。
同insert 和update语句一样,从一个表中删除记录将引起表的参照完整性问题,再修改数据库数据时,
头脑中应该是中不要忘记这个潜在的问题。
删除表中数据也可以使用TRUNCATE TABLE语句,他和delete有所不同参看MySQL文档。

 delete语句是一行一行的删除表中的数据。

而truncate table,是将表摧毁并创建新的表单。

练习:

1.删除表中名为ccc的数据记录:

delete from employee where username='ccc';

2.删除表中所有记录:

delete from employee;

3.使用truncate 删除表中的记录:

truncate table employee ;(摧毁表,重新建立表单)

select 语句:

小注1:select语句中的* 表示查询表单中的所有数据,若想查询具体数据,就将*换为想要的数据。

小注2:在使用select语句时若有过滤条件就用where语句若要给所存数据排序就用order by语句。

练习:

1.查询表中所有学生的信息。

select * from student;

2.查询表中所有学生的姓名和对应的英语成绩。

select name,english from student;

3.过滤表中重复的英语数据.

select distinct english from student;

练习:

1.在所有学生总分上加10分特长分。

select  naem,(chinese+english+math)+10 from student ;

2.统计每个学生的总分。

select name,(chinese+english+math);

3.使用别名表示学生分数。

select  naem as 姓名,(chinese+english+math)+10 as 总分 from student ;

select  naem  姓名,(chinese+english+math)+10  总分 from student ;

练习:

1.查询姓名为王五的学生成绩

select * from student where name='王五';

2.查询英语成绩大于90分的同学

select * from student where english>90;

3.查询总分大于200分的所有同学

 select * from student where (chinese+english+math)>200;

 

 练习:

1.查询英语分数在80-90之间的同学

select name from student where english>80 andenglish<90;

select name from student where english between 80 and 90;

2.查询数学分数为89,90,91的同学

select name from student where math in(89,90,91);

3.查询所有姓李的学生成绩。

select *from student where name like '李%';

3.1查询李姓且名字为两个子的学生成绩

select * from student where name like '李_';

4.查询数学分>80,语文分>80的同学。

select * from student where math>80 and chinese>80 ;

 练习:

1.对数学成绩排序后输出。

select name ,math from student order by math;

2.对总分排序后输出,然后再按从高到底的顺序输出。

select name 姓名,(chinese+english+math ) 总分 from student order by(chinese+english+math) desc;

3.对姓李的学生成绩排序输出。

select *from student where name like '李%' order by (chinese+english+math) desc;

select语句(6)学习前提:合计函数-count

练习:

1.统计一个班共有多少学生

select count (name) from student ;

1.1统计班里有多少学行数据

select  count(8) from student ;

2.统计数学成绩大于90的学生有多少个

select count(*) from student where math>90;

3.统计总分大于250分的人数有多少

select count(*) from student where (chinese+english+math)>250;

关于count函数的细节:

count 只会统计有值的行。

合计函数-SUM:

小注:sum仅对数值起作用,否则会报错。

小注:对多列求和,“,”号不能少。

 练习:

1.统计一个班级数学总成绩

select sum(math) from student ;

2.统计一个班语文、数学、英语各科的总成绩

select sum(chinese),sum(english),sum(math) from student;

3.统计一个班语文、数学、英语的成绩总和

select sum(chinese+english+math) from student;

4.统计一个班语文成绩的平均分

合计函数-AVG(平均值)

 

练习:

1.求一个班级数学的平均分

select avg(chinese) from student;

2.求一个班级总分的平均分

合计函数-MAX/MIN

练习:

求班级最高分和最低分(数值范围在统计中特别有用)

select max(chinese+math+english),min(chinese+math+english);

 SELECT 语句(6)

小注:

使用的案例:注意order为关键字,不可以使用为表名称,因此在此处使用orders。

 

 

 练习:

1.对订单表中的商品归类后,显示每一类商品的总价

select product, sum(price) from orders group by product;

2.查询购买了几类商品,并且每类总价大于100的商品

 select product from orders group by product having sum(price)>100;

各类常用的函数:

小注:调用这些函数时可以采用select语句来调用。

时间日期相关的函数:

字符串相关的函数:

数学相关的函数:

 

定义表的约束:

小注:一般来说,必须要有一列作为主键列,一般用id 列,且id列必须要加上一个主键约束,并且一个表只能有一个主键列。

练习:

定义主键约束:

create table teacher(

  id int  primary key,

   name varchar(40)

);

 定义主键自动增长:

create table teacher(

  id int  primary key auto_increment,

   name varchar(40)

);

 定义唯一(仅一个数据,没有重复数据)约束:unique

create table teacher(

  id int  primary key auto_increment,

   name varchar(40) unique

);

 定义非空约束:not null 

 

create table teacher(

  id int  primary key auto_increment,

   name varchar(40) unique not null

);

 定义外键约束:

constraint ordersid_FKforeign key(orderside) reference orders(id),

create table husband (

  id int primary key,

  name varchar(40) 

);

create table wife (

  id int primary key,

name varchar(40) ,

husband_id int ,

consttain husband_id _FK foreign key(husband_id) reference husband(id)

);

最重要的课程:表的设计。

原则:直接上来设计表,不必思考对象的方法等其他复杂东西。

给多的一方加外键来描述数据之间的关系。

当有一对多,或多对一的对象向数据库存东西时,给多的一方加外键来描述二者之间的关系。

一对多或多对一的数据存储表设计方式(公司部门和部门工作人员):代码如下:

  create table department (

  id int primary key,

  name varchar(40)

);

  create table employee(

  id int primary key,

  name varchar(40) ,

  salary decimal(8,2) ,

  department_id int,

  constraint department_id_FK foreign key(depatrtment_id) reference department(id)

);

 当为多对多关系时:加中间表来描述。

多对多对象的表的设计(老师和学生):代码如下:

create table teacher (

  id int primary key,

   name varchar(40),

  salary decimal(8,2)

);

create table  student(

  id int,

  name varchar(40) 

) ;

create table teacher_student  (

  teacher_id int,

  student_id int, 

  primary key(student_id,teacher_id ),

  constraint teacher_id_FK foreign key(teacher_id) reference teacher(id),

  constraint student_id_FK fornign key(student_id) references student(id)

);

 

 一对一的表单设计原则(身份证与人的对应关系):

 一对一代码设计规范:

create table person (

  id int primary key,

  name varchar(60)

);

create table idcard(

  id int primary key,

  name carchar(40),

  city varchar(40),

constraint_id_FK foreign key(id) references person(id)

);

原文地址:https://www.cnblogs.com/shuai9999/p/9042652.html