MySQL

数据库

  • 数据库概念:存储数据的仓库,是一种的特殊的文件,存储这需要的数据

  • 数据存储

    以前记录数据:绳结记事
    后来记事:图书
    缺点:不易保存,备份困难,查看不变
    现代化保存:---文件,文件打开,加载消耗内存,比较慢
    
    数据库保存
    读写速度高,容易扩展
    
  • 主要有三大范式:

    (1)确保每列保持原子性(即 数据库表中的所有字段值是不可分解的原子值);

    (2)确保表中的每列都是和主键相关(表 中只能保存一种数据,不可以把多种数据保存在同一张表中);

    (3)确保每列都和主键直接 相关,而不是间接相关(在一个数据库表中保存的数据只能与主键相关)。

  • mysql安装配置

    1.解压到本地目录,复制D:\下
    2.在D:\mysql-8.0.19-winx64添加配置文件 my.ini
     注意:将安装路径改为自己的路径,文件类型是ascii,默认保存格式是utf-8
    3.添加环境变量,将D:\mysql-8.0.19-winx64\bin,添加到环境变量,注意英文分号隔开
    4.mysqld --initialize--insecure --user=mysql,会多一个data目录
    5.以管理员身份安装服务, mysqld --install,使用services.msc查看服务
    6.启动服务 net start mysql  ,如果重启服务,报系统找不到文件
    修改注册表regedit-->HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services-->mysql,imagepath修改路径为自己的MySQL安装路径
    mysql -uroot -p,回车两次
    7.修改密码:进去mysql
    

alter user "root"@"localhost" identified with mysql_nativepassword by "root"


### 数据库操作

- SQL语句

- SQL数据查询语言,select
- DML数据操作语言,对数据进行增加,删除,修改,insert,delete,update
- DDL数据定义语言,对数据表的管理 创建表create,drop

- 查看数据库

show databases;


- 使用数据库

use 数据库;


- 查看当前使用的数据库

select database();


- 创建数据库

create database 数据库名 charset=utf8;
create database python;


- 删除数据库

drop database 数据库名;


- 其他常见命令

查看状态:status;
查看当前时间:select now();
查看当前用户:select user();
查看版本:select version();




数据表操作

- 整个excel文件好比一个数据库,excel中的sheet就是数据表

- 核心元素
- 数据行 (记录)
- 数据列(字段)
- 数据表(数据行的集合)
- 数据库(数据表的集合)

- 数据类型

数值型:
int 整型
decimal(M,D)
decimal(6,1) -99999.9-999999.9
float()
日期型:
date年月日
datetime 年月日时分秒
字符串型
char() 0-255字节 定长字符串 手机号
varchar() 0-65535字节 不定长字符串 姓名,家庭住址
text()长文本数据
经常变化的字段用varchar
直到固定长度的用char
能用varchar就不用text


- 查寻数据表

show tables;


- 查看表结构

desc 表名


- 创建表结构

create table 表名(
列名 数据类型 约束,
列名 数据类型 约束)

创建了一个名称为 employee 的雇员表
create table employee(
id int auto_increment primary key comment "职员编号",
emp_name varchar(50) comment "职员姓名",
hirdate datetime comment "入职时间");


- 修改表--增加字段

alter table 表名 add 列名 类型
例:
末尾增加一列 地址
alter table employee add address varchar(50);
指定位置增加一列 生日,emp_name列后增加
alter table employee add birthday date after emp_name;
开头位置增加列 ,开头增加编号
alter table employee add empid int first;


- 修改表--删除字段

alter table 表名 drop 列名;
例:
删除 empid列
alter table employee drop empid;


- 修改表--修改字段

设置默认值
alter table 表名 alter 列名 set default 数据;
重命名修改列
alter table 表名 change 旧列名 新列名 类型和约束
不重命名修改列
alter table 表名 modify 列名 类型和约束
例:
给地址一个默认值
alter table employee alter address set default "广州";
修改emp_name的类型为varchar(100)
alter table employee modify emp_name varchar(100);
修改emp_name的名称为name,类型varchar(100)
alter table employee change emp_name name varchar(100);

重命名数据表
rename tabel 旧表名 to 新表名
修改employee表名为emp
rename table employee to emp;


- 删除表

drop table 表名;
drop table emp;


- 查看建表语句

show create table 表名;
show create table employee;


**数据表约束** 

表约束,就是一种对数据格式和数据内容的限制,在数据库标准查询语言 SQL 中,定义了通 

用约束规范:
主键约束:标注数据表中每条记录都是唯一的标识,通过关键字 primary key 添加
外键约束:标注当前数据表和其他数据表之间的关联关系,通过关键字 foreign key 添加 (多表关系时具体讲解)

唯一约束:标注当前字段数据的唯一性,通过关键字 unique 添加

默认约束:标注当前字段默认数据,通过关键字 default 添加

