![75839f30bf3981ed7fb7a1a257379221.png](https://i-blog.csdnimg.cn/blog_migrate/9e21c1128b917aff8a5d138529901645.jpeg)
啊。。。。。昨日没更新,昨日只顾着去看奥特曼了。奥特曼也太好看了!!!
啊。。。。。前日没更新,前日只顾着去玩狼人杀了。狼人杀也太好玩了!!!
![25cd9b0707382904b7077acc98d86f49.png](https://i-blog.csdnimg.cn/blog_migrate/b0dffbf185a18d19b7f501979e6c8950.jpeg)
正文分割线
一、安装MySql
百度搜索安装MySql就行,我装得是5.3.
二、数据库小知识
1、数据库分类:关系型数据库和非关系型数据库
数据库分类 | 数据之间的关系 | 数据库举例 | 结构 | 用法 | 储存 |
---|---|---|---|---|---|
关系型数据库 | 专注于数据与数据之间的关系,或者表与表之间的关系 | MYSQL Oracle SQLServer(微软) DB2(微软) pgSQL | 表和表的结构 | 编写SQL语句 | 更多以文件的形式来进行储存 |
非关系型数据库 | 不关注数据和数据之间的关系,它更看重数据的储存 | Redis Memcache HBase MongoDB | key-value | 不需要编写SQL语句 | 更多是以内存为主,文件为辅 |
2、表
表是专门用来放置数据的一种文件,有点像Excel表格,表中的数据以行和列来进行储存。
3、SQL结构化查询语言
结构化查询语言(Structured Query Language),它跟JAVA一样,同样是一种编程语言,只不过它是专门用来和关系型数据库进行交互的一种语言。
![95fbb3030110c669c98514910bac8ac8.png](https://i-blog.csdnimg.cn/blog_migrate/119b469975b2c8593ab9b2b3187cd6d8.jpeg)
4、RDBMS
Relational Database Management System (关系型数据库管理系统)
这种管理系统的责任:负责对数据库中的表进行 数据的读写
我们现在常用的说法: 数据库 等于 RDBMS
也就是:MYSQL ORACLE DB2 SQLSERVER ……
![79792b97dffc0a1f6e15d3d46f822c9b.png](https://i-blog.csdnimg.cn/blog_migrate/a1e2a4d93b5c848ce8bb4bd38c676258.jpeg)
5、储存引擎
数据库的储存引擎就像汽车中的引擎一样,储存引擎是驱动数据库进行储存的发动机一样。它决定了数据如何储存,如何获取,如何控制事务,如何控制外键等一系列的功能
那么在MySQL中常见的储存引擎:InnoDB和Mylsam两者有什么区别?其中的外键约束和事务将在后面的内容介绍
储存引擎 | 表的储存方式 | 数据库事务 | CRUD(增删改查)性能 | 外键约束 |
---|---|---|---|---|
InnoDB | 将一张表划分为2个文件:XXX.frm (表的表结构文件) XXX.ibd (数据和索引文件) | 支持 | 低(相对) | 支持 |
MyIsam | 将一张表划分为3个文件:XXX.frm (表的表结构文件) XXX.MYD (数据文件) XXX.MYI (索引文件) | 不支持 | 非常高(相对) | 不支持 |
6、SQL语句的4个分类:把SQL语句分成了4种
DDL数据库定义语言:负责数据库的创建,修改,删除,设置表结构、存储过程和视图
DML数据库操作语言:数据库表的新增,修改和删除
DQL数据库查询语言:查询表中的数据
DCL数据库控制语言:创建管理用户,给用户授权
7、SQL语句标识符(可以理解为Excel中首行的标题)的硬性命名规则
首字符不能是数字和符号,除了下划线(_),@,#以外。
后续字符不能嵌入空格或其他字符,字符只能用下划线(_),@,#,$。
不能使用SQL的关键字
SQL语句,不区分大小写
8、软性书写规则(就是不这样写程序也可以执行,不过最好这样写)
所有单词都小写,单词之间使用_进行分割
如遇到一些关键字,需要作为字段名,需要使用 TAB键,上方的波浪键进行转义
见名知意
合法的例如:user_name login_name gender age
三、SQL数据类型
1、数值类型
![d0202095f55daf228c6bfe6d465d7c5a.png](https://i-blog.csdnimg.cn/blog_migrate/458bfb0492ca515d274b06769d550338.jpeg)
2、时间和日期类型
![488fa98433b083d98f0eb69fc761a7c8.png](https://i-blog.csdnimg.cn/blog_migrate/331e9b223fb3624430ef10063d9db1e9.jpeg)
3、字符串类型
![138f941c1fdb0958a2a16dfa23cd4371.png](https://i-blog.csdnimg.cn/blog_migrate/a2311bf56e0f6ca1dfce9ba528581f71.jpeg)
注意:char 和 varcher 是常用的2种字符类型
char(10) 的特点:数据库需要提前在硬盘上 分配 10个字符的空间,不管10个字符的空间有没有内容,因为它是定长字符
varchar(10)的特点:有多少个字符就分配多少空间,但是最大空间不得超过10,因为它是可变长度的字符类型! 一个中文,占2个字节,一个英文,占1个字节
四、DDL语言(数据库定义语言)
1、下面就进行数据库SQL语句的实战:请确保你已经安装好数据库了,一般来说高版本都会兼容低版本的,所以我用5.6,假如你使用这个及其以上的应该都没问题。
安装完成以后打开MySQL的应用程序
![f2635b3c69d4180d702ef5b98bf58df6.png](https://i-blog.csdnimg.cn/blog_migrate/4323dc99076f5dfbaff27998759ef18e.jpeg)
点开以后输入密码就行,输入错误就会自动退出。正确的话如图所示
![e71bf13b7ed7568204bb20acf8dcf29b.png](https://i-blog.csdnimg.cn/blog_migrate/7fb421399267e7db5017c152b8df80f2.jpeg)
然后你就可以开始输入SQL的指令了。
2、数据库的创建
create database 数据库名称;
create database woniuxy;
//数据库默认采用latin (拉丁字符集) 中文放进去,就会乱码!可以在创建数据库的时候设置字符集
create database 数据库名称 character set 'UTF8MB4'
![a37d63436eb70f41622dc85597a33523.png](https://i-blog.csdnimg.cn/blog_migrate/4f40f0b1af94d0e27f23b3a197de948f.jpeg)
一个语句必须以;结尾才算结束,要不然就只是换行不会执行。一般我们创建数据库的时候都会顺便设置编码集,现在用UTF8MB4是现在比较常用的,相当于Java中的UTF-8。数据库就相当于文件夹,数据库中的表就相当于excel文件,我们平时使用得是表文件。数据库相当于存放表文件的文件夹。
3、显示所有数据库
show databases
![feeea2bcaf9f4727618d2c107533cc39.png](https://i-blog.csdnimg.cn/blog_migrate/5e3f6682b803e54b632806009c1d9fa4.jpeg)
我有这么多,但是假如你刚装的MySQL的话。可能没这么多。
4、修改数据库的编码集
alter database 数据库名称 character set 'utf8mb4';
alter database woniuxy character set 'utf8mb4';
![d778b6dca3d2f3f15db166a13529790d.png](https://i-blog.csdnimg.cn/blog_migrate/7808e4ce99783fd1a7a2a62ce19fbc7b.png)
这里用大小写都是一样的效果,所以才说尽量用小写,不过你的SQL关键字可以用大写用来和其他变量进行区分。
5、删除数据库
drop database 数据库的名称;
drop database j75;
![d3ef00231a792a0788a4a8202a41642a.png](https://i-blog.csdnimg.cn/blog_migrate/ce1fc31ed68aaae4fd354d718c876d5c.png)
删除数据库会把这个数据库中所有的表都删除了,这个操作非常危险,一般说的删库跑路就是这个意思。
6、操作表的时候要先选择数据库
use 数据库的库名;
use woniuxy;
![bc0a0aa051fa0091640009e06d776daa.png](https://i-blog.csdnimg.cn/blog_migrate/38c9daa2faeccde13df9df3e1302b9ac.jpeg)
先切换到该数据库中再进行表文件的操作。
7、创建数据库的表
create table 表的表名 (字段列表); //字段列表:字段名 数据类型 字段约束
create table goods_info (
id bigint primary key auto_increment,
goods_name varchar(60) not null,
goods_type int not null,
goods_price decimal(10,2) unsigned not null,
goods_desc varchar(200) null
);
![85da009d6a12f512b6c7e53ad65ba608.png](https://i-blog.csdnimg.cn/blog_migrate/cfda2c7d5981f5afc38c2c6c14c48ff6.jpeg)
看不懂其中的端倪?别担心,后面会一一讲的。
8、表中添加1列
alter table 表的表名 add column 新的字段名 数据类型 [字段约束];
alter table goods_info add column made_day date comment '生产日期';
![9942414abc8f9e4e03322a8ad63a3579.png](https://i-blog.csdnimg.cn/blog_migrate/0de2a18d07230c68041d6a43bd60c989.png)
9、删除一列
alter table 表的表名 drop 列的列名;
alter table goods_info drop made_day;
![dc1989cc96ccc24d13305b6307c60b20.png](https://i-blog.csdnimg.cn/blog_migrate/870a24d57e63560b4ca437d3c29e6776.png)
当你语法输错了就会出现上面的提示,下面的那个写对了就会提示OK
10、删除表
drop table 表的表名;
drop table goods_info;
![e9a1239e4ef310784da936700260705a.png](https://i-blog.csdnimg.cn/blog_migrate/79d9109066677e780c9e11863d098bdb.png)
这是删除整个表,删除操作一定要谨慎!
五、数据库字段
1、字段约束:对字段的值做出某些要求。这里的字段约束就是上面建表时的字段约束。当你进行约束之后,假如添加的数据不符合字段约束就会报错。
主键约束:每个表中都需要有一列是唯一的,好比:你们的书,每一页都有一个唯一的页码。通常该列固定为:id列 用:Primary Key
非空约束:表示某一列的值,不能为NULL 用:NULL NOT NULL
唯一约束:表示某一列的值,不能重复 例如:登陆名 UNIQUE KEY
自增约束:表示某一列的值,需要自动增长,但是只能放在数值列上 AUTO_INCREMENT
外键约束:表示某一列的值,可能是其他表的主键 用:foreign key
非负约束:表示某一列的值,不能是负数 用:unsigned
默认约束:表示某一列的值,可以有默认值 用default
字段约束:[NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY]] [PRIMARY KEY]
[FOREIGN KEY] [UNSIGNED] [COMMENT ‘注释的内容’]
2、主键的要求:表中至少应该有1个主键,原因是我们要保证 实体的完整性
主键的特点:不具备任何的业务含义,主键的内容一定不能改变(稳定性),主键不是越多越好,有1-2就好 当然一般来讲都是只有1个.
例如:
身份证能不作为主键?电话号码能不作为主键? 不能
3、实体的完整性
讲的是我们存入到数据库中的 每个Java实体都是完整,而且不重复的个体;就是我们得保证每一行总有一些东西是不一样。这样我们后面寻找数据的时候才能找得到。
保证实体完整性的办法:加主键k,在某些字段添加 唯一约束
4、列的完整性
将的是如何保证每一列都是具有一定的含义的,是完整,不是NULL的。就是保证每一列都有数据。
保证列完整性的办法:给列加非NULL约束,给列添加默认约束 比如:密码 默认值 123456
5、数据库三大范式(这里的文字有一些抽象,我引用了这位大佬的解释)
数据库设计三大范式 - Ruthless - 博客园www.cnblogs.com![57195ebf7453bb65e2dab7af7c1ca4a9.png](https://i-blog.csdnimg.cn/blog_migrate/998e2bb4c358b4d994edbc6798967153.png)
第一条:列具有原子性 列一定要划分到不可划分(最小)为止
eg:收货地址(address) 四川省成都市高新区孵化园9999号楼99999楼99999号
在设计数据库的时候,我们不能笼统地设置收货地址,而是应该分为省 市 区 街道 详细地址。
第二条:表中所有列,都必须与主键有一定的关系 (建立在:遵循第一范式的基础上)
主键:代表的实体
第三条:表中所有列,都必须与主键有直接相关(而不是间接相关) (建立在:遵循第一,二范式的基础上)