MySql与数据库初识

来源:互联网 发布:php微信扫码登录demo 编辑:程序博客网 时间:2024/04/29 21:33

1 什么是数据库

   1)SQL=Structure Query Language 
   2)存数据的仓库/集合,并有一定的规则结构
   3)SQL是客户端操作数据库一种工具/命令,主要以存取为主


 2 各种常用数据库简介

   Oracle/Java
   SQLServler/Microsoft
   DB2/IBM
   ... ...
   MySQL->Linux+Apache+MySQL+PHP(最适合)

 3 SQL[通用/特定]与数据库的关系

   1)每种关系型数据库都支持的SQL命令,叫通用SQL
   2)每种关系型数据库都根据自身数据库的特点,量身定作的SQL,叫特定SQL

*4 MySQL数据库的安装,设置,进入和退出

   mysql > mysql -u root -p回车   
           ****回车
   mysql > exit回车


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

   1:N:M的关系
   

*6 数据在数据库中的存储方式

 



命令以分号结束(见分号执行语句)

*7 创建/使用/查看/删除数据库

   create database 数据库名;(以分号结束),SQL命令大小写无关   

   show databases; 

   默认数据库:


   use 数据库名;

   创建字符以UTF-8编码的mydb数据库: create database mydb character set UTF-8;

   如果不存在就创建: create database if not exists mydb character set UTF-8;

   校验规则:COLLATE:指定数据库字符集的比较方式、规则,比如排序

                      创建一个使用utf8字符集,并带校对规则(插入的数据库排序)的mydb3数据库:
                      create database if not exists mydb3 character set UTF8 collate utf8_general_ci;

   

*8 修改、备份、恢复数据库数据

   备份:
   c:\> mysql dump -u root -p mydb2 > d:\mydb2.sql回车(可以无分号结束)
        密码回车
        注意:该SQL命令是MySQL特有的,必须是MySQL环境外执行,即WindowXp环境中执行
   恢复:
   mysql:\> source d:\mydb2.sql;回车(需要分号结束)
        注意:该SQL命令是MySQL特有的,必须是MySQL环境中执行。 

 9 MySQL支持数据类型简介

   (1)Date/Datetime/TimeStamp,定界符使用''或"",但部份数据库可能不支持"",优先推荐''作为定界符,对于日期类型,                                    MySQL数据库有一个的判段-功能
   (2)varchar(变长)/char(定长)
   (3)Text(大于65536字符的数据)/Blob(存储二进制多媒体数据,例如Mp3等),该二类型都有四个子类型,根据存储内容的大                                      小进行选择
   (4)INT型有带符号和无符号之分,int(5)表示int默认为5位,如果插入id值,小于5位,左补空格,如果插入id值,大于5位,按                                照插入值,但必须满足int类型的大小确定
   (5)FLOAT(M,D),D表示小数点后的D位,按四舍五入计算,M表示除小数点外的所有位数总和
  

*10 创建/查看/修改/删除表

    create table 表名  
    show create table 表名
    desc 表名
    drop table 表名
    MySQL(MyISAM数据库引擎和InnoDB(支持表间查询,事务安全,)

11 MySQL解决插入中文乱码问题(WindowXP平台)

   二种解决方案:
   a)在当前MySQL客户端修改输入和输出的MySQL环境变量为GBK或GB2312,注意,该种方式只在当前窗口中有效
   b)修改MySQL目录下的my.ini文件,将客户端的缺省编码方式改为GBK或GB2312,注意,需要重新启动MySQL服务
   

*12 表的 增删改 操作

   a)insert 
   b)update
   3)delete from 或truncate table或drop table
     delete from:按行删除表中的所有记录,但会保留表,适合删除数据量不大的数据,可按条件删除
     truncate table:复制原表结构-〉一次性删除整表 -> 自动恢复原表结构,适合删除数据量较大的数据,不能按条件删除
     drop table:删除表本身
     删除记录时,一定要留意表间的关联关系
   

