(小白)MySQL基础学习001 20201006
历程
- 数据库分类
1、网络数据库
2、层级数据库
3、关系数据库
另外一种方式(基于存储介质):
1、关系型数据库(存储在磁盘中)
2、非关系型数据库(存储在内存中)
-
关系型数据库
关系数据结构、关系操作集合,关系完整性约束三部分组成
关系操作集合:如何来关联和管理对应的存储数据,SQL指令
关系完整性约束:数据内部有对应的关联关系,以及数据与数据之间有对应的关联关系
表内约束
表间约束 -
常见的关系型数据库
小型关系型数据库:Microsoft Access,SQLite
中型关系型数据库:SQL Server,Mysql(免费,用得最广)
大型关系型数据库:Oracle(大型用得多),DB2 -
SQL
结构化查询语言(Structured Query Language),简称SQL
DQL:数据查询语言,专门用于查询数据:代表指令为select/show
DML:数据操作语言,专门用于写数据:代表指令为insert,update,delete
TPL:事务处理语言,专门用于事务安全处理,mysql支持,但不是所有的语言都支持
DCL:数据控制语言,用于权限管理,代表指令为grant和revoke
DDL:数据定义语言,专门用于结构管理,代表指令create,drop,alter -
MySQL
开源免费
对PHP的支持最好
mysql中用的操作指令就是SQL指令
- MySQL是一种C/S结构:客户端和服务端
- 服务端对应的软件:Mysqld.exe
报错的原因是找不到net
通过查询知道:
https://blog.csdn.net/u012874209/article/details/56017296
通过mysql -u root -p进入
成功进入
教程方式:mysql -hlocalhost -uroot -p
使用mysql.exe的方式报错:
还是采用mysql -hlocalhost -P3306 -uroot -p 还是报错:
进入bin目录:
成功:
-
退出
Exit;
\q
Quit;以上三种方式都测试了,没问题
-
创建数据库
createDatabase 数据库名字 【库选项】
成功 -
库选项:数据库的相关属性
字符集:charset,代表着当前数据库下的所有表存储的数据默认指定的字符集(如果具体不指定,那么采用DBMS默认的)
校对集:collate,默认随字符集
成功!
-
显示数据库:show databases;
information_schema:保存数据库所有的结构信息(表,库)
mysql:核心数据库,权限关系
performance_schema:效率库 -
显示部分
show databases like “匹配模式”
_:匹配当前位置单个字符
%:匹配当前位置多个字符
获取以my开关的数据库
show databases like “my%”;
获取以m开头,中间不确定,但末尾以database结尾的数据库:
show databases like “m_database”;
这里的_只能代表一个
这样就搜不到了
用%即可
-
显示数据库创建语句:
show create database mydatabase;
并非是原始语句,而是加工过的语句 -
选择数据库
user mydatabase;
成功! -
修改数据库
修改数据库字符集(库选项)
mysql5.5之前可以改变数据库名称(rename),之后不可以了
alter database mydatabase charset gbk;
修改成功后:
db.opt里的信息就会被修改,一般情况下,有数据之后就不建议修改 -
删除数据库
drop database mydatabase;
- 创建数据表
create table 表名(字段名 字段类型 【字段属性】,字段名 字段类型 【字段属性】。。。)【表属性】
create table Class(
–字段名 字段类型
–
将表加入到数据库的方式:
1、在数据表加上数据库名字,用“.”连接,数据库.数据表
create table mydatabase2.class(
name varchar(10)
);
这样加之后,数据库依然不是使用状态,下一次操作依然需要进入
2、另一种方式就是先进入数据库,见第15条
-
表选项
与数据库选项类似
Engine,存储引擎,mysql提供的具体存储数据的方式,默认Innodb(5.5以前默认myissam)
Charset:字符集,只对自己表有效(级别比数据库高)
Collate:校对集 -
使用表选项
show create database mydatabase2;
进入数据库后
create table student2(name varchar(10))charset utf8;
- 复制已有的表结构
只复制表结构,数据不复制
create table 新表名 like 表名 //只要用数据库.表名,就可以在任何地方进行复制,也就是可以跨数据库复制
新建一个test数据库
create table teacher like mydatabase2.student;
- 显示数据表
新建一个表,会在对应文件夹下新建一些文件(文件数与引擎有关)
.frm代表结构文件
这个结构文件来自于innodb存储引擎,此引擎所有文件都存储在data下的ibdata1里
show tables;
匹配显示表:
show tables like “匹配模式”;
去mydatabase2里试试:
show tables like “%ss”;
- 显示表结构
显示表中所包含的字段信息(名字,类型,属性等)
Describe 表名
Desc 表名
show columns from 表名
describe class;
desc teacher;
show columns from student;
field:字段名
type:字段类型
null:是否允许为空
key:索引
default:如果不给值,那么默认为NULL
extra:额外属性
三种查看方式相同,所以一般desc最多
-
显示表创建语句
show create table student;
这里发现我的ENGINE:MyISAM,与教程里的不同
但我的mysql明明是5.5之后的,是5.7 -
mysql中多种语句结束符:
;与\g所表示的效果是一样的,都是字段在上排横着,下面跟对应的数据
\G字段在左侧竖着,右边跟着数据
show create table student\G
desc student\G
-
设置表属性
表属性指的是表选项:engine,charset,collate
alter table 表名 表选项【=】(可有可无)表属性
alter table student charset gbk;
show create table student\G
发现已经从utf8,改成了gbk
这里再试试把engine 改一下
alter table student engine InnoDB;
更改成功!
修改字符集影响不大,但在表有数据的时候,改engine等会有意想不到的影响
- 表前缀
数据库中数据表名通常有前缀:取数据库的前两个字母加上下划线
修改表名:
rename table student to my_student;
- 新增字段
alter table 表名 add[column]新字段名 列类型 【列属性】【位置first/after字段名】
desc my_student;
alter table my_student add column age int;
添加了一个年龄属性;
默认加到表的最后面;
字段位置:
first:在某某之前(最前面),第一个字段
after:在具体某一个字段后面;
alter table my_student add column id int first;
-
修改字段名:alter table 表名 change 旧字段名 新字段名 字段类型【列属性】【新位置】
原字段类型不会被延用,需要指定
alter table my_student change age nj int;
-
修改数据类型的属性
alter table my_student modify name varchar(20);
- 删除字段
alter table 表名 drop 字段名
alter table my_student drop nj;
- 删除表结构
drop table 表名【表名2。。。】:表示可以删除多个表 ,但是库的话是不能多个删除的
drop table class;
批量删除:
drop table teacher,my_student;