1.mysql导论
虽然之前用过mysql一年多,但大多只是会用,深入了解的不多。所以想利用平时时间 系统的总结总结。
一.什么是数据库:(数据库软件)
1).什么是数据库(软件):数据库(DB:DataBase)是一个软件,专门用于存储大量数据的。对于大量数据可以进行非常安全、快捷的管理。(内部有算法)
2).什么是数据库管理系统:数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。
二.常见的数据库软件:
1).MySQL : 中型数据库软件。早期都是免费的。后期被Oracle收购,从6.x版本开始收费。
2).Oracle : Oracle公司出品,全球最大的、最出名的数据库软件。收费的。 //上亿条数据谁就比不了Oracle了
3).SQLServer : 微软公司的。中型数据库软件。收费的。
4).DB2:IBM公司的数据库产品,收费的。常应用在银行系统中.
5).SQLite: 嵌入式的小型数据库,应用在手机端
跟Java相关的数据库:MySQL,Oracle 。
三.数据库软件的内部结构:
数据库软件:
|--逻辑数据库(对应一个项目)
|--表
|--列(字段)
|--行(数据)
|--表
...
|--逻辑数据库(对应一个项目)
.....
四.数据库软件和Java的对应关系:
java 数据库 (软件)
--------------------------------------------
项目 逻辑数据库
类(JavaBean) 表
类中的属性 表中的字段
类中属性的数据类型 表中字段的数据类型
对象(Student对象) 表中一行记录
(JavaBean:Java咖啡豆的由来,这是一种规范,是一个标准类,其实比POJO更广)
五.SQL语言的分类:
1).什么是SQL : 结构化查询语言(Structured Query Language)简称SQL,是关系型数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特有内容。
普通话:各数据库厂商都遵循的ISO标准。
方言:数据库特有的关键字。
2).SQL语言的分类:
1).DDL:数据定义语言。用来定义数据库对象:逻辑数据库,表,列等。关键字:create(创建),alter(修改),drop(删除)等
2).DCL:数据控制语言。用来定义数据库的访问权限和安全级别,及创建用户。
3).DML:数据操作语言。用来对数据库中表的记录进行更新。关键字:insert(添加),delete(删除),update(修改)等
4).DQL:数据查询语言。用来查询数据库中表的记录。关键字:select,from,where等
六.数据库操作相关的语句:DDL
1).创建数据库:
A).create database 数据库名;
例如:创建数据库:test_db
create database test_db;
B).create database 数据库名 character set 字符集; (也可手动创建,还可以指定字符集)
2).查看数据库MySQL服务器中的所有的数据库:
show databases;
3).删除数据库:
drop database 数据库名;
4).查看正在使用的数据库:
select database();
5).切换数据库:
use 数据库名;(还有一种方式:就是手动切换)
SQLYog的使用:
SQLyog是一个易于使用的、快速而简洁的图形化管理MySQL数据库的工具,它能够在任何地点有效地管理你的数据库,而且它本身数完全免费的!
1).在Query选项卡中编写SQL语句:
1).注释:
A).#注释: 单行注释
B).-- 注释:单行注释(注意:两个--后有一个空格)
C)./* 注释 */ : 多行注释
2).在一个Query界面中可以编写多条SQL语句,选中某一条,可以单条运行。
3).这个一个界面中的数据,可以保存起来。ctrl + s ,会存储为:xxx.sql的纯文本文件,使用记事本就可以打开。
七.表操作相关的SQL语句:
1.创建表:
create table 表名(
字段名 数据类型(长度) [约束], //int类型默认长度为 11;
字段名 数据类型(长度) [约束],
.....
字段名 数据类型(长度) [约束] //注意:最后一条没有 逗号!
)
例如:创建一个学员信息表:
create table student(
stuNo int , //int类型默认长度为11 ;
name varchar(100),
age int,
sex char(5)
)
组成:
1).字段名:由程序员自行定义,一般跟我们"类"中的属性名相同。
2).数据类型:是MySQL中的数据类型,有很多,下面详细说。
3).长度:
1).对于"字符串类型":表示"字符"数。
2).对于"数值"类型:表示"数字的宽度"。
4).约束
2.关于MySQL中的数据类型:
Java数据类型 MySQL数据库的数据类型
-----------------------------------------------------
整数:
int int
long int
浮点:
float float
double double
decimal(M,N):M:表示一共有M位。N:小数部分是N位
日期:
String--(所以要这样表示'2018-04-04') --需要加引号
Date date(日期) YYYY-MM-DD
datetime(日期和时间) YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59
字符:
char char(1):长度是1的char
布尔:
boolean int(0/1)
字符串:
String char/varchar
注意:Java中的char表示1个字符。MySQL中的char表示一个"字符串"
注意:char和varchar的区别:
1).char在MySQL中表示:定长的字符串。例如:设定字段类型为char(5)--->存储"abc"时--->硬盘上 --> "abc "
存储"a"时 --->硬盘上 --> "a "(后面用4个空格补充)
2).varchar在MySQL中表示:不定长的字符串。例如:设置字段类型为varchar(5) -->存储"abc"-->硬盘上 --"abc"
存储"a" -->硬盘上 -->"a"
怎么选择:char的查询速度要快于varchar
1).使用char : 对于字段的所有的值的长度如果全部相同,或者平均长度接近,变化不大时。
例如:性别、手机号、身份证号、银行卡号、QQ....
2).使用varchar : 对于字段的值的长度如果变化很大。
例如:地址、简介、备注......
大文本:
String XXXText
文本二进制:
byte[] binary
二进制文件(视频,图片)
byte[] XXXBlob
3. 关于数据类型长度:
char/varchar (5) : 字符的数量。表示最多5个字符,多余的会被截断;
int(11) : 字符的宽度:int在MYSQL中其实占用的是4个字节。所以这里的字符宽度表示在zerofill状态下,可见的总的数据位数,如果
不足这个位数,前面填充0.
例如:建表:
CREATE TABLE test2(
id INT(4) ZEROFILL
)
向字段写入数据:
1
12345
然后保存,然后刷新,会看到如下结果:
0001
12345
decimal(10,2):表示此数字总位数为10位,小数部分2位。
4.表操作相关语句_其它:
1).查看数据库中的所有表:
show tables;
2).查看表结构:
desc 表名;
3).删除表:.
drop table 表名;
4).修改表:
1).alter table 表名 add 列名 类型(长度) [约束];
作用:修改表添加列.
例如:
#1,为分类表添加一个新的字段为分类描述 varchar(20)
ALTER TABLE category ADD `desc` VARCHAR(20);
注意:desc这是个关键字,所以加符号,但这个不是单引号
2).alter table 表名 modify 列名 类型(长度) 约束;
作用:修改表修改列的类型长度及约束.
例如:
#2, 为分类表的描述字段进行修改,类型varchar(50) 添加约束 not null
ALTER TABLE category MODIFY `desc` VARCHAR(50) NOT NULL;
3).alter table 表名 change 旧列名 新列名 类型(长度) 约束;
作用:修改表修改列名.
例如:
#3, 为分类表的分类名称字段进行更换更换为 snamesname varchar(30)
ALTER TABLE category CHANGE `desc`description VARCHAR(30);
4).alter table 表名 drop 列名;
作用:修改表删除列.
例如:
#4, 删除分类表中snamename这列
ALTER TABLE category DROP description;
5).rename table 表名 to 新表名;
作用:修改表名
例如:
#5, 为分类表category改名成 category2
RENAME TABLE category TO category2;
6).alter table 表名 character set 字符集;
作用:修改表的字符集
例如:
#6, 为分类表 category 的编码表进行修改,修改成 gbk
ALTER TABLE category CHARACTER SET gbk;
八.记录操作相关的SQL语句----增、删、改、查
1).添加:insert into
1).有两个格式:
A).insert into 表名 values(值1,值2,....,值n):
例如:添加学员信息:
create table student(
stuNo int ,
name varchar(100),
age int,
sex char(5)
)
insert into student values(1,'张三',20,'男'); //记得加 ; 也可以同时增加多行数据(但需要同时选定多行)
注意:
1).值列表中的顺序,数量必须跟表中字段的顺序和数量相同。
如果年龄和性别不填:
insert into student values(1,'张三',null,null);
-----------------------------------------------------------------------
B).insert into 表名(字段1,字段2,....,字段n) values(值1,值2,....,值n)
例如:添加学员信息,但年龄和性别不填:
insert into student(stuNo,name) values(3,'李四');
注意:
1).字段列表:可以是表中的所有字段,也可以是部分字段;可以不跟定义顺序相同。
2).值列表:数量和顺序必须和前面字段列表的数量和顺序相同。没有出现的字段,本次添加
操作自动添加为NULL.
2).两种的区别:
A).第一种适合:向一个表的所有字段,或者大部分字段添加数据时。
B).第二种适合:向一个表的少部分字段添加数据时。
总之:要SQL语句要易读,后期要易于维护(更改SQL语句)
2).修改:update 表名 set 字段1 = 值,字段2 = 值, .... , 字段n = 值 where 条件; //where条件就是筛选
例如:修改"张三"的年龄为25
update student set age = 25 where name = '张三';
修改多个列:修改张三的年龄为20岁,性别:女
update student set age = 20, sex = '女' where name = '张三';
3).删除:delete from 表名 where 条件;
例如:删除"张三"
delete from student where name = '张三';
关于清空表:
1).delete from 表名:逐条删除,效率比较低。对于"自动增长"列,不改变基数。
2).truncate 表名:先摧毁表,然后再根据原结构重新创建表。效率比较高。对于"自动增长"列,会重建基数。
4).查询:select 字段列表 from 表名 where 条件
1).简单查询
1).查询所有商品:
select * from product; //注意 : *左右有空格; * 代表 所有列
2).查询部分字段:
select pname,price from product; //查询,部分列 (用部分字段代替*)
3).使用别名:
SELECT pname as '商品名称' ,price as '价格' FROM product; //注意: as 可以省略
4).去掉重复值:
SELECT DISTINCT price FROM product // distinct
5).对结果字段进行运算:
select pname,price + 100 from product //查一个字段,让它的价格+100,(原数据不变)
2).条件运算符:
1)"<":小于 :主要用于:数值类型、日期类型
例如:查询商品价格小于2000元的商品
select * from product where price < 2000;
查询生产日期小于2018-04-04
select * from product where proDate < '2018-04-04';
2)">":大于:主要用于:数值类型、日期类型
例如:查询商品价格大于2000元的商品
select * from product where price > 2000;
查询生产日期大于2018-04-04
select * from product where proDate > '2018-04-04';
3)">=":大于等于:主要用于:数值类型、日期类型
例如:查询商品价格大于等于2000元的商品
select * from product where price >= 2000;
查询生产日期大于等于2018-04-04
select * from product where proDate >= '2018-04-04';
4)"<=":小于等于:主要用于:数值类型、日期类型
例如:查询商品价格小于等于2000元的商品
select * from product where price <= 2000;
查询生产日期小于等于2018-04-04
select * from product where proDate <= '2018-04-04';
5)"=":等于:主要用于:数值类型、日期类型、字符串
例如:查询商品价格等于2000元的商品
select * from product where price = 2000;
查询生产日期等于2018-04-04的商品
select * from product where proDate = '2018-04-04';
查询所有的服装类商品
select * from product where category_id = '服装';
6)"!="或者"<>": 不等于:主要用于:数值类型、日期类型、字符串
例如:查询商品价格不等于2000元的商品
select * from product where price != 2000;
查询生产日期不等于2018-04-04的商品
select * from product where proDate <> '2018-04-04';
查询所有的非服装类商品
select * from product where category_id <> '服装';
3).逻辑运算符:
1).and : 与,语义:并且,相当于Java的&&
例如:查询所有商品价格在2000(包含)到3000(包含)元之内的商品信息
select * from product where price >= 2000 and price <= 3000;
查询2017年2月份生产的所有商品:
select * from product where proDate >= '2017-02-01' and proDate <= '2017-02-28';
查询所有价格高于2000元的服装类商品
select * from product where price > 2000 and category_id = '服装';
2).or : 或,语义:或者,相当于Java的||
例如:查询商品价格不在2000元到3000元之间的商品:
select * from product where price < 2000 or price > 3000;
3).not : 非,语义:不是..,相当于Java的!
例如:查询商品价格不等于2000元的商品
select * from product where price != 2000;
或者
select * from product where not price = 2000;
4).范围查询:between ...(包含) and ....(包含) ---可以用于:数值类型、日期类型
例如:查询所有2017年2月份生产的商品
select * from product where proDate between '2017-02-01' and '2017-02-28';
查询所有价格在3000到10000元的商品
select * from product where price between 3000 and 10000;
注意:必须between是小值
and 是大值
5).多个值的or判断:in(值列表):---可以用于:数值类型、日期类型、字符串类型
例如:查询ID为1,2,3,5,8的商品
select * from product where pid = 1 or pid = 2 or pid = 3 or pid = 5 or pid = 8;
或者
select * from product where pid in(1,2,3,5,8);
6).模糊查询:like 通配符:1).%:统配任意长度的任何字符;2)._:通配1个长度的任意字符;//一个下划线
例如:查询商品名称中带有"花"字的商品
select * from product where pname like '%花%';
查询商品名称中以"花"开头的商品:
select * from product where pname like '花%';
查询商品名称是4个字,并且以"花"开头:
select * from product where pname like '花___';
7).查询空:
例如:添加时:
insert into product values(13,'山东大枣',50,null,null); //null代表空的一种状态
查询:
select * from product where category_id is null; //不能用 = null
例如:添加:
insert into product values(13,'山东大枣',50,'','');【以后不建议使用】
查询:
select * from product where category_id = '';
作者: 仰望星空
出处: http://www.cnblogs.com/zs-notes/p/8716109.html
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在页面明显位置给出原文链接。