*13 表的 查询   操作  

    (1)select distinct/*/列名 from 表名
    (2)select 表达式/对列名加别名 from 表名 
       NULL+X=NULL
    (3)where子句,出现在from后面,where是按行筛选
    (4)逻辑运算和关系运算
    (5)排序:NULL值为最小,使用order by子句,默认升序,order by子句必须放置在最后


14 复合函数

   (1)count()函数,统计之用,不统计NULL值
   (2)sum()函数,统计和之用,不要统计非数值,如果统计非数值,返回0


15 表的约束


16 表的关联

举例:

创建一个名称为mydb1的数据库
create database mydb1;


创建一个使用utf8字符集的mydb2数据库
create database if not exists mydb2 character set UTF8;
//如果不存在mydb2,就创建,如果存在,则不创建mydb2数据库


创建一个使用utf8字符集,并带校对规则的mydb3数据库
create database if not exists mydb3 character set UTF8 collate utf8_general_ci;


查看当前数据库服务器中的所有数据库
show databases;


查看前面创建的mydb2数据库的定义信息
show create database mydb2;


删除前面创建的mydb1数据库
drop database if exists mydb1;


查看服务器中的数据库,并把其中mydb3库的字符集修改为gbk
alter database mydb3 character set gbk;
 
备份mydb2库中的数据,并恢复
准备工作:
create table if not exists user(
  name varchar(20) not null
);
insert into user(name) values('jack');
insert into user(name) values('marry');
使用MySQL特有的备份SQL命令
mysql >  


创建一张表,含有id/name/password/birthday字段
drop table if exists user;
create table user(
  id int(5),
  name varchar(20),  
  password varchar(6),
  birthday timestamp,
  salary float(6,2)
);


insert into user(id,name,password,salary) values(1,'jack','000000',1234.12);


创建/查看一个员工表(并指明字符集为UTF8)
drop table if exists employee;
create table employee(
   id int,
   name varchar(20),
   gender varchar(6),
   birthday date,
   entry_date date,
   job varchar(30),
   salary float(5,1),
   resume text
);
insert into employee(id,name,gender,birthday,entry_date,job,salary,resume)
values(1,'jack','male','2011-10-8','2011-12-31','software',5000.1,'hello');


在上面员工表的基本上增加一个image列。
alter table employee
add image blob;


修改job列,使其长度为60。
alter table employee
modify job varchar(60) default 'teacher';


删除gender列。
alter table employee
drop gender;


表名改为user。
rename table employee to user;


修改表的字符集为gbk。
alter table user
character set UTF8;


列名name修改为username。
alter table user
change column name username varchar(20); 




向user表插入一条中文记录
insert into user(username,id,birthday,entry_date,job,salary,resume)
values('杰克',2,'2011-10-8','2011-12-31','software',5000.1,'你好');


insert into user values(3,'马利','2011-10-8','2011-12-31','software',5000.1,'你好',NULL);


insert into user values(4,'马利','2011-10-8','2011-12-31','software',5000.1,NULL,NULL);


insert into user(id,username,birthday,entry_date,job,salary,image) 
values(5,'马利','2011-10-8','2011-12-31','software',5000.1,NULL);




//修改客户端输入和输出使用的编码方式,与WindowXP平台一致
set character_set_client=gbk;
set character_set_results=gbk;




将所有员工薪水修改为6000元。
update user set salary = 6000;


将姓名为’马利’的员工薪水修改为7000元。
update user set salary = 7000 where username = '马利';


将’jack’的薪水在原有基础上增加1000元。
update user set salary = salary + 1000 where username = 'jack';


删除表中名称为’jack’的记录。
delete from user where username = 'jack';


删除表中所有记录。
delete from user;


使用truncate删除表中记录。
truncate table user;


查询表中所有学生的信息。
select * from student;
select id,name,math,chinese,english from student;
select name,id,math,chinese,english from student;
select name,math from student;


查询表中所有学生的姓名和对应的英语成绩。
select name,english from student;


过滤表中重复数据。
select distinct english from student;
select distinct name,english from student;


在所有学生分数上加10分特长分。
select name,math+10 from student;
select name as 姓名,math+10 as 数学 from student;


统计每个学生的总分。
select name,math+chinese+english
from student;


使用别名表示学生分数。
select name,math+chinese+english as 总分
from student;


查询姓名为’张小明’的学生成绩
select *
from student 
where name = '张小明';


查询英语成绩大于90分的同学
select *
from student 
where english > 90;


查询总分大于200分的所有同学
select name,chinese+math+english as 总分
from student
where chinese+math+english > 200;


查询英语分数在 80-90之间的同学。
select *
from student
where english>=80 and english<=90;
或 
select *
from student
where english between 80 and 90;


查询数学分数为89,90,91的同学。
select *
from student
where math=89 or math= 90 or math=91;

select *
from student
where math [not] in(89,90,91);


查询所有姓’李’的学生成绩。
select *
from student
where name LIKE '李%';


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


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


---------------------------------------在网站中,多条件查询中用到
select *
from student
where name LIKE '%%';


select *
from student
where name LIKE '__李';


select * 
from student
where math IS [NOT] NULL;




查询数学分>80且语文分>80的同学。
select * 
from student
where math >80 and chinese>80;


对数学成绩排序后输出。
升序:
select * 
from student
order by math asc; 


降序:
select * 
from student
order by math desc; 


对总分降序后输出。
select name,math+chinese+english as 总分
from student
order by math+chinese+english desc;


对姓’李’的学生总分降序输出。
select name,math+chinese+english as 总分
from student
where name LIKE '李%'
order by math+chinese+english desc;


统计一个班级共有多少学生?
select count(*) as 总人数
from student;


统计数学成绩大于80的学生有多少个?
select count(*) as 总人数
from student
where math > 80;


统计总分大于250的人数有多少?
select count(*) as 总人数
from student
where (math+chinese+english) > 250;


select count(english) as 总人数
from student;//13


select count(math) as 总人数
from student;


统计一个班级数学总成绩。
select sum(math)
from student;


select sum(name)
from student;//0


统计一个班级语文、英语、数学各科的总成绩。
select sum(math) as 数学总分,sum(chinese) as 语文总分,sum(english) as 英语总分
from student;


统计一个班级语文、英语、数学的成绩总和。
select sum(math)+sum(chinese)+sum(english) as 班级总分
from student;


统计一个班级语文成绩平均分。
select sum(math)/count(math)
from student;


select sum(math)/count(*)
from student;


0 0