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:\tt.sql
演示恢复:
1.先删除库drop database tt;2.在恢复tt库(1);只能恢复库里的数据,而不能直接恢复库: 2.1因此要先将tt库创建出来:create database tt; 恢复前:use tt; 2.2再恢复库source d:\tt.sql;3.在恢复tt库(2); 3.1因此要先将tt库创建出来:create database tt; 3.2 恢复库 mysql -uroot -p999909 tt<d:\tt.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:\tt.sql
演示恢复:
1.先删除库drop database tt;2.在恢复tt库(1);只能恢复库里的数据,而不能直接恢复库: 2.1因此要先将tt库创建出来:create database tt; 恢复前:use tt; 2.2再恢复库source d:\tt.sql;3.在恢复tt库(2); 3.1因此要先将tt库创建出来:create database tt; 3.2 恢复库 mysql -uroot -p999909 tt<d:\tt.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修改为usernamealter 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输出结果是也要用gb2312set 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)
);