mysql安装包里面:
mysqld是服务,mysql是客户端。
mysqld其实是SQL后台程序(也就是MySQL服务器),它是关于服务器端的一个程序,mysqld意思是mysql daemon,在后台运行,监听3306端口,如果你想要使用客户端程序,这个程序必须运行,因为客户端是通过连接服务器来访问数据库的。你只有启动了mysqld.exe,你的mysql数据库才能工作。
mysql是一个客户端软件,可以对任何主机的mysql服务(即后台运行的mysqld)发起连接,mysql自带的客户端程序一般都在cmd或者终端下进行操作
mysqld是用来启动mysql数据库的命令
mysql是打开并执行sql语句的命令
一、什么是数据库
1、概念:数据库是一个可以在一台机器上独立工作的,并且可以给我们提供高效、便捷的方式对数据进行增删改查的一种工具。
2、优势
1.程序稳定性 :任意一台服务器崩溃了都不会影响数据和另外的服务器。
2.数据一致性 :所有的数据都存储在一起,所有的程序操作的数据都是统一的,就不会出现数据不一致的现象
3.并发 :数据库可以良好的支持并发,所有的程序操作数据库都是通过网络,而数据库本身支持并发的网络操作,不需要我们自己写socket
4.效率 :使用数据库对数据进行增删改查的效率要高出我们自己处理文件很多
二、数据库的一些名词
1、数据/记录:描述事物的符号记录称为数据,描述事物的符号既可以是数字,也可以是文字、图片,图像、声音、语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机
例如:1,明哥,猛男,20,东北
但是单纯的一条记录并没有任何意义,如果我们按逗号作为分隔,给各个字段设置标题,那么就具有可读性了
id,name,sex,age,hometown
1,明哥,猛男,20,东北
2、数据库(DataBase,DB):数据库是长期存放在计算机内、有组织、可共享的数据集合。
其实数据库中的库就是文件夹,一般情况下 每个程序使用一个库,库中一张表(table)就是一个文件
3、数据库管理系统(DataBase Management System ,DBMS):数据库管理系统就是一款专门用于管理数据库的系统软件,就是通过一个软件来管理文件夹、文件、数据
现在主流的数据库有:
关系型数据库
mysql 开源,主要用于大型门户
oracle 企业级,功能强大、安全但是费用高
sqlite 轻量级
sql server 大学课程多数用这个,是微软公司的产品
非关系型数据库 :消息转发
memcache
redis
MongoDB
nosql
解释什么是关系型
关系型
一条数据包含了一个事物的多条信息,这些信息之间是有关联性的
非关系型 :存取频繁的,并且要求效率高的,不突出数据之间关联的
k-v
id content
4、数据库服务器:数据库管理系统装在哪台机器上,哪台机器就是数据库服务器,但是对这台机器的内存要求比较高
5、数据库管理员(Database Administrator,DBA):维护数据库管理系统(DBMS)的相关工作人员的统称
6、总结
数据库服务器:运行数据库管理软件
数据库管理员:维护数据库管理软件的人
数据库管理软件:管理-数据库
数据库:即文件夹,用来组织文件/表
表:即文件,用来存放多行内容/多条记录
三、初识MySQL
1、SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。SQL语言分为3种类型:
DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE
2、账号相关操作
注意:我这里 > 代表在cmd下进行操作 mysql> 代表已经进入了mysql客户端进行操作
# 启动server端 - 可以在service服务中操作,也可以打开cmd窗口
> net start mysql
# 默认用户登陆之后并没有实际操作的权限
# 需要使用管理员root用户登陆
> mysql -u root -p # mysql5.6默认是没有密码的,遇到password直接按回车键
mysql> show databases; # 查看所有的库
mysql> select user(); #查看当前用户
mysql> select database(); # 查看当前使用的数据库
mysql> exit # 也可以用\q quit退出
mysql> set password = password('123abc'); # 给当前用户设置密码
mysql> set password for 'username'@'host' = password('123abc') # 给其他用户设置密码
# 在输入sql语句的过程中 如果想要放弃本条语句 \c
# 创建账号
# %表示这个网段内所有ip都可以连接,identified by '123'表示给这个用户设置密码123
mysql> create user 'ming'@'192.168.16.%' identified by '123';
mysql> create user 'ming'@'192.168.16.5' # 表示某机器可以连接
mysql> create user 'ming'@'%' # 表示所有机器都可以连接
# 远程登陆
mysql> mysql -u ming -p123 -h 192.168.16.31 # u是user p是password h是localhost的ip地址
# 给账号授权
mysql> grant all privileges on *.* to 'ming'@'%' identified by '123' with grant option;
解释:
all privileges:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。
on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“*”表示所有数据库,所有表。
to:将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。比如:”ming”@”192.168.0.%”,表示ming这个用户只能在192.168.0IP段登录
identified by:指定用户的登录密码
with grant option:表示允许用户将自己的权限授权给其它用户
---------------------
# 给已有的用户授权:
usage 无权限
all 全部权限
select 查
create 增
drop 删
mysql> grant all on *.* to 'ming'@'%'; # all表示授予所有权限,第一个*代表所有库,第二个*代表所有表,'ming'@'%'代表用户和客户端主机,%代表任意主机
mysql> grant select on db1.* to 'ming'@'localhost'; # select代表只给查的功能,db1.* 代表库db1的所有表,localhost代表本地主机
# 给未存在的用户授权,会创建再授权
mysql> grant all on *.* to 'dong'@'%' identified by '123456' # 创建账号并授权
# 刷新权限
mysql> flush privileges; # 刷新使授权立即生效
# 查看用户权限
show grants for 'ming'@'%';
# 回收权限
mysql> revoke select on *.* from 'ming'@'%';
3、mysql语句
1. 操作文件夹(库)
增:create database db1 charset utf8;
查:show databases;
改:alter database db1 charset latin1(要修改的内容);
删除: drop database db1;
2. 操作文件(表)
先切换到文件夹下:use db1
增:create table t1(id int,name char); #(列名1 数据类型,列名2,数据类型...) 这个是创建表和表头,还没有内容的
查:show tables;
desc 表名; # 查看表的结构describe
改:alter table t1 modify name char(3); # 修改字段类型及名称, 使用 MODIFY 或 CHANGE 子句 。字段 name的类型改为 char(3)
alter table t1 change name name1 char(2);
删:drop table t1;
3. 操作文件中的内容(记录)
增:# insert into +表名(表中的字段,)value(字段所对应的记录,);
insert into t1(id) values(1);
insert into t1(id,name) values(2,'b');
insert into t1 values(1,'a1'),(2,'a2'),(3,'a3');
查:select * from t1;
改:update t1 set name='ssb' where id=2;
删:delete from t1 where id=1;
清空表:
delete from t1; #如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。
truncate table t1; #数据量大,删除速度比上一条快,且直接从零开始,
*auto_increment 表示:自增
*primary key 表示:约束(不能重复且不能为空);加速查找