1.数据库简称(DB)
2.数据库管理系统简称(DBMS)
在windows操作系统下安装MySQL
安装关键步骤:端口设置3306
:编码设置UTF8
:密码设置
3.在cmd里启动MySQL:net start mysql
关闭:net stop mysql
进入cmd里面必须以管理员的身份进入操作才不会报错。
select version (显示版本号)
select * from 表名字 查询表里面的所有表单。
mysql -h(连接主机,本机是:localhost) -uroot(用户名) -p(用户名密码);
show tables 显示某个数据库的表
结构化查询语句SQL:
DDL 定义和管理数据对象,如数据库,数据表 CREATE DROP ALTER
DML 用于操作数据库对象中锁包含的数据 INSERT UPDATE DELETE
DQL 用于查询数据库数据 SELECT
DCL 用于管理数据库的语言,包括管理权限及数据更改GRANT COMMIT ROLLBACK
HELP contents 是MySQL帮助文档,可以查询所有属性和信息。
命令行操作数据库:
创建数据库; create database if not exists 数据库名;
创建数据库表: create table if not exists 表的名字;
删除数据库: drop database if exists 数据库名;
删除数据库表: drop table if exists 表的名字;
查询数据库: show databases;
使用数据库: use 数据库名;
退出数据库: exit
寻求帮助: ?
换行: \G
唯一约束: unique key 设置字段的值是唯一的,允许为空,但只能有一个空值。
默认约束: default
非空约束: not null
主键约束: primary key
外键约束: foreign key
默认值设定: default
注释: comment
自动增长: auto_increment
不能为负数: unsigned
不足位数填充: zerofill
设定没有值: null
必须填写值: not null
日期和时间: datetime YY-MM-DD hh:mm:ss
系统当前时间: now()
追加字符串: concat()
用来分页的: limit 0,3 意识是显示4条,每页显示4条。
去除重复项: distinct
创建数据表时指定数据表的编码格式:charset = utf8
把原有的数据截取出来存入新的表中:
create table 新表(select 字段1
,字段2
from 原表名)
把原有的数据创建原有的表里面:
insert into 表名 select 字段1,字段2 from 原表名
函数:
AVG() 返回某字段的平均值
COUNT() 返回某字段的行数
MAX() 返回某字段的最大值
MIN() 返回某字段的最小值
SUM() 返回某字段的和
CONCAT() 字符串连接 SELECT CONCAT(‘My’,‘S’,‘QL’);
返回:MySQL
INSERT() 字符串替换 SELECT INSERT(
‘这是SQL Server数据库’,
3,10,‘MySQL’);
返回:这是MySQL数据库
LOWER() 将字符串转为小写 SELECT LOWER(‘MySQL’);
返回:mysql
UPPER() 将字符串转为大写 SELECT UPPER(‘MySQL’);
返回:MYSQL
SUBSTRING
(str,num,len) 字符串截取 SELECT SUBSTRING(
‘JavaMySQLOracle’,5,5);
返回:MySQL
CURDATE() 获取当前日期 SELECT CURDATE();
返回:2016-08-08
CURTIME() 获取当前时间 SELECT CURTIME();
返回:19:19:26
NOW() 获取当前日期和时间 SELECT NOW();
返回:2016-08-08 19:19:26
WEEK(date) 返回日期date为一年中的第几周 SELECT WEEK(NOW());
返回:26
YEAR(date) 返回日期date的年份 SELECT YEAR(NOW());
返回:2016
HOUR(time) 返回时间time的小时值 SELECT HOUR(NOW());
返回:9
MINUTE(time) 返回时间time的分钟值 SELECT MINUTE(NOW());
返回:43
DATEDIFF(date1,date2) 返回日期参数date1和date2之间相隔的天数
SELECT DATEDIFF(NOW(),
‘2008-8-8’);
返回:2881
ADDDATE(date,n) 计算日期参数date加上n天后的日期
SELECT ADDDATE(NOW(),5);
返回:2016-09-02 09:37:07
RAND() 返回0~1间的随机数 SELECT RAND()
返回:0.5525468583708134
创建表的时候创建外键:
constraint 外键名 foreign key(外键字段)
references 关联表名(关联字段)
创建完表以后想关联主外键:
ALTER TABLE 表名 ADD CONSTRAINT 外键名
FOREIGN KEY(外键字段)
REFERENCES 关联表名(关联字段);
删除外键语句:
alter table 表名 drop foreign key 索引的名字;
alter table student drop index 索引的名字;
修改数据表:
修改表:修改表明
alter table 旧表名 rename as 新表名
添加字段:
alter table 表名 add 字段名 列类型【属性】
修改字段:
alter table 表名 modlfy 字段名 列类型【属性】
alter table 表名 change 旧字段名 新字段名 列类型【属性】
删除字段:
alter table 表名 drop 字段名
删除表:
drop table if exists 表名
创建表列类型设置:
·字段名· 类表类型【属性】 【索引】【注释】
类表分类:
数值:tinyint 非常小的适合存放年龄(存放127以下的数字)
:int 标准整数
:double 存放小数
:decimal(m,d) 用于存放货币(M.表示长度。d:表示小数点后面有几位)
字符串:
char[(m)] 固定长度不可变,M设置多少就加载多少
varchar[(m)] 长度可变,但是加载速度有点慢
text 文本字符串(比如说:比较长的合同)
查看数据库的定义
show create database 写要查看的数据库的名称
查看数据表的义
show create table 写要查看的数据类表
显示表结构
desc 写要产看的数据类表
#设置严格检查模式:判断是否超出设定的数值就报错
SET aql_mode=‘strict_trans_tables’;
#产看Mysql所支持的引擎类型
SHOW ENGINES;
#查看默认引擎
SHOW VARIABLES LIKE ‘storage_engine’
Mysql的数据表的类型:
MyISAM: 节约空间及相应速度
*。frm 表结构定义文件;
*。MYD 数据文件
. MYI 索引文件
InnoDB: 安全性,事务处理及多用户操作数据表
InnoDB类型数据表只有一个.frm文件,以及上一级目录的idbata1文件
如何在表中添加数据:
通过DML语句管理数据库数据:
insert 添加数据语句
insert into 表名 (字段) values(值);
update 更新数据语句
update 表的名字 set 列=“输入要修改的值” 修改一个
where 列的ID=值
update 表的名字 set 列=“输入要修改的值” 修改多个
where 列的ID between 1 and 10
where条件运算符:
<>或!= 不等于的
between 在某个范围之间 举例:between5 and 10
and 并且
or 或者
delete 删除数据语句
DELETE 表列[FROM] 表名 WHERE 列名=后面要删除的值
DELETE [FROM] 表名 WHERE 列名=后面要删除的值
delete test 表名 是删除数据,但是不删除自增
truncate table 表名 是删除所有数据,包括自增
select语法
SELECT <列名|表达式|函数|常量>
FROM <表名>
[WHERE <查询条件表达式>]
[group by 分组名] <指定结构按照那几个字段来分组>
[having] <过滤分组的记录必须满足条件的>
[ORDER BY 排序名] <排序的列名>[ASC或DESC]]
[limit 0,0] <指定查询的记录从哪条至那条>
select * from 表名 产看所有
select distinct 列名 from 表名 取出重复项,只看一个(distinct关键单词)
select @@auto_increment_increment产看自增的步数是多少
select version() 产看版本号
学员考试成绩查看的时候集体提一分:
select 学号 成绩+1 ‘提分后’ from 表名
满足条件查询95到100之间的成绩(where)
select 学号,成绩
from 表名
(1)where 成绩>=95 and 成绩<=100;或(2) where 成绩 between 95 and 100;
精确查找10015号同学:
select 学号,成绩
from 表名
where 序号=10015
如果查询不要10015号的就在后面加个!
like 结合使用的通配符:%(0到任意一个字符) (一个字符)
select 学号,姓名
from 列表
where 姓名 like’李’ 查找所有的姓名中包含李后面一位的名字
查找姓名中查找带“文”的,只要带文的就查找出来
selsect 学号,姓名
from 表名
where 姓名 like ‘%文%’
查找学员姓名中带有“%”这个词的学生 转移符:%
select 学号,姓名
from 表名
where 姓名 like “%%%” 把%分好给转意了。
模糊查询多个
select 学号,姓名
from 表名
where 姓名 in(1000,1001,1002,1003);
查询出生日期为空的同学
select 姓名
from 表名
where 日期 is null
内连接:
SELECT 属性
FROM 表1
INNER JOIN 表2
ON 表1=表2
创建临时表:
CREATE TEMPORARY TABLE 表名(查询语句)
临时表只在当前连接可见,连接关闭自动删除,修改临时表数据不影响原表数据
mysql事务处理
1.事务处理的ACID原则
1.原子性(Atomic) 一块执行要么失败,要么一块成功
2.一致性(Consist) 要么提交前,要么提交后的状态,不能为别的状态
3.隔离性(lsolated) 事务是隔离的,互不影响
4.持久性(Durable) 就是保留着持久性。
2.MYsql中默认是自动提交。使用事务时应先关闭自动提交。
set autocommit=0 关闭自动提交模式
set autocommit=1 开启自动提交模式
start transaction 开始一个事务,标记事务的起始点
commit 提交一个事务给数据库
rollback 将事务回滚,数据回到本次事务的初始状态
set autocommit=1 还原Mysql数据库的自动提交
3.数据库索引
分类:主键索引 (primary key)
唯一索引 (unique)
常规索引 (index) index和key关键字都可以设置常规索引
全文索引 (fulltext)
全文索引:只适用于MYISAM类型的数据表
只适用于CHAR、VARCHAR、TEXT数据列类型
适合大型数据集
alter table 表名 engine=MYISAM;
select * from 表名 where match(列) against(‘列里面的值’)
engine=myisam; 设置myisam类型
创建文件的时候加入索引
CREATE INDEX 索引名 ON 表名(列名); 普通索引
CREATE UNIQUE INDEX 索引名 ON 表名(列名); 唯一索引
查看索引
SHOW INDEX FROM 列名;
explain 带你看系统执行那种索引的方式
show index from 表名: 显示索引信息
删除一个索引:
1.drop index 索引里面的名字 on 表名;
2.alter table 表名 drop index 索引里面的名字;
主键的索引删除:
alter table 表名 drop PRIMARY KEY;
4.索引准则
1.索引不是越多越好
2.不要对经常变动的数据加索引
3.小数据联的表,建议不要加索引
4.索引一般加在查找条件的字段
1.MySQL的备份
mysqldump备份工具 source 命令恢复
mysqldump -h主机名 -u账号 -p密码 -[c(添加列名)]数据库名 【列1 列2】>b./路径/文件名.sql
恢复备份的文件:
source命令恢复
use 数据库名: 点击回车
source h:/哪个盘符/备份的文件名
mysql数据恢复:
mysqldump -h主机名 -u账号 -p密码 数据库名<h:/哪个盘符/备份的文件名
mysq -u账号 -p数据库名<h:/哪个盘符/备份的文件名
2.使用sqlyog工具来备份
注意事项,打钩的地方要注意
数据库设计:
实体,一般名词 用长方向
属性,一般名词 用椭圆形
联系,一般动词 菱形代替
数据库设计三大范式:
1.确保每列的原子性,就是不可再拆分的详细点了
2.每张表都描述一件事情,确保每张表都跟主表相关。
3.