非空约束:标注当前字段默认数据不能为空,通过关键字 not null 添加

自增约束:标注当前字段数据默认+1 一般配合主键使用,通过关键字 auto_increment添加

无符号:主要用于数值类型,无符号代表为正数,unsigned


- 数据 CRUD

- create创建,retrive读取,更新update,删除delete
- 分别对应了数据库中的 insert,select,update,delete

- 创建表和数据

  ```
  创建职员表:
  create table employee (
  empno int auto_increment primary key comment "人物编号",
  empname varchar(50) comment "人物名称",
  nickname varchar(50) comment "昵称",
  job varchar(50) comment "工作岗位",
  mgr int comment "上级编号",
  hirdate date comment "入伙时间",
  salary int comment "薪水",
  comn int comment "奖金",
  deptno int comment "所属部门");
  
  创建部门表:
  create table department(
  deptno int auto_increment primary key comment "部门编号",
  deptname varchar(50)  comment "部门名称",
  location varchar(50)  comment "部门地点");
  ```

- 一、增加

  - 全列插入:值的顺序和表中的字段顺序对应

  ```
  insert into 表名 values(...)
  insert into department values(10,"*","梁山本部");
  insert into department values(20,"近卫","梁山本部");
  insert into department values(21,"军委1部","梁山本部");
  insert into department values(22,"军委2部","梁山本部");
  insert into department values(23,"军委3部","梁山本部");
  insert into department values(30,"财务部","梁山本部");
  insert into department values(40,"参谋部","梁山本部");
  ```

  - 部分列插入:值的顺序和给出的列的顺序相匹配

  ```
  insert into 表名(列1,列2) values(值1,值2)
  insert into department(deptno,deptname,location) values(50,"后勤部","梁山本部");
  insert into department(deptno,deptname,location) values(60,"军情部","梁山本部");
  ```

  - 上面的语句可以一次向表中插入多行数据,这样可以减少与数据库的通讯

  ```
  insert into 表名 values(值1..),(值1)
  insert into department values(70,"迎宾部","梁山本部"),(80,"刑罚部","梁山本部");
  
  insert into employee values(1, ‘宋江‘, ‘天魁星·及时雨‘, ‘头领‘, null,‘2015-11-8‘, 800, 200000, 1),
  (2, ‘卢俊义‘, ‘天罡星·玉麒麟‘,‘卢俊义‘, 1,‘2018-4-6‘, 800, 100000, 1);
  ```

  - 通过查询增加数据

    ```
    create table dept_his202005 select * from department where 1=2;
    insert into dept_his202005 select * from department; 
    ```

- 二、删除

  - 1.全表删除

  ```
  truncate table 表名 删除表中的所有数据
  delete from 表名
  create table e1(
  	id int auto_increment primary key comment "职员编号",
  	hirdate datetime comment "入职时间");
  create table e2(
  	id int auto_increment primary key comment "职员编号",
  	hirdate datetime comment "入职时间");
  ```

  - 2.指定条件删除

  ```
  delete from 表名 where 条件
  例:删除迎宾部
  delete from department where deptname="迎宾部";
  ```

  - 指定删除的数量

  ```
  一次删除5条数据
  delete from dept_his202005 limit 5;
  ```

- 修改

  UPDATE 语句可以针对表中的数据进行条件修改,在修改过程中条件一定要明确,避免误伤 

  其他数据导致产生垃圾数据。

  ```
  update 表名 set 列1=值1,列2=值2 where 条件;
  update department set depname="忠义堂" where deptno=10;
  ```

- 查询

  单表查询

  1.1 全表查寻

  ```
  select * from employee;
  ```

  1.2 指定字段查询

  ```
  查询职员表中所有职员姓名和入职时间
  select empname,hirdate from employee;
  ```

  1.3剃重查询

  ```
  查询所有的职位
  select distinct job from employee;
  ```

  1.4单条件查询

  ```
  查询奖金大于10000的职员
  select * from employee where comn>10000;
  ```

  1.5多条件逻辑查询   and,or

  ```
  查询奖金大于10000并且职位是骑兵头领的职员
  select * from employee where comn>10000 and job="头领";
  查询奖金大于10000或者职位是骑兵头领的职员
  select * from employee where comn>10000 or job="骑兵头领";
  ```

  1.6范围查询  between..and     in

  ```
  查询奖金大于8000-10000的职员
  select * from employee where comn between 8000 and 10000;
  查寻岗位是头领,骑兵头领,五虎上将的职员
  select * from employee where job in("头领","骑兵头领","五虎上将");
  ```

  1.7空值查询  is null

  ```
  查看没有上级的员工
  select * from employee where mgr is null;
  ```

  1.8 模糊查询

  ```
  职级为头领的职员
  select * from employee where job like "%头领";
  ```

MySQL

上一篇:Oracle cloud control 12c 的启动与关闭


下一篇:python学习笔记12:操作mysql模块