mysql基础介绍
来源:互联网 发布:ug8.0编程教程 编辑:程序博客网 时间:2024/06/10 01:09
1.1 数据库
1.1.1 数据库的概述:
什么是数据库
数据库:就是一个文件系统,通过标准的SQL语句获得数据.
什么是关系型数据库:
关系型的数据库,存的都是实体之间的关系!!!
常见的关系型数据库:
MYSQL:免费的小型的数据库产品,现在已经被Oracle收购了!,MySQL6.x版本之后也开始收费.
Oracle:收费的大型的数据库产品.Oralce(甲骨文)公司产品.
SQL Server:收费的中型的数据库产品.微软公司的产品.(SQL Server主要针对微软平台.net).
DB2:收费的大型的数据库产品.IBM公司产品.(以后在银行的系统.)IBM:WebSphere.
SYBase:收费的中型的数据库产品.(退出了历史舞台)
* PowerDesigner:数据建模的工具.
SQLite:嵌入式的小型数据库产品.Android系统中.
***** JavaEE开发的企业中一般都会使用MySQL 、Oracle.
1.2 MYSQL数据库:
1.2.1 卸载MYSQL数据库:
步骤1:查找系统中安装MYSQL的路径:
* 去my.ini下查找两个路径:
* basedir="C:/Program Files/MySQL/MySQL Server 5.5/"
* datadir="C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.5/Data/"
步骤2:在控制面板中卸载MYSQL:
步骤3:删除MYSQL数据库卸载后的残留文件:
* 删除C:/Program Files/以及C:/Documents and Settings/All Users/Application Data/下面的mysql文件夹.
1.2.2 安装MYSQL数据库:
步骤1:安装MYSQL.
* 选择自定义安装:
* C:\Program Files\MySQL\MySQL Server 5.5\
* C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.5\
步骤2:MYSQL的默认端口号:
步骤3:修改MYSQL数据库的默认字符集:
步骤4:修改MYSQL的环境变量:勾选Include Bin Directory in Windows Path.
步骤5:设置MYSQL的最高管理员root的密码:
步骤6:安装成功之后:
步骤7:测试MYSQL是否安装成功:
* cmd>mysql -u root -p 回车
* Enter password:
如果出现该界面那么说明安装成功可以使用了!!!
1.2.3 重置root密码:
步骤1:停止MYSQL服务:
* services.msc--->停止MYSQL服务.
步骤2:打开一个cmd的窗口:
* mysqld --skip-grant-tables---- 相当于开启一个mysql的服务,但是跳过认证.
步骤3:重新打开一个cmd窗口:
* mysql -u root -p 回车
* 输入密码: 直接回车.
步骤4:连接了mysql之后输入以下命令:
* use mysql--- 使用mysql数据库.
步骤5:输入一个修改密码的命令:
* update user set password=password('新密码') WHERE user='root';
步骤6:关闭两个cmd窗口.
步骤7:在任务管理器中关闭一个进程mysqld.
步骤8:重启mysql服务.
1.2.4 MYSQL数据库存储结构:
安装了MYSQL的数据库,这台机器称为是MYSQL数据库服务器,在服务器的内部,可以存放多个数据库,一般一个软件对应一个数据库.一个软件中是有多个实体的(实体就是类),一般一个类对应一个表.表中记录对应的类的实例!!!
1.3 SQL语句
1.3.1 SQL的概述:
什么是SQL:
SQL:Structured Query Language, 结构化查询语言.
SQL的特性:
非过程性语言
* 过程性语言 :一条语句的执行需要依赖其他的语句.
* if(i <= 3){
System.out.println(“”);
}
* 非过程性语言: 一条语句救护有一个执行的结果,不需要依赖其他语句.
为加强SQL的语言能力,各厂商增强了过程性语言的特征
* Oracle的PL/SQL 过程性处理能力
* SQL Server、Sybase的T-SQL
SQL的功能:
* DDL :数据定义语言 - Data Definition Language
* create 、alter、show、drop.
* DML :数据处理语言 - Data Manipulation Language
* update、insert、delete.
* DCL:数据控制语言 – Data Control Language
* if、grant..
* DQL:数据查询语言 – Data Query Language
* select
1.3.2 SQL对数据库进行操作(CRUD)
创建数据库:
语法:
* create database 数据库名称 [character set 字符集 collate 字符集校对规则];
* 校对规则:对排序的规则定义.
练习:
创建一个名称为mydb1的数据库。
* create database mydb1;
创建一个使用utf8字符集的mydb2数据库。
* create database mydb2 character set utf8;
创建一个使用utf8字符集,并带校对规则的mydb3数据库。
* create database mydb3 character set utf8 collate utf8_bin;
查看数据库:
查看数据库服务器中有哪些数据库:
* 语法:
* show databases;
查看当前的数据库定义的细节:
* 语法:
* show create database 数据库名称;
练习:
查看当前数据库服务器中的所有数据库
* show databases;
查看前面创建的mydb2数据库的定义信息
* show create database mydb2;
删除数据库:
语法:
* drop database 数据库名称;
练习:
删除前面创建的mydb1数据库
* drop database mydb1;
修改数据库:
语法:
* alterdatabase 数据库名称 character set 字符集 collate 校对规则;
练习:
修改之前创建的mydb2,改为gbk.
* alter database mydb2 character set gbk;
切换数据库:
语法:
* use 数据库名;
显示当前正在使用的数据库:
语法:
* select database();
---------------------------------------------属于DDL语句---------------------------------------------------------------------------------------------
1.3.3 SQL对数据库中表进行操作(CRUD)
创建表:
语法:
* create table 表名( 字段名 字段类型(长度) 约束,字段名 字段类型(长度) 约束,字段名 字段类型(长度) 约束)character set 字符集 collate 校对规则;
一般有一个实体类的时候,创建一个表与这个类对象.
class User{
int id;
String name;
double salary;
}
MYSQL常用数据类型:
JavaMYSQL
Stringchar、varchar
* char与varchar的区别!
* char:代表的是固定长度的字符串,定义数据库的字段类型char(8),存入一个hello,那么在hello的后面添加3个空格补齐.
* varchar:代表的是可变长度的字符串,定义数据库的字段类型varchar(8),存入一个hello,那么存hello.
byteTINYINT
shortSMALLINT
intINT
longBIGINT
floatFLOAT
doubleDOUBLE
booleanBIT
Datedate、time、datetime、timestamp
* datetime 和 timestamp类型都是即有日期又有时间区别!
* datetime:即有日期又有时间,必须手动传入一个日期,才会有值.
* timestamp:即有日期又有时间,如果没有给这列传值,采用系统当前的时间存入到该值上.
FileBLOB、TEXT
* BLOB:用于存二进制文件,图片、mp3、视频.
* TEXT:用于存文件文件.txt
***** 在mysql用blob和text类型.Oracle用blob和clob.
练习;创建一个员工表employee
***** 在创建表之前一定要选择数据库!use day15;
create table employee(
id int,
name varchar(20),
gender varchar(10),
birthday date,
entry_date date,
job varchar(50),
salary double,
resume text
);
***** 字符串长度必须写,其他的类型都有默认长度. int默认长度是11.
建表约束:(单表约束)---为了保证数据的完整性.
* 主键约束:primary key.可以唯一确定一条记录字段.(非空唯一).主键是整形的,可以使用auto_increment
* 唯一约束:unique.创建这个字段不允许出现重复的值.
* 非空约束:not null.代表这个字段的值不能为空.
创建一个带有约束的表:
create table employee2(
id int primary key auto_increment,
name varchar(20) unique ,
gender varchar(10) not null,
birthday date not null,
entry_date date not null,
job varchar(50) not null,
salary double not null,
resume text not null
);
查看表
语法:
* desc 表名;--- 查看表结构.
查看数据库中所有的表:
* 语法:
* show tables;
修改表:
语法:
* alter table 表名 add 字段名 类型(长度) 约束;---修改表添加列
* alter table 表名 modify 字段名 类型(长度) 约束;---修改表修改列的类型长度约束.
* alter table 表名 drop 字段名;---修改表删除列
* alter table 表名 change 旧字段名 新字段名 类型(长度) 约束; ---修改表修改列名
* rename table 旧表名 to 新表名;---修改表名
* alter table 表名 character set 字符集;---修改表的字符集
练习:
在上面员工表的基本上增加一个image列。
* alter table employee add image varchar(20);
修改job列,使其长度为60。
* alter table employee modify job varchar(60);
删除gender列。
* alter table employee drop gender;
表名改为user。
* rename table employee to user;
修改表的字符集为utf8
* alter table user character set utf8;
列名name修改为username
* alter table user change name username varchar(30);
删除表:
语法:
* drop table 表名;
练习:
删除user表
* drop table user;
-------------------------------------属于DDL语句-----------------------------------------------------------------------------------------------
1.3.4 SQL对数据库表中记录的操作(CRUD)
添加记录
语法:
* 语法一:添加部分字段
* insert into 表 (字段1,字段2,字段3...) values (值1,值2,值3...)
* 语法二:添加所有字段
* insert into 表 values (值1,值2,值3...);
***** 注意:
* 1.添加的字段的个数和类型要与值的个数和类型对应.
* 2.添加字段的值的时候,值不能超过字段的最大长度.
* 3.添加字段的值是字符串或者日期,需要使用单引号引起来.
练习:
添加3条记录
1.添加部分数据.
* insert into employee (id,name,gender,job,salary) values (1,'aaa','man','HR',3500);
2.添加所有数据.
* insert into employee values (2,'bbb','woman','1990-09-01','2012-05-01','WORKER',5500,'bbb');
3.添加带有中文的数据.
* insert into employee values (3,'张三','woman','1992-09-01','2013-05-01','WORKER',6500,'张');
* 报错:Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'name'
* MYSQL数据库总共有6个与字符集相关参数!!!
* 其中3个与mysql的客户端相关的参数,3个与mysql的服务器相当参数!
***** 解决插入中文数据乱码:
* 找到mysql安装路径:my.ini文件
* [mysql]
default-character-set=utf8
* [mysqld]
character-set-server=utf8
***** 将客户端的字符集改为gbk.重启mysql服务.
修改记录
语法:
* update 表 set 字段=值,字段=值;---修改表中的所有记录
* update 表 set 字段=值,字段=值 where 条件;---按照条件进行修改记录.
练习:
将所有员工薪水修改为5000元。
* update employee set salary = 5000;
将姓名为’zs’的员工薪水修改为3000元。
* update employee set salary = 3000 where name = '张三';
将姓名为’bbb’的员工薪水修改为8000元,job改为’Manager’。
* update employee set salary = 8000 ,job='Manager' where name='bbb';
将’aaa’的薪水在原有基础上增加1000元。
* update employee set salary = salary +1000 where name='aaa';
删除记录
语法:
* delete from 表名;--- 删除表中的所有记录
* delete from 表名 where 条件;--- 删除表中指定条件记录
***** 删除记录注意:
* 删除的时候删除一条记录,不能删除一条记录的某个字段(修改).
* 删除是删除表中的记录,删除整个表.drop table.
* 删除的时候一旦有外键关联,删除表中的记录,需要解除关系!
* 删除表中的记录truncate table 表名;删除表中的所有记录,delete from 表名;删除表中所有记录!
练习:
删除表中名称为’张三’的记录。
* delete from employee where name = '张三';
删除表中所有记录。
* delete from employee;
使用truncate删除表中记录。
* truncate table employee;----删除表中所有记录
***** truncate 和 delete删除表中所有记录的区别?
* delete属于DML,事务作用在DML语句上.事务可以回滚!.在delete语句执行后,如果在一个事务中,将数据找回来.delete将数据库表中的记录一条一条进行删除的.
* 事务:一组操作,要么一起成功,要么一起失败!
* truncate属于DDL.将整个表删除了,创建一个一样的表!
------------------------------------属于DML语句------------------------------------------------------------------------------------------------
查询记录(*****)
创建一个学生成绩表 :
create table exam(
id int primary key auto_increment,
name varchar(20),
math int,
english int,
chinese int
);
insert into exam values (null,'张三',80,75,85);
insert into exam values (null,'李四',73,80,90);
insert into exam values (null,'王五',86,85,69);
insert into exam values (null,'赵六',91,75,88);
insert into exam values (null,'孙七',69,90,71);
insert into exam values (null,'张八',71,76,73);
insert into exam values (null,'张三丰',null,76,73);
insert into exam values (null,'小张',72,80,62);
基本select语句
语法:
* select [distinct] *|列名,列名 from 表名;
* distinct:去掉重复值.
练习:
查询表中所有学生的信息。
* select * from exam;
查询表中所有学生的姓名和对应的英语成绩。
* select name,english from exam;
过滤表中重复数据。
* select distinct math from exam;
1.select语句执行运算及别名:
语法:
* select 表达式 from 表;
* select 列 as 别名,列 as 别名 from 表;---as可以省略
练习
在所有学生分数上加10分特长分。
* select name,math+10,english+10,chinese+10 from exam;
统计每个学生的总分。
* select name,math+english+chinese from exam;
使用别名表示学生分数。
* select name,math+english+chinese as sum from exam;
* select name,math+english+chinese sum from exam;
***** 注意:
* select math,chinese from exam;
* select math chinese from exam;
2.select语句条件过滤:
语法:
* select *|列名 from 表 where 条件;
练习:
查询姓名为张三的学生成绩
* select * from exam where name = '张三';
查询英语成绩大于90分的同学
* select * from exam where english > 90;
查询总分大于250分的所有同学
* select name,math+english+chinese from exam where (math+english+chinese)>250;
Where子句后的运算符:
* > < >= <= = <>
* in :一组值.
* where name = ‘张三’;
* where name in (‘张三’,’李四’);
* like:模糊查询.
* 使用占位符: _ 和 %. _:只能代表一个字符。 %:代表任意个字符.like ‘张_’; like ‘张%’;
* %或者_的时候: ‘张%’ ,’%张’,’%张%’
* is null:查找为空记录.
* and、or、not
练习:
查询英语分数在 80-90之间的同学。
* select * from exam where english>80 and english <90;
* select * from exam where english between 80 and 90;
查询数学分数为69,80,86的同学。
* select * from exam where math in (69,80,86);
查询所有姓大的学生成绩。
* select * from exam where name like '张_';
* select * from exam where name like '张%';
查询数学分>80,语文分>80的同学。
* select * from exam where math>80 and chinese >80;
3.对查询的记录进行排序:
语法:
* order by 列 asc/desc;asc升序desc降序.(默认是升序)
练习:
对数学成绩排序后输出。
* select * from exam order by math;
对总分排序按从高到低的顺序输出
* select name,math+english+chinese from exam order by (math+english+chinese) desc;
对学生成绩按照英语进行降序排序,英语相同学员按照语文降序
* select * from exam order by english desc ,chinese desc;
对姓张的学生总成绩排序输出
* select name,math+english+chinese from exam where name like '张%' order by math+english+chinese;
5.聚集函数:(分组函数)
* count()---统计表中的数据记录个数
* 语法:
* select count(*|列名) from exam;
* 练习:
统计一个班级共有多少学生?
* select count(*) from exam;
统计数学成绩大于80的学生有多少个?
* select count(*) from exam where math > 80;
统计总分大于240的人数有多少?
* select count(*) from exam where math+english+chinese>240;
* sum()---求和
* 语法:
* select sum(列名) from exam;
* 练习:
统计一个班级数学总成绩?
* select sum(math) from exam;
统计一个班级语文、英语、数学各科的总成绩
* select sum(math),sum(english),sum(chinese) from exam;
统计一个班级语文、英语、数学的成绩总和
* select sum(math)+sum(english)+sum(chinese) from exam;
* select sum(math+english+chinese) from exam;
* null+数字=null
* 使用ifnull()函数 ifnull(math,0)
* select sum(ifnull(math,0)+english+chinese) from exam;
统计一个班级语文成绩平均分
* select sum(chinese)/count(*) from exam;
* avg()---求平均值
* 语法:
* select avg(列) from 表;
练习:
求一个班级语文平均分?
* select avg(chinese) from exam;
求一个班级总分平均分
* select avg(ifnull(math,0)+english+chinese) from exam;
* max()---求最大值
* select max(chinese) from exam;
* min()---求最小值
* select min(english) from exam;
6.分组统计:
语法:
* group by 列名;
创建表:
create table orders(
id int,
product varchar(20),
price float
);
insert into orders(id,product,price) values(1,'电视',900);
insert into orders(id,product,price) values(2,'洗衣机',100);
insert into orders(id,product,price) values(3,'洗衣粉',90);
insert into orders(id,product,price) values(4,'桔子',9);
insert into orders(id,product,price) values(5,'洗衣粉',90);
insert into orders(id,product,price) values(6,'桔子',9);
练习 :
* 对订单表中商品归类后,显示每一类商品的总价
* select product,sum(price) from orders group by product;
* 对订单表中商品归类后,显示每一类商品的数量
* select product,count(*) from orders group by product;
* 查询购买了几类商品,并且每类总价大于100的商品
* select product,sum(price) from orders where sum(price)>100 group by product ;---错误的
***** where条件后面不能加聚集函数的!!!
*** 使用另外关键字having.---条件过滤,主要用于group by 分组后的条件过滤,having后面可以跟聚集函数.
***** 正确写法:
* select product ,sum(price) from orders group by product having sum(price)>100;
Select语句的总结:
* 面试的出现最多!
S...F...W...G...H...O...
Select * From 表 Where .. Group by ... Having ... Order by ..
1.4 数据库的备份和还原
数据库备份:
* mysqldump -u root -p day15>c:/day15.sql
数据库还原:
* 先创建一个空的数据库:day15
* 1.cmd窗口下还原:mysql -u root -p day15<c:/day15.sql
* 2.进入到mysql中进行还原:
* source c:/day15.sql
今天的内容总结:
1.数据库概述
* 数据库:就是一个文件系统,通过标准的sql进行操作.
* 关系型数据库:存的实体之间的关系.
* 常见:
* mysql、SQL Server、Oracle、DB2、SyBase、SqLite
2.MYSQL安装和卸载
* 重置root密码
* MYSQL数据库的结构
3.SQL语句:
* SQL:结构化查询语言.
* Oracle增强的SQL:PL/SQL
* SqlServer增强的SQL:TSQL
* 非过程性语言:一条SQL语句,就会有一个运行的结果.
* SQL的分类:
* DDL
* create、alter、drop、show
* DML
* update、insert、delete
* DCL
* if、grant..
* DQL
* select
4.SQL对数据库进行操作
* create database 数据库名;
* drop database 数据库名;
* alter database 数据库名 character set字符集 collate 校对;
* show databases; show create database 数据库名;
* use 数据库名; select database();
5.SQL对表进行操作
* create table 表名(字段 类型(长度) 约束,字段 类型(长度) 约束);
* drop table 表名;
* desc 表名; show tables;
* alter table add、modify、drop、change
* rename
* 单表约束:
* 主键约束:primary key
* 唯一约束:unique
* 非空约束:not null
6.SQL对表中记录进行操作
* insert into 表 values (值,值)
* update 表 set 字段=值,字段=值 where 条件;
* delete from 表 where 条件;
* Selete ... From ... Where ... Group by ... Having... Order by ...
7.数据库备份和还原:
* 备份:mysqldump
* 还原: mysql、source
查看mysql版本的四种方法
1:在终端下:mysql -V。 以下是代码片段:
[shengting@login ~]$ mysql -V
mysql Ver 14.7 Distrib 4.1.10a, for redhat-linux-gnu (i686)
2:在mysql中:mysql> status;
以下是代码片段:
mysql> status;
--------------
mysql Ver 14.7 Distrib 4.1.10a, for redhat-linux-gnu (i686)
Connection id: 416
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 3.23.56-log
Protocol version: 10
Connection: Localhost via UNIX socket
Client characterset: latin1
Server characterset: latin1
UNIX socket: /tmp/mysql_3311.sock
Uptime: 62 days 21 hours 21 min 57 sec
Threads: 1 Questions: 584402560 Slow queries: 424 Opens: 59664208 Flush tables: 1 Open tables: 64 Queries per second avg: 107.551
3:在help里面查找
以下是代码片段:
[shengting@login ~]$ mysql --help | grep Distrib
mysql Ver 14.7 Distrib 4.1.10a, for redhat-linux-gnu (i686)
4:使用mysql的函数
以下是代码片段:
mysql> select version();
+-------------+
| version() |
+-------------+
| 3.23.56-log |
+-------------+
1 row in set (0.00 sec)
- mysql基础介绍
- mysql基础介绍
- MySQL:数据库基础和workbench介绍
- mysql介绍——基础加强
- 基于CentOS的MYSQL基础介绍
- MySQL基础(一)介绍和配置
- PHP基础----PHP 与 MySQL----25MySQL 介绍与使用
- MySQL基础入门—SQL介绍及MySQL的安装
- Mysql 0基础进阶之mysql介绍《01》
- MySQL核心基础(一)之数据库介绍
- MySQL基础之表操作 索引 约束 视图等介绍
- mysql(5):基础,where子句的语法介绍
- mysql(6):基础,update子句的语法介绍
- mysql(7):基础,delete子句的语法介绍
- mysql(8):基础,LIKE 子句的语法介绍
- mysql(9):基础,UNION子句的语法介绍
- mysql(10):基础,ORDER 子句的语法介绍
- mysql(11):基础, GROUP BY 子句的语法介绍
- Linux战地日记——简单命令
- SQL 自动清除7天前数据前收缩数据库
- activity
- includes
- 关于在C++中调用system函数
- mysql基础介绍
- 罗辑思维
- file文件创建等
- 遍历递归目录下所有文件或文件夹
- HDU 2067 小兔的棋盘(递推)
- 数据结构例程——线性表顺序存储的应用
- 对指定的目录进行递归获取递归过程所有的java文件的路径。
- mysql数据库SQL语句介绍
- 打印流printstream