mysql
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。
我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:
- 1.数据以表格的形式出现
- 2.每行为各种记录名称
- 3.每列为记录名称所对应的数据域
- 4.许多的行和列组成一张表单
- 5.若干的表单组成database
常见数据库:oracle DB2 sql server postgre sql mysql
MySQL(关系型数据库管理系统)
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。
MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
MySQL 使用标准的 SQL 数据语言形式。
MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
MySQL 对PHP有很好的支持,PHP 是目前最流行的 Web 开发语言。
MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。
MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。
DOC常用命令:
切换盘符:d:
列出当前目录下的所有文件:dir
进入到当前某个文件 cd 文件 cd xxx*
返回上一层:cd..
直接输入程序名字就可以。
安装服务的语句:mysqld -install mysql-5.5
启动服务:net start mysql55-ntqn
停止服务:net stop mysql55-ntqn
卸载服务:mysqld -remove mysql55-ntqn
服务器初始化:mysqld –-initialize
sql语言:结构化查询语言:
1、 DDL 数据定义语言 定义视图,索引,触发器表的定义
2、 DML 数据操作语言 数据的插入、删除、修改的操作
3、 DQL 数据查询语言 查询语言
4、DCL 数据控制语言 授予权限、创建用户、启动服务
常用的命令:
show databases; 查询所有当前数据库连接的库
use mysql; 进入到某个库
show tables; 查询某个库中的所有表
quit;
exit;
\q 都是退出的意思。
cls清屏
登陆:mysql –uroot –p
得到版本号:mysql –v mysql –version
创建数据库
create database db_name;
注意:数据库名称有意义 名称中不要包含特殊字符或者mysql关键字
查询所有数据库: show databases;
创建数据库已经存在,避免错误:create database if not exists da_name;
显示警告:show warnings;
查看指定数据库的详细信息:show create database db_name;
修改指定数据库的编码方式:alter database db_name [default] character set [=] charset;
打开数据库:use db_name;
得到当前打开的额数据库:select database();
删除指定的数据库:drop database db_name;
如果存在则删除:drop database if exists db_name;
mysql的注释:# 注释内容 — 注释内容
数据表以及数据类型的介绍:
1、 数据是存在数据表中
2、 行row 列column
3、 表名要求唯一,不要包含特殊字符,最好含义明确
创建数据表:
create table [if not exists] tb_name(
字段名称 字段类型 [完整性约束],
字段名称 字段类型 [完整性约束],
字段名称 字段类型 [完整性约束]
)
数据类型:
数值型:整数型 浮点型 定点型
字符串类型
日期时间类型
整数类型:比如几百万人用int 一个班集体这样的几十号人用tinyint
浮点类型存储范围比整数大,decimal是定点数类型
-3.4E+38表示 -3.4*10
工资等形式可以用定点数类型decimal存储,精度比较高
char varchar text用的 比较多
日期时间类型:datetime用的比较多,time表示小时分钟秒,date日期,datetime日期加时间,timestamp表示时间戳:1970年到目前为止的时间,year表示存储的年份
单表查询
添加字段 alter table tbl_name
add 字段名称 字段属性[完整性约束] first|after 字段名称
删除字段 alter table tbl_name drop 字段名称
添加默认值
alter table tb_name
alter 字段名称 set default 默认值;
删除默认值
alter table tb_name
alter 字段名称 drop default 修改字段类型、字段属性
alter table tb_name
modify 字段名称 字段类型[字段属性] [first|after 字段名称]
修改字段名称、字段类型、字段属性
alter table tb_name
change 原字段名称 新字段名称 字段类型 字段属性[first|after 字段名称]
添加主键和删除主键
添加主键:
alter table tb_name
add primary key(字段名称)
删除主键:
alter table tb_name
drop primary key;
显示不能删除的原因:
1、 主键和auto自增配合在一起使用的;
2、 如果要删除,必须先删除auto属性,然后在删除主键才可以。
添加唯一
alter table tb_name
add unique key|index index_name(字段名称)
删除唯一
alter table tb_name
drop index_name;
重命名表的操作
修改数据表名称
alter table tb_name rename[to|as] new_tb_name;
rename table tb_name to new_tb_name
说明:
1、 第一种语法种的to或者as可以省略
2、 第二种语法的to必须mysql的存储引擎:
1、 myisam存储引擎
2、 innodb存储引擎
添加记录
insert into tb_name(co1,co2,…) value|values(va1,va2….);
a) 不指定字段名称insert tb_name value(va1,va2,…..)
b) ,列出指定字段名称insert tb_name(字段1,字段2,。。。) values(值1,值2.。。);
c) 一次添加多条记录 insert tb_name(co1,co2,…) values(va1,va2…),(va1,va2…),(va1,va2…)
d) insert ….set得形式 insert tb_name set 字段名称=值,字段名称=值,。。。。;
e) insert…select insert tb_name(字段名称。。。) select 字段名称,。。。 from tb_name where ….;
修改记录
update tb_name set 字段=值,字段=值,[where 条件]
a) 如果不添加条件,整个表中得记录都会被更新
删除记录
a) delete from tb_name [where 条件]
b) 如果不添加条件,表中所有记录都会被删除
c) delete清空数据表的时候不会重置auto_increment的值,可以通过alter重置为1
d) alter table user auto_increment=1;
e) 彻底清空数据表 truncate [table] tb_name; 清空表中得所有记录 会重置auto_increment的值
查询记录
a) 指定字段得信息 select 字段名称,。。。。 from tbname;
b) 库名.表名 select * from king.user1;
c) 给字段起别名 select 字段名称 [as] 别名名称,。。。 from db_name.tb_name;
d) 给数据表起名字 select 字段。。。 from tb_name [as] 别名
e) 表名.字段名称 select user1.id,user1.username from user1; select u.id,u.username from user1 as u;
where条件
会筛选出符合条件得记录 比较运算符 > >= < <= != <> <=>
is [not] null 检测值是否为null 或者not null
指定范围 [not] between …and …
指定集合[not] in(值,。。。)
逻辑运算符 and 逻辑与 or 逻辑或
模糊查询 like %任意长度得字符串 任意一个字符
having 二次筛选
对分组得结果进行二次筛选
having后面可以通过聚合函数操作得
sum() avg() max() min()
order by实现排序
order by 字段名称 asc desc
rand()随机排序
limit限制结果集得显示条数
有了limit能够实现我们的分页效果
1、limit 值 显示结果集得前几条记录
2、limit offset,row_count 从offset开始,显示几条记录,一般情况下这个offset从0开始
select co1,co2… from tb_name
where 条件
grop by {co1|position} having 二次筛选
order by {co1|position} [asc|desc]
limit限制结果集得显示页数
多表查询
1、 笛卡尔积得形式
2、 内连接得形式
查询2个表中得复合连接条件得记录
select 字段。。。 from tb_name1 inner join tb_name2 on 连接条件
内连接查询得结果是表和表得交集得部分。
3、 外连接得形式
a) 左外连接 select 字段。。。 from tb1 left[outer]join tb2 on 条件;
先显示左表中得所有记录,再去右表查询符合条件得记录,不符合得以null代替
b) 右外连接 select 字段。。。 from tb1 right[outer]join tb2 on 条件;
先显示右表中得所有记录,再去左表查询符合条件得记录,不符合得以null代替
用得最多得还是外连接
外键约束
foreign key 只有innodb存储引擎支持外键
1、 建表时指定外键 CONSTRAINT news_ibfk_1
FOREIGN KEY (cateId
) REFERENCES news_cate
(id
)
子表得外键关联的必须是主表的主键
2、 自定义外键约束得名称
CONSTRAINT cateId_fk_newsCate FOREIGN KEY(cateId) REFERENCES news_cate(id)
动态添加外键和删除外键
1、 alter table tb_name drop foreign key fk_name;
2、 alter table tb_name add foreign key(外键字段) references 主表(主键字段)
重新创建news表和news_cate表
子查询:
select 字段名称 from b_name where co_name = (select co_name from tb_name)
内层语句查询到得结果可以作为外层语句查询得条件
1、 由in引发得子查询
2、 由比较运算符引发得子查询
3、 由exists引发得子查询 内层语句返回true外层语句执行有效,反之外层执行无效。
4、 带有any some all关键字得子查询
any some all
1、>any表示大于子查询查出的最小值,>all表示大于子查询的查出的最大值
1、
联合查询
insert .. select
create …select
去除重复字段的查询
select distinct(username) from user2;
联合查询
1、 union
select 字段名称,。。。 from tb_name1
union
select 字段名称,。。 from tb_name2; 把重复的合并了,不重复的留下了
2、 union all
select 字段名称,。。。 from tb_name1
union all
select 字段名称,。。 from tb_name2; 所有记录都记录在一起,不管重复与否
case when
常用函数
1、 数学函数的使用
ceil()进1取整 floor() 舍掉小数部分 round() 四舍五入
truncate() 截取小数点后几位
mod() 取余数 abs() 取绝对值 power() 幂运算 pi() 圆周率
rand() 或者rand(x) 0~1之间的随机数
sign(x) 得到数字符号 exp() 计算e的x次方
2. 字符串常用函数
char_length( ) 得到字符串的字符数 concat( ) 将字符串合并成一个字符串
upper( )/ucase( ) 将字符串改成大写 lower()/ lcase() 将字符串改成小写
reverse () 字符串反转
left() 显示前几个
right()显示后几个
lpad() 用字符串将左边填充到指定长度
rpad() 用字符串将右边填充到指定长度
tirm() 去掉字符串两端空格
ltirm() 去掉左端空格
rtrim() 去掉右端空格
repeat() 重复指定次数
replace() 替换
substring,截取 第一个参数是表面从何处开始,第二个参数是截取的长度
strcmp()比较字符串 第一个参数比第二个参数小,返回-1.相等,返回0,第一个参数比第二个参数大,返回1
curdate() / current_date() 返回当前日期
curtime() / current_time() 返回当前时间
now() / current_timestamp() / sysdate() 返回当前日期时间
month(curdate()) 返回当前月份
month( ) 返回指定日期的月份
monthname( ) 返回日期的月份的英文名字
dayName( ) 返回星期几的名字
dayofweek( ) 返回一周内的第几天
week( ) 返回一年中的第几周
year( ),month( ),day( ),hour( ),minute( ),second( ) 返回年,月,日,时,分,秒
datediff()计算两个日期相差的天数 前-后
version() 查询当前数据库的版本号
connection_id() 查询当前数据库的连接数
datebase() / schema() 查询当前打开数据库的库名
user() / current_user() / SYSTEM_USER() / SESSION_USER() 查询当前登录的用户
md5( ) md5加密 32位
password( ) password 加密方法 41位