目录
一、数据库
按照数据结构来组织、存储和管理数据的仓库。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
数据对于公司来说是最宝贵的财富,程序员的工作就是对数据进行管理,包括运算、流转,存储、展示等,数据库最重要的功能就是存储数据,长期保存数据。
二、MySql
1、概念
(1)MySql是一个关系型数据库管理系统,瑞典的公司研发,被Oracle收购。
(2)MySql使用了SQL语言。
(3)MySql分为社区版和商业版,体积小、速度快、成本低、开源。
(4)MySQL保存数据的模式
① 创建一个数据库。
② 在数据库下保存多张表。
③ 在每张表中保存多条数据。2、基本操作
(1)登录MySQL
①直接在MySQL文件夹中,找到MySQL命令行客户端进行登录
②找到MySQL的安装目录,到bin目录下,进入cmd命令控制台
登录命令
mysql -h 127.0.0.1 -p3306 -uroot -p
也可以简写登录命令,退出命令是exit。
mysql -uroot -p
(2)创建一个数据库
MySQL是一个数据库管理系统,管理多个数据库。
①第一种创建命令(用的比较多)
create database 数据库名;
②第二种创建命令(用的比较少,基本不用)
create schema 数据库名;
比如创建一个jiruan的数据库
(3)查看所有的数据库
查看所有数据库的命令
show databases;
(4)使用数据库
使用数据库的命令
use 数据库名
3、SQL语言
SQL是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存储数据以及查询、更新和管理关系型数据库系统。
4、SQL分类
(1)DCL ( Data Control Language )
数据控制语言:用来定义访问权限和安全级别。
(2)DDL ( Data Definition Language)数据定义语言:用来定义数据库对象:库,表,字段(列)。功能:创建、删除、修改库和表结构。
(3)DML ( Data Manipulation Language)
数据操作语言:用来定义数据的增删改记录。
(4)DQL ( Data Query Language)
数据库查询语言:用来查询记录。
(5)TCL ( Transition Control Language )
事务控制语言:用来管理事务。
三、DCL---数据控制语言
1、创建用户
(1)创建一个用户,该用户只能在指定的ip地址上登录MySQL
create user 用户名@IP地址 identified by '密码';
(2)创建一个用户,该用户可以在任意的ip地址上登录MySQL(任意地址都能登录的方法,用到一个通配符%,表示任意地址)
create user 'moon'@'%' identified by 'root';
创建成功
登录查看
2、修改密码
(1)-- 5.7版本
需要使用passwod对密码进行加密
set password for moon@'%' = password('新密码');
(2)-- 8.0版本
版本直接赋值
set password for moon@'%' = '新密码';
3、给用户授权
(1)常用权限
给指定用户在指定数据库上赋予指定权限, 权限有很多,列举几个常用的:
①create 可以创建数据库
②select 查询数据
③delete 删除数据
④update 修改数据
⑤insert 插入数据
(2)使用语法
注意:这里用的是着重符 ` ,不是单引号 ' 。
grant `限1,权限2,....权限n` on 数据库名.* to 用户名@IP地址
4、撤销授权
使用语法
revoke 权限1,....权限n on 数据库.* from 用户名@IP地址
5、查看权限
使用语法
show grants for 用户名@IP地址
6、删除用户
使用语法
drop user 用户名@IP地址
四、 DDL (数据定义语言)
DDL主要是用在定义或改变表的结构。
1、表
用来存储数据的对象,是有结构的数据的集合。
●行:一行即为一条数据,数据库一 共有多少条数据,实际上就是有几行数据。
●列:一列即为一个字段,数据库一共有多少个字段,实际上就是有几列数据。|2、创建表
在关系型数据库中,我们需要表名和列名,同时设定。在创建表的时候,建议字段名使用着重符“ ` ”。
create table 表名( 字段名1(列名) 类型(长度) 约束条件, 字段名2(列名) 类型(长度) 约束条件, 字段名3(列名) 类型(长度) 约束条件, …… );
3、数据类型
(1)整型
MySQL数据类型 含义(范围) tinyint 1字节,范围:-128~127 smallint 2字节,范围:-3W多~3W多 mediumit 3字节,范围: int 4字节,范围:-21个亿~21个亿 bigint 8字节,范围: 在整型中,我们默认使用的是有符号的。我们可以使用unsigned关键字,定义成无符号类
型,tinyint unsigned的取值范围0~255。
如果长度需要配合zerofi11 :int(4) unsigned zerofi1l;
说明:上述的int长度为4 ,如果设置了zerofill ,如果数据是1 ,最终存到表格中的数据格式为
0001 , 0010。(2)浮点型
MySQL数据类型 含义(范围) float(m,d) 4字节,单精度浮点型, m总长度, d小数位。 double(m,d) 8字节,双精度浮点型,m总长度,d小数位。 decimal(m,d) decimal是存储为字符串的浮点数,对应我们java中的BigDecimal。 比如定义一个float(5,3) :
●插入123.45678 ,最后查询得到的结果就是99.999 ;
●插入12.3456789 ,最后查询得到的结果就是12.346 ;
所以, 在使用浮点型的时候,要以插入到数据库中的实际结果为准。(3)字符串类型
MySQL数据类型 含义(范围) char(n) 固定长度,最多255个字符。 varchar(n) 可变长度,最多65535个字符。 tinytext 可变长度,大255个字节。 text 可变长度,最大65535个字节。 mediumtext 可变长度,最大16MB。 longtext 可变长度,最大4GB。 (4)几种字符串类型的区别
① char和vachar的区别:
●char类型是[定长]的类型,当定义char(10) ,输入的时"123" ,他们占用的空间依然是10个
字符。当输入的字符如果超出指定的范围, char会截取超出的字符。而且,当存储char,
MySQL会自动删除输入字符串末尾的空格。
●char适合存储很短的, -般固定长度的字符串。例如, char非常适合存储密码MD5值,因为
它是一个定长的值。 对于端的列, chartbvarchar在存储空间上效率更高。
●varchar(n)类型用来存储可变长度,长度最大为n个字符的可变长度的字符串数据。比如
varchar(10) ,然后存储"abc" ,实际就是存储了3个字符。
●char类型每次修改的数据长度相同,效率更高。varchar ,每次修改的数据长度如果不同,效
率更低。
②varchar和text区别:
●text不能设置默认值, varchar可以设置默认值。
●text类型,由于单表的最大行宽的限制,支持溢出存储,只会存放768字节在数据页中,剩余
的数据存储在溢出段中。
●一般我们都是用varchar.
4、日期类型
MySQL数据类型 含义(范围) date 3字节,日期,格式: 2022-08-15 time
3字节,日期,格式: 2022-08-15 datetime 8字节,日期时间,格式: 2022-08-15 10:55:40 timestamp 4字节,时间戳,毫秒数。 year 1字节,年份 5、建表约束
因为一张表要有多个列,数据库中的表不止有一张,建表约束说的就是我们应该如何规范表中的数据以及表之间的关系。
MySQL约束类型(约束名称) 描述 NOT NULL 非空约束 UNIQUE 唯一约束,取值不允许重复 PRIMARY KEY 主键约束(主关键字) , 自带非空,唯一、 索引 DEFAULT 默认值 FOREIGH KEY 外键约束,表和表之间的约束 (1)NOT NULL约束
CREATE TABLE `student` ( `stu_id` int, `stu_name` VARCHAR(50) NOT NULL, `gender` char(1) DEFAULT '男', `brithday` datetime, PRIMARY KEY(stu_id) );
(2)UNIQUE约束
create table `book` ( `id` int PRIMARY KEY auto_increment, `name` varchar(50) not null, `bar_code` VARCHAR(30) not null, `aut_id` int not null, UNIQUE(bar_code) );
(3)主键约束
create table `author`( `aut_id` int, `aut_name` varchar(50) not null, `gender` char(1) default '男', `country` varchar(50), `birthday` datetime, PRIMARY KEY(aut_id,aut_name) );
(4)外键约束
推荐配合主键去使用。有了这个约束,我们在向表中插入数据时,来源于另外一张表的主键
外键会产生的效果:
a.删除表的时候,如果不删除引用外键的表,被引用的表是不能直接删除。
b.外键的值必须来源于引用的表的主键字符。
create table `author`( `aut_id` int, `aut_name` varchar(50) not null, `gender` char(1) default '男', `country` varchar(50), `birthday` datetime, PRIMARY KEY(aut_id) );
create table `book` ( `id` int PRIMARY KEY auto_increment, `name` varchar(50) not null, `bar_code` VARCHAR(30) not null UNIQUE, `aut_id` int not null, FOREIGN KEY(aut_id) REFERENCES author(aut_id) );
6、查看表
(1)查看当前库的所有表
show tables;
(2)查看表结构
desc 表名;
7、对表的修改操作
前缀都是alter table 表名
(1)添加列
ALTER table author add (hobby varchar(20),address varchar(50));
(2)修改列数据类型
ALTER table author MODIFY address varchar(100);
(3)修改列名称和数据类型
alter table author change address addr VARCHAR(60);
(4)删除列
alter table author drop addr;
(5)修改表名
ALTER TABLE author RENAME `authors`;
(6)删除表
drop table if EXISTS `user`;
(7)添加主键(了解即可)
使用语法:
ALTER TABLE 表名 ADD CONSTRAINT 主键名 PRIMARY KEY 表名(字段名); //主键名的命名方式:pk_表名
使用示例:
ALTER TABLE `authors` ADD CONSTRAINT pk_authors PRIMARY KEY `authors` ( aut_id );
(8)添加外键(了解即可)
使用语法:
ALTER TABLE 从表 ADD CONSTRAINT 外键名 FOREIGN KEY 从表(外键字段) REFERENCES 主表(主键字段;) //外键名的命名方式:fk_从表_主表
使用示例:
ALTER TABLE book ADD CONSTRAINT fk_book_authors FOREIGN KEY book ( aut_id ) REFERENCES `authors` ( aut_id );
五、DML 数据操作语言
该语言来对表记录进行操作(增、删、改),不包含查询。
1、插入数据
(1)单个插入
INSERT INTO `authors` ( aut_id, aut_name, gender, country, birthday, hobby ) VALUES (4,'罗曼罗兰','女','漂亮国','1945-8-15','写字');
如果插入的是全字段,字段名可以省略。
INSERT INTO `authors` VALUES (5,'韩寒','男','中国','1984-8-15','赛车');
(2)批量插入
INSERT INTO `authors` VALUES (7,"李诞",'男','中国','1985-8-15','脱口秀'), (8,"史铁生",'男','中国','1967-8-15','绘画');
(3)注意
①在数据库中所有的字符串类型,必须使用引号。
②如果部分字段插入,必须列名和值要匹配。如果全字段插入,则列名可以省略。
2、修改数据
(1)修改某列的全部的值
update `authors` set aut_name = '郭小四',country='中国';
(2)修改特定行的数据
update `authors` set aut_name = '金庸',country='中国' where aut_id = 1;
(3)注意
3、删除数据
(1)全部删除
delete from `student`;
(2)根据条件删除
delete from `student` where stu_id = 8;
说明:通过delete这种删除方式删除的数据,主键如果是自动递增,会断档。
(3)截断(清空表)
TRUNCATE student;
说明:
truncate实际上应该属于DDL语言,操作立即生效,不能撤回。
truncate和delete都是删除数据,drop删除整个表。
truncate速度快,效率高,可以理解为直接删除整个表,再重新建立。
truncate和delete都不会是表结构及其列、约束、索引的发生改变。
六、TCL事务控制语言
1、Mysql的数据库引擎
(1)由MySQL中,只有使用了Innodb引擎的数据库才支持事务
(2)事务处理可以用来维护数据的完整性。保证sql语句要么全部执行,要么全部不执行。(3)发生在DML中,增删改
2、事务的四大特征ACID
(1)原子性A
一个事务,要么全部完成,要么全部不完成。
(2)一致性C
在事务开始之前和事务结束之后,数据库的完整性没有被破坏。
(3)隔离性Isolation
数据库允许多个事务同时对数据进行处理。每个事务之 间是相互隔离。
(4)持久性D
事务结束以后,对数据的增删改是永久性的。
术语:提交事务,回滚事务(事务回滚)
1、事务一旦提交,就不可能回滚。
2、当一个连接对象被创建时,默认情况下自动提交事务。.
3、关闭连接时,数据会自动提交事务。相关具体知识点请参考博客:
七、 MySQL数据库命名规则
1、数据库命名规范
采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,
命名简洁明确,多个单词用下划线'_'分隔,一个项目一个数据库,多个项目慎用同一个数据库
2、数据表命名规范
(1)采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线""__""组成,命名简洁明确,多个单词用下划线分隔
(2)全部小写命名,禁止出现大写
(3)禁止使用数据库关键字,如:name,time ,datetime,password等
(4)表名称不应该取得太长(一般不超过三个英文单词)
(5)表的名称一般使用名词或者动宾短语
(6)用单数形式表示名称,例如,使用 employee,而不是 employees
明细表的名称为:主表的名称+字符dtl(detail缩写)
例如:采购定单的名称为:po_order,则采购定单的明细表为:po_orderdtl
(7)表必须填写描述信息(使用SQL语句建表时)
3、数据库字段命名规范
(1)采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,命名简洁明确,多个单词用下划线'_'分隔
(2)全部小写命名,禁止出现大写
(3)字段必须填写描述信息
(4)禁止使用数据库关键字,如:name,time ,datetime password 等
(5)字段名称一般采用名词或动宾短语
(6)采用字段的名称必须是易于理解,一般不超过三个英文单词
(7)在命名表的列时,不要重复表的名称
例如,在名employe的表中避免使用名为employee_lastname的字段
(8)不要在列的名称中包含数据类型
(9)字段命名使用完整名称,禁止缩写
4、SQL语言编码规范
(1)所有关键字必须大写,如:INSERT、UPDATE、DELETE、SELECT及其子句,IF……ELSE、CASE、DECLARE等
(2)所有函数及其参数中除用户变量以外的部分必须大写
(3)在定义变量时用到的数据类型必须小写