mysql数据库基础总结
一、数据库是什么?
存储数据的仓库,是一种数据存储的文件系统,我们可以通过语言进行数据库中的数据的增删改查的操作
二、常见的数据库产品?

关系型数据:

oracle:oracle公司的大型收费数据库产品,大型的java项目常用

SQL Server:微软的大型收费的数据库产品,主要用在.net大型项目中

mysql:oracle公司的中小型免费产品,中小型的javaphp项目中

DB2:IBM公司的大型收费数据库,主要用在银行、金融系统中 一般是配套IBM的硬件一起出售

非关系型数据库:

常用:mogoDB、Redis、hbase
三、sql语言的介绍及分类

介绍:

结构化查询语言,是一种数据库操作和程序设计的语言,可以对数据库、数据表以及数据表中的数据进行增加、删除、修改以及查询的操作

分类:

DDL:数据定义语言,对数据库、数据表的定义 DML:数据操作语言,对数据表中的数据进行增加、删除、修改的操作 DQL:数据查询语言,对数据表中的数据进行查询操作 DCL:数据控制语言,对数据库的权限、安全、用户的管理操作
四、定义数据库和数据表

定义数据库:

创建数据库

语法:create database 数据库名称 [character set 编码] [collate 校对规则] 注意:[]意思是可以选择 不是语法格式

示例:create database mydb character set utf8 collate utf8_general_ci

查看数据库

show databases; 代表查看数据库服务器中的所有的数据库

show create database 数据库名称;

修改数据库编码

语法:alter(改变) database 数据库名称 character set 编码;

示例:alter database mydb character set gbk;

删除数据库

语法:drop database 数据库名称;

示例:drop database mydb;

其他

进入、切换数据库:use 数据库名称

示例:use mydb;

查看当前所在的数据库:select database();

定义数据表

创建数据表

语法:create table 表名称(
字段名称 数据类型 [约束],
字段名称 数据类型 [约束],
… …
);
示例:
“create table user(
id int,
name varchar(15),
age int
);”

创建一个张表user,该表具有以下字段:

id int 主键 自动增长
username 字符串 长度20 非空
password 字符串 长度20 非空
gender 字符串 长度10
age 整型 默认25岁
email 字符串 长度50 唯一 非空
salary 浮点型 最大8位其中两位小数
state 整型 默认0
role 字符串 长度10 默认值 “VIP”
registTime 时间戳
示例:
“create table user(
id int primary key auto_increment,
username varchar(20) not null,
password varchar(20) not null,
gender varchar(10),
age int default 25,
email varchar(50) unique not null,
salary double(8,2),
state int default 0,
role varchar(10) default ‘VIP’,
registtime timestamp
);”

查看数据表

show tables;查看此数据库下的所有的表名

show create table 表名称;查看指定表的创建语句

示例:show create table user;

desc 表名;查看表的结构

示例:desc user;

删除表

语法:drop table 表名称;

示例:drop table user;

修改表

修改表的名称

语法:rename table 旧名称 to 新名称;

示例:rename table user to newuser;

修改表的编码

语法:alter table 表名称 character set 编码;

示例:alter table newuser character set gbk;

新增字段

语法:alter table 表名称 add 字段名称 数据类型 [约束];

示例:alter table newuser add idcard varchar(18) unique;

删除某字段

语法:alter table 表名称 drop 字段名;

示例:alter table newuser drop idcard;

修改字段

语法:alter table 表名称 change 旧名称 新名称 数据类型

示例:alter table newuser change gender sex varchar(2);

修改数据类型

语法:alter table 表名称 modify 字段名称 新的数据类型;

示例:alter table newuser modify role varchar(30);

五、单表操作

插入数据 insert

语法:insert into 表名(字段名1,字段名2,…字段名n) values(值1,值2,…值n);

