目录
4、DDL:数据库定义语言:表操作,增、删、改、查
5、DML:对数据的增、删、改、查
1、Mysql的内置功能
- -u:登录的用户名
- -p:密码
- -s:用户指定msyql.sock的文件登录
- 例子:mysql -uroot -p -s /tmp/msyql.sock
- -h:登录的IP
- -P:指定端口
- 例子:msyql -uroot -h127.0.0.1 -P3306 -p
- -e:面交互式执行sql语句
- 例子:msyql -uroot -p -e "show databases; "
- <:用户数据恢复
- [root@bogon ~]# mysql -uroot -p < /root/test.sql
- [root@bogon ~]# mysql -uroot -p < /root/test.sql
2、SQL分类
- SQL:Structured Query Language,结构化查询语句【数据以查询为主:99%是在进行查询操作】关系型数据库通用命令:不同的数据产品(Oracle,Mysql)可能会有一些细微的差别
- SQL:分为三部分
- DDL:Data Definition Language,数据定义语言,用来维护存储数据的结构(数据库,表)
- DML:Data Manipulation Language,数据操作语言,用来对数据进行操作(数据表中的内容:insert,delete,update)
- DQL:Data Query Language:数据查询语句(如:select)【属于DML内部单独的一个分类】
- DCL:Data Control Language:数据控制语句,主要负责权限管理(用户:grant,revoke)
- SQL:分为三部分
- 关键字介绍
- 数据库:database
- 数据库系统:DBS(Database System):是一种虚拟系统,将多种内容关联起来的称呼
- DBMS:Database Management System,数据库仓库系统,专门管理数据库
- DBA:Database Administrator,数据库管理员
- 行/记录:row/record,本质是一个东西:都是指表中的一行(一条记录):行是从结构角度出发,记录是从数据库角度出发
- 列/字段:column/field,本质是一个东西
- Mysql数据库
- Mysql数据库是一种c/s结构的软件:客户端/服务端,若想访问服务器必须通过客户端(服务器一直运行,客户端在需要适用的时候运行)(B/S主要是传递httP协议)
- 交互方式
- 1,客端连接认证:连接服务器,认证身份:mysql.exe-h(地址)P(端口)u(用户)p(密码)
- 2,发送SQL指令
- 3,服务器接受SQL指令:处理SQL指令:返回操作结果
- 4,客户端接受结果:显示效果
- 5,断开连接(释放资源):exit/quit/\q
- msyql数据库服务对象
- 没有办法完全了解服务器内部的内容:只能粗略的去分析数据库服务器内部的结构。
- 将MySQL服务器内部对象分成了四项,系统(DBMS)-->>数据库(DB)-->>数据表(Table)-->>字段(field)
- Mysql基本操作
- 将SQL的基本操作根据操作对象分类,分为:库操作,表操作(字段),数据操作
3、DDL:数据定义语言:库操作,增、删、改、查
- 增:创建库:create database [库名称] [库选项]
- 例子:create database school charset utf8mb4 collate utf8mb4_bin;
- 库选项:分为两个选项
- 字符集:charset/characteet set 具体字符集【数据存储的格式:常用的字符集GBK和UTF8,utf8mb4】
- GBK:2个字节一个中文
- utf8:3个字节一个中文
- utf8mb4:4个字节一个中文,支持emoji
- 字符集:charset/characteet set 具体字符集【数据存储的格式:常用的字符集GBK和UTF8,utf8mb4】
- 校对集:collate 具体校对集【数据比较规则】
- utf8mb4_general_ci :大小写不敏感
- utf8mb4_bin:大小写敏感(存拼音,日文)
- 库选项:分为两个选项
- 注意:
- 1、创建库不能使用关键字(已经被使用的字符)或者保留字(将来可能用到)
- 2、如果要使用关键字和保留字,可以使用【` `】括起来
例如:create database `database` charset utf8mb4; - 3、中文数据也可以的,但是有前提条件:保证服务器能够识别(建议不用)(也就是告诉服务器当前的编码格式)
例如:create database 中国 charset utf8mb4;
- 创建库之后发生了什么?
- 1、数据库系统中,增加了对应的数据库信息
- 2、会在保存的数据库的 文件夹下:/data/mysql/data ,创建一个对应的数据库名字的文件夹
- 3、每个数据文件夹下都有一个opt文件:保存了库选项【字符集】【校对集】
- 例子:create database school charset utf8mb4 collate utf8mb4_bin;
- 查:看数据库:
- show databases; -- 查看所有数据库
- 查看指定部分的数据库:模糊匹配
- show database like 'pattern' --pattern是匹配模式
- %:标识匹配多个字符
- _:匹配单个字符
- 查看数据库创建语句
- show create databases [数据库];
- 创建的数据库语句,数据库会进行优化
- 改:数据库
- 更改数据库名字
- 库选项:字符集和校对集(校对集依赖字符集)
- alter databse [库名称] [库选项]
- 删:删除数据库
- drop database [库名称]
- 注意
- 删除数据库后,数据库中所有的表,都会不见了
- 在对应的数据存储的文件夹中:数据库名字对应的文件也被删除(级联删除:里面的数据表全部不见了)
- 数据库删除不是闹着玩的,不要随意删除,应进行备份后在删除(数据不可逆)
- 数据库定义规范
- 库名使用小写字符
- 库名不能以数字开头
- 不能是数据库内部的关键字
- 必须设置字符集
4、DDL:数据库定义语言:表操作,增、删、改、查
- 增:新增数据表
- 格式:create table [if not exists] 表名(
- 字段名称 数据类型,
- 字段名称 数据类型
- )[表选项]
- [if not exists]:如果表明存在,那么就创建,否则不执行创建的代码:检查功能
- 表选项:
- 字符集:charset/character set 具体字符集:--保证表中数据存储的字符集
- 校对集:collate 具体校对集
- 存储引擎:engine 具体的存储引擎(innodb 和 myisam)
- 例子:方案一,指定文件在那个数据库下,创建表格
- 方案二,隐式的指定表所属数据库:先进入到某个数据库环境,然后这样创建的表自动归属到某个指定的数据库
- use [库名称] -- 进入当前的仓库中
- use [库名称] -- 进入当前的仓库中
- 方案三:创建和banji1中一样的表结构
- 创建表的规范
- 表名小写字母,不能数字开头
- 不能是保留字符,使用和业务有关的表名
- 选择合适的数据类型及长度
- 每个列设置 NOT NULL + DEFAULT .对于数据0填充,对于字符使用有效字符串填充
- 表必须设置存储引擎和字符集
- 主键列尽量是无关联数字列,最好是自增长
- enum类型不要保存数字,只能是字符串类型
- 创建表后数据存储目录
- 存储引擎:Myisam
- .frm文件:保存了每个表的元数据,包括表结构的定义
- .MYD文件:数据信息文件,存储表的数据文件
- .MYI文件:索引信息文件,存储表数据文件中任何索引的数据树
- 存储引擎:innodb
- .frm文件:保存了每个表的元数据,包括表结构的定义
- .ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per_table = 1)产生的存放该表的数据和索引的文件。
- .opt文件:存储的校对集和字符集
- 在对应的数据库会形成对应的表,表结构文件
- 存储引擎:Myisam
- 查:查看数据表
- show tables; --查看所有的表
- show tables like "pattern" --模糊匹配:查看部分表
- show create table [表名] -- 查看表的创建语句
- des/descibe show columns from class --查看表结构:查看表中字段信息
- 改:修改数据表
- 修改表名 [rename table 老表名 to 新表名]
- 修改表选项:字符集、校对集、存储引擎
- 修改字符集、校对集:[ alter tabel 表名 charset 字符集 collate 校对集]
- 修改存储引擎:[alter table 表明 engine 引擎]
- 修改字符集、校对集:[ alter tabel 表名 charset 字符集 collate 校对集]
- 对字段进行修改:增、删、改、查
- 新增字段:[alter tabel 表明 add column 列 列属性 位置]
- 位置:字段名可以存放表中的任意位置
- frist:放在第一列
- after :放在id列之后
- 修改字段:修改通常是修改属性或者数据类型
- 格式:alter table 表名 modify 字段名 数据类型 [属性] [位置]
- 格式:alter table 表名 modify 字段名 数据类型 [属性] [位置]
- 重命名字段
- 格式:alter table 表明 change 旧字段 新字段名 数据 类型 [属性] [位置]
- 格式:alter table 表明 change 旧字段 新字段名 数据 类型 [属性] [位置]
- 删除字段
- 格式:alter table 表明 drop 字段名
- 格式:alter table 表明 drop 字段名
- 新增字段:[alter tabel 表明 add column 列 列属性 位置]
- 删:删除数据表
- 格式: drop table 表明1,表明2 …… ; -- 可以一次删除多张表格,用逗号隔开
- 删除数据库:
- 1、在应的数据的数据库,没有了对应的表
- 2、在Linux中对应的表,文件也会被删除
- 格式: drop table 表明1,表明2 …… ; -- 可以一次删除多张表格,用逗号隔开
- 修改表名 [rename table 老表名 to 新表名]
5、DML:对数据的增、删、改、查
- 增:增加数据
- 方案一:【最偷懒】给全表字段插入数据,不需要指定字段列表:要求数据的值出现的顺序必须与表中设计的字段出现的顺序一致:凡是非数值数据,都需要使用引号(建议是单引号)包裹
- 格式:insert into 表名 values (值列表),(值列表),……(值列表) ; -- 可以一次性插入多条记录
- 格式:insert into 表名 values (值列表),(值列表),……(值列表) ; -- 可以一次性插入多条记录
- 方案二:【最规范:针对性的数据录入】给部分字段插入数据,需要选定字段列表:字段列表出现的顺序与字段的顺序无关;但是值列表的顺序必须与选定的字段的顺序一致
- 方案一:【最偷懒】给全表字段插入数据,不需要指定字段列表:要求数据的值出现的顺序必须与表中设计的字段出现的顺序一致:凡是非数值数据,都需要使用引号(建议是单引号)包裹
- 查:查看数据
- 查看所有的数据:select * from 表名;
- 查看表中指定字段的数据:select 字段1,……,字段2,from 表名
- 查看所有的数据:select * from 表名;
- 改:更新数据
- 格式:update 表名 set 字段 = 值 [where 条件] ;--建议都有where : 要不是全表更新数据,指定的字段数据
- 格式:update 表名 set 字段 = 值 [where 条件] ;--建议都有where : 要不是全表更新数据,指定的字段数据
- 删:删除数据【生产中,屏蔽掉delete,用update取代delete】
- 格式:Delete from 表名 [where 条件];--建议都加where :要不全表数据都会删除
- 格式:Delete from 表名 [where 条件];--建议都加where :要不全表数据都会删除