#MySQL的基本操作
#数据库是储存大量数据的,也是为了高效管理大量数据的,数据库是个管理软件
#最大的是数据库,数据库里边有表,表里边有行和列,数据库还有主键、外键、索引,表就像excel表格一样,从而用来设置格式大小和储存内容.(这些是我刚接触数据库第一天所了解到的东西)
从命令行进入数据库
// mysql -u root -p
然后正常情况会出现
//Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.24 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
这就是成功进入了数据库,然后再输入这个命令来查看你现在一共有多少个数据库
// show databases;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| shitaomeijiji |
| sys |
+--------------------+
5 rows in set (0.01 sec)
这是退出数据库
exit
本身这里面就自带四个数据库,最好别修改这些自带的,我现在也不知道为什么
以下是创建数据库,创建数据库的时候记得在后面加UTF-8(涵盖了地球上几乎所有地区的文字)
// create database 数据库名称;
//也就是:create database 数据库名 charset=utf8;
以下是删除数据库
// drop database 数据库名称;
以下是进入数据库
//use 数据库名称;
以下是看看数据库中有多少张表
// show tables;
如果没有的话,我们就需要用这个命令来创建一个表
create tables + 表名;
大概就像以下
CREATE TABLE students(
id INT,
name VARCHAR(20),
age INT,
address VARCHAR(10),
gender CHAR(5)
);
查看表的结构
//desc
查看表的所有数据
select * from +表名;
查看表的指定数据
select + 要查询的列名(字段名) + from + 表名
查看表特定满足数据的条件的数据
select + 要查询的列名(字段名) + from + 表名 + where + 条件
查询1-10之间的数据
select * from + 列表名 + where (字段名)>=1 and (字段名)<=10;
插入语句
insert into + 表名 + values(值)
插入多条语句
insert into + 表名 + (字段名) + values(值1),(值2),(值3)……
更新数据(也就是修改数据嘛)
update + 表名 +set + 字段名=新的内容 where + 条件
删除指定数据
delete from + 表名 +要删除的字段名字 + where + 条件
删除全部数据
delete form + 表名
truncate from + 表名
我们上面有的有where,where是个条件,后面跟的都是特定条件 就像if一样 满足或者不满足 执行
where后面可以跟的条件有
>
><
<> 这两个都是不等于 !=
=
and 且,与
or 或
not 非
between ... and ... 在...之间
in 在某些集合里面
模糊查找
_ 任意一个字母
% 0~n个字母
上面的一个下划线就代表在表理查找一个字母,增加多少下划线就增加几个查找的字母
select * from + 表名 + where name like '_';
查询以a开头的数据
select * from + 表名 + where name like 'a%';
查询第二个字母为a的数据
select * from + 表名 + where name like '_a%';
查询数据中包含的a字母的数据
select * from + 表名 + where name like '%a%';
我们还可以用正泽来配合使用
匹配以a开头以z结尾的字符
select address from students where name regexp '^a..z$';
添加新字段
alter table + 表名+ add +新加的字段名+ 类型
修改字段类型
alter table +表名+ modify +字段名+ 类型(30);
修改字段位置
alter table 表名 modify +需要交换位置的字段名+ 数据类型+ after behavior;
修改字段名
alter table +表名 + change +字段名+ 新的字段名+ 数据类型 ;
一、什么是SQL
* SQL是Structured Quevy Language(结构化查询语言)的缩写
* SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言
* 在使用它时,只需要发出'做什么'的命令,'怎么做'是不用使用者考虑的
二、sql功能分类
* DDL: 数据定义语言 用来定义数据库对象:创建库、表、列等
* DML: 数据操作语言 用来操作数据表中的记录
* DQL: 数据查询语言 用来查询数据
* DCL: 数据控制语言 用来定义访问权限和安全级别
还有去重复数据
select distinct name from +表名 ;
把查询结果进行运算,但必须是数值型
select * , 字段 1 + 字段2 from 表名;
在运算数值结果的时候为了好看和方便,在列的上面可以加个别名
SELECT *,yw+IFNULL(sx,0) AS total FROM score;
# 省略
AS SELECT *,yw+IFNULL(sx,0) total FROM score;
我们也可以让表像excel一样进行排序,比如升序和降序
select * from xxx order by xxx desc,id desc;
count的使用
查询表中xxx的出现次数
SELECT COUNT(*) FROM xxx;
sum的使用
select sum(列名)from + 表名
avg的使用
select avg(列名)from + 表名
查询最大和最小的
serect max(列名),min(列名)from 表名
分组查询
分组查询就是把一样的数据放在一起
select + 列名 + from + 表名 +group by + 列名
对两个同时进行分组
SELECT name,gender FROM employee GROUP BY gender,name;
select 列名,列名2,from +表名+ group by 列名2,列名
分别显示
SELECT gender,GROUP_CONCAT(name) FROM employee GROUP BY gender;
给表里添加主键和外建还有不为能空
主键⬇️ ,主键可以在字段名后面添加 还可以 在最后面结束前添加
字段名+primary key
具体的就是
CREATE TABLE 表名(字段名1 数据类型 primary key,字段名2 数据类型);
方式二:CREATE TABLE 表名(字段1 数据类型,字段名2 数据类型,primary key(要设置主键的字段));
添加外键
constraint 外键名 foreign key(p_id) references person(p_id)
联合主键
CREATE TABLE 表名(字段1 数据类型,字段2 数据类型,primary key(主键1,主键2));
唯一约束
unique
具体格式是:
CREATE TABLE students(
id INT primary key,
name VARCHAR(50) UNIQUE
)
自动增长,一般主键上用到这个
auto_increment
具体格式是:
REATE TABLE 表名(
字段名1 数据类型 primary key AUTO_INCREMENT,
字段2 数据类型 UNIQUE);
不为空
nut null
具体格式
CREATE TABLE stu(
id int primary key auto_increment,
name varchar(20) unique not null,
gender char(1) default '男'
)
默认约束值
default
具体格式
CREATE TABLE 表名(
字段名1 数据类型 primary key AUTO_INCREMENT,
字段2 数据类型 UNIQUE NOT NULL,
字段3 数据类型 DEFAULT '默认值');
参照完整性
- 什么是参照完整性
- 是指表与表之间的一种对应关系
- 通常情况下可以通过设置两表之间的主键、外键关系,或者编写两表的触发器来实现
- 有对应参照完整性的两张表格,再对他们进行数据插入,更新,删除的过程中,系统都会将被修改表格与另外一张对应表格进行对照,从而阻止一些不正确的数据的操作
-
数据库的主键和外键类型一定要一致
-
两个表必须要是InnoDB引擎
-
设置参照完整性后,外键当中的内值,必须得是主键当中的内容
-
一个表设置当中的字段设置为主键,设置主键的为主表
-
创建表时,设置外键,设置外键的为子表
两张表之间的关联
通过一张表的某个字段关联另一张(需要连接的数据类型要相同)⬇️
表名1(
id int primary key,
name varchar(20),
age int);
表名2(
sid int,
score int,
constraint sc_st_fk foreign key(sid) references 表(id));
上面是表1的主键要和表三sid的数据类型相同
然后利用表1的主键和表2的外键连接
对已有表添加外键关系
alter table +表2的score+ add constraint sc_st_fk foreign key(sid)references student(id);
MySQL-数据库设计三范式
1.要求每一个字段原子不可再分。
2.要求所有非主键子段完全依赖主键,不能产生部分依赖
3.所有非主键字段和主键字段之间不能产生传递依赖
几个经典设计
关系
1. 一对一
一夫一妻 身份证号和你这个人
第一种方案:分为两张表储存,共享主键,第二种:分为两张表储存,外键唯一
2. 一对多
人和车 两张表 外键做在多的那一方
分量个表储存,在多的一方添加外键,这个外键字段引用用一方中的主键字段
3. 多对多
一般会抽出一张中间 来表示另外两张表的关系
分三张表来储存,两个分别储存不同的信息 用第三张来储存前两张关系信息,前两张表都用上主键,第三个表用外键对前两个进行连接
合并结果集 UNION与UNION_ALL
- 什么是合并结果集
- 合并结果集就是把两个SELECT语句的查询结果合并到一起展示
- 合并结果集的两种方式
2.1 UNION
-
合并时去除重复记录
2.2 UNION ALL -
合并时不去除重复记录
- 格式
SELECT * FROM 表1 UNION SELECT * FROM 表2;
SELECT * FROM 表1 UNION ALL SELECT * FROM 表2;
UNION
select * from A
union
select * from B
UNION ALL
select * from A
union all
select * from B
被合并的两个结果集:列数类型必须相同
笛卡尔集
A = {a,b}
B = {0,1,2}
C = {a0,a1,a2,b0,b1,b2}
笛卡尔集就是同事查询两个表,使用SQL语句,出现的结果就是笛卡尔集结果
SQL去除笛卡尔积: 主外键保持一致 就可以去除笛卡尔积
SELECT *
FROM students,score;
查询的时候可以给表起别名
SELECT * FROM stu st,score sc;
查询时保持主键外键一致
SELECT *
FROM students,score
WHERE students.id = score.sid;
可以用⬇️
99法(隐式内连接)
SELECT * FROM A表,B表
WHERE A.主键 = B.外键