示例:
“insert into newuser(id,username,password,sex,age,email,salary,state,role,registtime)
values(1,’zhangsan’,’123’,’1’,25,’[email protected]’,100,0,’teacher’,’2015-10-10 12:35:50’);”
insert into newuser(id,username,password,sex,age,email,salary,state,role,registtime)
values(2,’lisi’,’321’,’0’,35,’[email protected]’,200,0,’teacher’,’2015-10-10 13:35:50’);
注意:
(1) 如果主键是auto_increment的,那么,主键列的值可以写成null或者主键列省略不写
"insert into newuser(id,username,password,sex,age,email,salary,state,role,registtime)
values(null,'wangwu','123','1',25,[email protected]',300,0,'teacher','2014-10-10 12:35:50');"
(2) 如果插入的数据是全数据的话,那么字段名称可以省略
"insert into newuservalues(null,'tianqi','123','1',25,[email protected]',400,0,'teacher','2012-10-10 12:35:50');"

修改数据

语法:update 表名称 set 字段名称=值,字段名称=值… [where条件语句]

示例:update newuser set password=’zhangsan123’,age=45 where id=1;

注意:
如果不写where条件子句的话 会把表中的所有相应字段的数据全部修改
示例:update newuser set password='lisi123',age=50,salary=12000 where username='lisi';

删除数据

语法:delete from 表名 [where条件句];

示例:delete from newuser where email=’[email protected]’;

注意:
如果不写where条件句的话 那么会把表中的数据全部删掉
问题:delete from newuser和drop table user的区别?
前者是删除数据,但是表的结构还在,后者是把整个表全部删掉
truncate table newuser;和delete from newuser;区别?
前者一次性将表摧毁,然后在新建表结构,后者是一条一条的将数据删除

查询数据

(1) 全部查询:select * from 表名;

(2) 查询部分数据:select 字段名称1,字段名称2… from 表名称;

(3) 去重查询:select distinct 字段名称 from 表名;

(4) 运算查询:select username,salary*1000 from user;

注意:
null在运算的时候还是null

(5) 聚合函数

count():计数函数 select count(username) from user;注意:在使用count进行计数的时候 如果列中的项为null 不计入
sum():求和函数 select sum(salary) from user;注意:加和函数在进行加和的时候会把null看成0
max():最大值函数 select max(salary) from user;
min():最小值函数 select min(salary) from user;
avg():平均值 select avg(salary) from user;

(6) 排序查询 order by 字段;

默认是升序的排序顺序的

desc:表示降序

asc:表示升序

(7) 条件查询

单一条件查询:

select * from user where username=’范瑾’; > < >= <= !=

select * from user where dept=’技术部’;

多条件查询:select * from user where dept=’技术部’ and gender=’女’;

select * from user where dept=’技术部’ and gender=’女’ and age<30;

注意:
逻辑连接符 and or not 优先级:and >or

范围查询:between … and … 包括两个端点

select * from user where salary between 5000 and 10000;

枚举查询 in(枚举字段)

select * from user where age in <18,20,23>;

模糊查询:like ‘数据’;

select * from user where username like ‘张%’;

注意:
%:代表多个任意字符_代表任意一个字符
(8) 分组查询 group by 字段 [having 条件]

问题:where和having的区别?

where在进行分组之前执行的,having是在分组之后执行的

sql语句的书写顺序与执行顺序:

书写顺序:select 字段 from 表名 where 条件 group by 字段 having 条件 order by 字段;

执行顺序:from > where > group by > having > select >order by

六、多表查询

外键与外键约束

外键:与主键对应,其目的是使两张表通过主外键进行关联

外键约束:在创建表的时候对响应的外键列进行描述

语法:constraint(约束的意思) 外键的名称 foreign key 从表名称(外键字段) references (参照的意思)主表名称(主键名称)

需求:创建两张表 一张是customer表 一张orders表 有主外键关系

创建customer表

“create table customer(
id int primary key auto_increment,
name varchar(20) not null,
tel varchar(20) not null,
grade varchar(20) default ‘铜牌会员’
);”

创建orders表

“create table orders(
id int primary key auto_increment,
oCode varchar(20) not null,
cid int not null,
constraint customer_orders foreign key orders(cid) references customer(id)
);”

多表设计

往往java实体对象存在多种关系,把这些对象抽象成数据表也就存在一对一、一对多、多对多的关系

注意:多对多的关系时 往往存在关系表

例如:

一对一:用户表和购物车表 实际开发中往往表字段比较多或者需要表的语义明确时进行分表操作

一对多:用户表和订单表

多对多:订单表和商品表

多表查询

多表查询其实就是使用一条sql同时查询出多个表中关联的数据

内连接:
在查询的时候必须数据之间一一对应才可查询出
语法:select 字段 from 表1 inner join 表2 on 条件
内连接需求:查询所有的用户的订单中的商品信息
select * from customer inner join orders on customer.id=orders.cid
inner join orders_goods on orders.id = orders_goods.oid
inner join goods on orders_goods.gid = goods.id;
隐式的写法:select 字段 from 表1,表2,... where 条件
示例:
select * from customer c,orders o,orders_goods og,goods g
where c.id=o.cid and o.id=og.oid and og.gid=g.id;
一般情况下 n张表需要最少 n-1个条件可以保证数据不冗余

#

外连接:
左外连接:保证左表中的数据全部显示,右表中的数据仅仅显示与左表有关联的
语法:select 字段 form 左表 left join 右表 on 条件
左外连接需求:查询所有的用户的信息,如果该用户有订单信息一起显示
select * from customer c left join orders o on c.id=o.cid;
如果使用内连接:select * from customer c inner join orders o on c.id=o.cid;
右外连接:保证右表中的数据全部显示,左表中的数据仅仅显示与右表有关联的
语法:select 字段 from 左表 right join 右表 on 条件
右外连接需求:查询所有的商品信息,如果该商品有所属的订单则一起显示订单信息
示例:select * from orders_goods og right join goods g on og.gid=g.id
select * from goods g left join orders_goods og on og.gid = g.id;
子查询:
子查询查出的数据可以在当成一个表看待
子查询:查询订单为2的用户的用户的姓名
分布查:select cid from orders where id=2;
select name from customer where id=2;
子查询:select name from customer where id=(select cid from orders where id=2);
查询商品价格大于1800的订单编号
分布查:select id from goods where gprice>1800;
select oid from orders_goods where gid in(1,2,4);
select * from orders where id in(1,2);

select * from orders where id in(select oid from orders_goods where gid in(select id from goods where gprice>1800));

本文数据库(mysql)相关术语:navicat for mysql mysql workbench mysql数据库 mysql 存储过程 mysql安装图解 mysql教程 mysql 管理工具

分页:12
转载请注明
本文标题:mysql数据库基础总结 mysql mysql数据库 mysql函数 MySQL数据库学习
本站链接:http://www.codesec.net/view/532741.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(mysql) | 评论(0) | 阅读(35)