Mysql数据库

Mysql数据库

1.熟悉基本的linux下的命令行,运用他们。

前言

了解一些名词。(菜鸟教程上解释的很清楚)

  • 数据库: 数据库是一些关联表的集合。
  • 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
  • 列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
  • 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
  • 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
  • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
  • 外键:外键用于关联两个表。
  • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
  • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
  • 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性
  • 表头(header): 每一列的名称;
  • 列(col): 具有相同数据类型的数据的集合;
  • 行(row): 每一行用来描述某条记录的具体信息;
  • 值(value): 行的具体信息, 每个值必须与该列的数据类型相同;
  • 键(key): 键的值在当前列中具有唯一性

退出

exitquit

1.mysql

MySQL基础知识
MySQL经常和“数据库”连在一起读,这很容易对新手造成误解,认为MySQL就是一个数据库

其实不是这样,MySQL是数据库的集合,MySQL里面有很多数据库

那么数据是直接存在数据库里的吗?并不,数据库底下还有一个叫做数据表的存储单元

数据表里面才存储数据。

打个比方,好比一座大图书馆,就是MySQL,图书馆里面分南库,北库,这就是数据库,

每个库里面的书都是放在书架上的,书架就是数据表,而放在书架上的很多本书,就是数据

。这么说,读者应该理解了吧,所以按大小顺序排个序就应该是,

MySQL>数据库>数据表>数据,所以我们接下来的内容也是按照这个顺序来展开。(把黑体理解就好)

前面跟着颜老板把那个环境安装好了,然后就可以使用mysql了。首先打开xshell,

1.进入你的mysql

mysql -u root -p #然后[root@** ~]后面输入

-u 是指user用户名,

root是你创建了一个root用户,最高管理员进入。

-p是要你输入你的mysql密码。

#回车Enter password: 然后输入你的密码

#(这里你输入的时候是看不见的,linux是有这个保护,以免泄密,windows系统下一般不会

有这个。输入后然后回车。)

讲解root为什么,这是管理员登录,可以进行好多操作,增删改查。

你也可以创建一个用户不是root。然后给他权限,进行登录。具体可以参照

(菜鸟教程/数据库/mysql/mysql管理),

就有这个出现,有的版本不一样,但是大致是一样的。

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.25-log MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights

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 inpu.

MySQL [(none)] >

MySQL [(none)] >这个none是你还没有选择数据库。有的版本有有的没有。

选择了数据库就是MySQL [(xx)] >.

2.展示你的数据库

show databases; #因为你不知道你刚开始有多少的数据库,所以是databases

而且一定要记住,输入;因为之前配环境的时候的语句没有后面加;的习惯,所以菜鸡本鸡刚开始的时候就常常忘记加;导致它以为我还有东西要输入,另起一行。

出现这四个初始数据库

+——————–+
| Database |
+——————- -+
| information_schema |
| mysql |
| performance_schema |
| sys |
+——————–+

3.创建你的数据库

create database XX; (XX是数据库名)这个数据库名你可以随便取,但是不能取一些关键字,例如create show类似的

输入后回车然后看见

Query OK,1 row affected (0.00 sec) #表示创建数据库成功。

在这里给大家补充一点,创建数据库的时候,默认的字符是”latin“,也就是拉丁文,现在可能体会不到有什么区别,到数据表的操作的时候就有区别了。

不过这里还是告诉大家,如何创建数据库的时候,自己定义为什么字符

create database XX(数据库名) charset = (字符编码,例如utf8);

#我们平时学的中文的字符编码是“utf-8”,但是在MySQL里面,中文字符编码是“utf8”,这点需要注意。

还有一点,要是你创建一个已经存在的数据库会报错。例如:

create database test;

会提示以下信息

can’t create database ‘test’ ;database exists

所以我们在创建数据库的时候最好判断一下子,你要创建的数据库到底存不存在。

create database if not exists XX(数据库名); #尝试创一个test的数据库试试

会出现Query ok,1 row affected ,1 warning.

显示“OK”,没有报错了,但是有一个警告,这个警告就是告诉用户,”test“这个数据库存在。

现在让我们尝试一下创建一个关键字的数据库,

create database create;

会出现You have an error in your SQL syntax;check the manual that correspands to your ……………….to use near ‘create’ at line 1 这里我们可以确实看到的是,名为“create”的这个数据库没有创建成功,报错了.

那如果有的人说我就想创建一个名为“create”的数据库,下面给出解决办法

**create database XX(数据库名);(**注意,这里``是反引号,在键盘tab上面,1的旁边)

这样操作就可以创建一个名叫做create的数据库了,但是最好不要起这些关键字名字,不好区别。

4.显示数据库信息

show create database XX(数据库名);

查看信息。CHARACTER SET

当然在这里你可以修改你的字符编码。使用

1
2
3
4
alter database dbname CHARACTER SET utf8 COLLATE utf8_general_ci;
utf8_general_ci这是一个校对规则。

然后在使用哪个查看数据库就可以看到,你的数据库的编码就变成了utf8;
5.删除数据库

drop database XX(数据库名);

删除了会显示

Query ok, 0 rows affected #这样就显示删除成功了。

但是如果我们要删除一个并不存在的数据库会出现什么呢

删除一个不存在的q数据库。回车显示

can’t drop database ‘q’; database doesno’t exist

很明显,报错了,因为不存在“a”这个数据库,我们可以判断一下,这个数据库存在才删除,下面给出代码。跟创建一样的

drop database if exists XX (数据库名字);

会显示

Query OK, 0 rows affected, 1 warning (0.01 sec)

和之前创建一样,虽然是成功的,但是有警告。警告的意思大概是说,么有这个数据库,。。

6.选择数据库

这是数据库的最后一个基本操作,我们如果想要创建数据,必须要创建一个数据库,然后在数据库当中创建数据表,在数据表中进行操作,

但是这么多数据库,计算机怎么知道我们选择的是哪个数据库呢?我们使用下列语句

use XX(数据库名);

回车后会显示

Database changed

这个就提示你已经进入到了这个XX数据库里面了。然后你就可以操作了。

数据表

数据表的基本操作全都是在选择了数据库的前提下,一定要在选择了数据库的前提下。

1.创建表

create table XX(表名)(
字段1名 数据类型,
字段2名 数据类型,
…….
字段n名 数据类型
);

这个创建表可以打个比方,如果要你用Excel做一份班级成绩表,你会怎么做?肯定先有个标题吧,比方说“18级网络二班期末成绩表”,这里的标题就相当于我们的表名。标题有了,我们得在第一行写上“学号”、“姓名”、“总成绩”吧,来告诉看这个表的人,每一列代表的什么东西,这里的“学号”、“姓名”、“总成绩”就相当于我们的字段名。到这里,都这应该对这段代码有所了解了,下面我们创建一个数据表。

MySQL [qq1]> create table stu(
-> id varchar(20),
-> name varchar(10),
-> score int
-> );

回车之后显示

Query OK, 0 rows affected (0.09 sec)

表示已经成功创建一个表了。这里注意写一行别忘记 , 和最后的 ;不然出错了又要重新敲一次。

这里讲一讲mysql数据类型的知识。

数据类型:int 整型
tinyint 整型(0-256)
decimal 浮点型(总位数,小数位数) 例如 decimal(3,1)
char(X) 定长字符型 例如 char(10)
varchar(X) 可变长度字符型 例如varchar(10)
text 大段文本

binary 二进制(存储照片等)

和C语言类似。

字段属性:

null:空
not null:不为空
default ‘XXXX’:默认值
auto_increment:自动增长
primary key:主键(主键的特点,不为空,不重复,一个表只能有一个主键,但是一个主键可以由多个列组成)

具体的没必要多说,只要了解常用的数据类型即可。现在我可以讲讲“Latin”和“utf8”的区别了,如果是在“Latin”字符下创建的数据表,那么一个中文等于两个字符,也就相当于,如果名字是四个字,就要char(8)。但如果是在“utf8”字符下创建的数据表,一个中文等于一个字符,如果名字是四个字,只需要char(4)就够了。

还有如果你还是要用关键字创建字段名或者表名的话,和之前一样要用``

2.查看表

show tables;

一定要是tables,因为一个MySQL里面有多个数据库,所以,一个数据库里面也可以有多个表,当然,一个表里面也可以有多个数据,但是只有一个表的话,也要使用tables,也可以使用后面的显示创建的表。

回车之后会显示你刚刚创建的表

+—————+
| Tables_in_qq1 |
+—————+
| stu |
+—————+
1 row in set (0.00 sec)

3.显示创建表

show create table XX(表名);
show create table XX(表名) \G;

上面两段代码都是显示创建表,只不过显示的样式不同,随意选择一种即可

上面那种会显示

+——-+————————————————————————————————————————————————————-+

Table Create Table
+——-+————————————————————————————————————————————————————–+
stu CREATE TABLE stu (
id varchar(20) DEFAULT NULL,
name varchar(10) DEFAULT NULL,
score int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
+——-+————————————————————————————————————————————————————–+
1 row in set (0.00 sec)

下面那种会显示

******************\*** 1. row ******************\***
Table: stu
Create Table: CREATE TABLE stu (
id varchar(20) DEFAULT NULL,
name varchar(10) DEFAULT NULL,
score int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

ERROR:
No query specified

##记得百度ERROR;

4.显示表的结构

describe(或desc) XX(表名);

回车之后会显示刚刚我创建的表的结构

+——-+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+————-+——+—–+———+——-+
| id | varchar(20) | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| score | int(11) | YES | | NULL | |
+——-+————-+——+—–+———+——-+
3 rows in set (0.00 sec)

解释每个表头的含义

其中 id ,name,score都是字段,然后varchar什么的都是字段的内型。

因为现在什么都没有写进去,所以是空的。key是说是不是主键。

5.删除表

drop table XX(表名);
*drop table XX,XX,XX……;

在这里因为后面还要用到表,我们只创建了一个表,所以我们再创建一个表,

MySQL [qq1]> create table stu1(
-> id varchar(20),
-> name varchar(10),
-> score int
-> );

来演示删除

创建好了之后查看一下表的多少(show tables;)。

回车之后显示

Query OK, 0 rows affected (0.04 sec) #表示删除成功。

我们再来查看一下表。发现少了一个,表示删除成功。

数据的基本操作

数据的操作算是整个MySQL中最复杂的部分,虽然概括起来无非就是“增删查改”,但每一项底下包含的内容非常之多,我比较菜,所以尽力而为。

1.插入数据

这个要在表的底下实现,所以要先有个表

1
insert into XX(表名) (字段1,字段2,字段3......) values (值1,值2,值3.......);

比如在自己的stu表中插入一些信息

insert into stu (id,name,score) values(“201801”,”某某”,90);

千万要注意不要写入中文符号,不然会报错,千万千万。

回车之后有下面一段代码,显示成功插入数据

Query OK, 1 row affected (0.00 sec)

我们再插入几条信息

insert into stu (id,name,score) values(“201820”,”嘿嘿”,70);

insert into stu (id,name,score) values(“201830”,”lala”,90);

然后看下面的查询数据

2.查询数据

让大家看一下插入数据之后,表内变成什么样了,

首先给大家介绍一个知识点——运算符
比较运算符 >、>=、<、<=、=(比较和赋值都是”=”)、<>(不等于)

逻辑运算符 非(not) and(与)or(或)

和C语言差不多,但是有的有区别,不要混淆。

1、查询一个表里面的数据

select * from XX(表名);

我们 来查询刚刚创建的表的数据

select * from stu;

回车显示内容

+——–+——–+——-+
| id | name | score |
+——–+——–+——-+
| 201801 | 某某 | 90 |
| 201810 | 啥啥 | 80 |
| 201810 | 啥啥 | 80 |
| 201820 | 嘿嘿 | 70 |
+——–+——–+——-+
4 rows in set (0.00 sec)

2、查询一个表里面某字段 的所有数据

select 字段1,字段2,字段3……(或用”*”代替所有字段) from XX(表名);

举个例子,我们查询“id”字段底下所有的数据,那么”id“下有哪些数据,就会展现出来

select id from stu;

回车显示这个表里面id字段下的所有的数据

+——–+
| id |
+——–+
| 201801 |
| 201810 |
| 201810 |
| 201820 |
+——–+
4 rows in set (0.00 sec)

3.我们也可以根据条件来查询信息

select * from XX(表名)where 字段1 = 值1 and 字段2 = 值2 and ……;

例如我们来查询stu里面name是某某的并且score是90的人

select * from stu where score =90 and name=”某某”;

回车显示内容

+——–+——–+——-+
| id | name | score |
+——–+——–+——-+
| 201801 | 某某 | 90 |
+——–+——–+——-+
1 row in set (0.02 sec)

4.我们也可以搜索

select * from stu where score > 90 or score < 60;

这个就是查找表中分数在90以上或者60以下的人

要是没有的话,就会显示这段信息。

Empty set (0.00 sec)

这个就是查找表中分数在80以上或者60以下的人

+——–+——–+——-+
| id | name | score |
+——–+——–+——-+
| 201801 | 某某 | 90 |
+——–+——–+——-+
1 row in set (0.00 sec)

5.对数据进行排序

select * from XX(表名) order by 字段x asc;(默认就是升序,低————高)

这里演示一个按照id序号来排序。

select * from stu order by id asc;

回车之后显示

+——–+——–+——-+
| id | name | score |
+——–+——–+——-+
| 201801 | 某某 | 90 |
| 201810 | 啥啥 | 80 |
| 201810 | 啥啥 | 80 |
| 201820 | 嘿嘿 | 70 |
+——–+——–+——-+

select * from XX(表名) order by 字段x desc; (高———低)

select * from XX(表名) where 字段x = 值x oreder by 字段x asc(desc); (按照某种条件排序)

select * from XX(表名) limit n; (取前n条数据)

下面演示一个取前两条数据

select * from stu limit 2;

回车之后显示

+——–+——–+——-+
| id | name | score |
+——–+——–+——-+
| 201801 | 某某 | 90 |
| 201810 | 啥啥 | 80 |
+——–+——–+——-+
2 rows in set (0.00 sec)

其他的就不举例了。自己可以试一试。

select * from XX(表名) limit n,m; (从第n条开始取m条数据 )

*select \ from XX(表名) order by 字段x asc(desc) limit n;**(取某种排序下的前n条数据)

3.删除数据

delete from XX(表名) where 字段x = 值x;

举例说明

delete from stu where id=201801;

回车之后,在查询表中的数据,看是不是少了第一条信息,

select * from stu;

回车之后发现少了哪一行id=201801的数据。这样就删除数据成功了。

然后在使用select * from stu;

来看看自己是否真的删除成功了,

+——–+——–+——-+
| id | name | score |
+——–+——–+——-+
| 201810 | 啥啥 | 80 |
| 201810 | 啥啥 | 80 |
| 201820 | 嘿嘿 | 70 |
+——–+——–+——-+
3 rows in set (0.01 sec)

4.修改数据

update XX(表名) set 字段1 = 值1,字段2 = 值2 where 条件;
update XX(表名) set 字段1 = 值1;

下面一条的作用是修改某一字段的所有值,所以不需要加条件。

实例

update stu set id = 201710,name = “啦啦” where id = 201810 ;

回车之后显示

Query OK, 2 rows affected (0.01 sec)
Rows matched: 2 Changed: 2 Warnings: 0

表示修改成功。

然后我们再来查询一下表的信息。

select * from stu;

回车之后显示

+——–+——–+——-+

id name score
+——–+——–+——-+
201710 啦啦 80
201710 啦啦 80
———- ——– ——
201820 嘿嘿 70
———- ——– ——
+——–+——–+——-+
3 rows in set (0.00 sec)

注意这里的第一条信息,已经改变了。

然后我们就可以在phpstrom中尝试这些语句,看是不是一样的。

php部分

入门

①PHP中的变量,声明与使用,必须使用$开头。

②PHP是一种弱类型语言,变量其实并不需要声明,可以直接给变量赋任何类型的值;

③PHP中可以使用连等同时声明多个变量。而不能使用逗号分隔。

eg:$num1=$num2=$num3=5;

④常用变量函数:

unset():删除并释放变量;

isset():检测变量是否设置;

empty():检测变量是否为空(未设置或值为Null都算空);

⑤变量的命名:只能有字母数字下划线组成,开头不能是数字。而且,PHP中变量区分大小写!!
$name,$Nnme,$NAME都是不同变量;

但是,PHP的内置函数不区分大小写!echo EcHo都是有效的。

连接

这里面有[不再使用mysql_connect()来连接数据库]的解释

因为他 会显示 不推荐使用mysql扩展,将来会删除它

本扩展自 PHP 5.5.0 起已废弃,并在将来会被移除。应使用 MySQLiPDO_MySQL 扩展来替换之。参见 MySQL:选择 API 指南以及相关 FAQ 以获取更多信息

详情请了解下面。

https://www.cnblogs.com/wangtao_20/p/4823088.html

连接解释:

mysqli_connect_errno() 返回一个整数,标识连接数据库是否成功和各种错误的数值。

mysqli_connect_error() 返回连接错误信息。

以下是一些连接情况:

mysqli_connect_errno mysqli_connect_error

2002 php_network_getaddresses: getaddrinfo failed: 不知道这样的主机。

1045 Access denied for user ‘wjj’@’localhost’ (using password: YES)

1049 Unknown database ‘test’

0(连接成功) null

创建数据库

语句:**$sql=’CREATE DATABASE aa ‘;**
create database大小写都可以,

PHP 使用 mysqli_query 函数来创建或者删除 MySQL 数据库。
该函数有两个参数,在执行成功时返回 TRUE,否则返回 FALSE。

删除数据库

语句:**$sql=’DROP DATABASE aa ‘;**

在使用PHP脚本删除数据库时,不会出现确认是否删除信息,会直接删除指定数据库,所以你在删除数据库时要特别小心。千万小心。

选择数据库

语句:mysqli_select_db($conn,’aa’);
aa是指你选择的数据库名字,这个操作简单,不演示了。

创建数据表

语句:

$sql=”CREATE TABLE bb_1(“.**
“bb_id INT NOT NULL AUTO_INCREMENT,”.
“bb_title VARCHAR(100) NOT NULL,”.
“bb_name VARCHAR(40) NOT NULL,”.
“bb_data DATE, “.
“PRIMARY KEY(bb_id))ENGINE=InnoDB DEFAULT CHARSET=utf8;”;**

一定要看清楚括号和, .;不要少一个多一个,

PRIMARY KEY(bb_id)主键是Id

AUTO_INCREMENT的意思是自己增加,id自己增加,这样方便一点。

ENGINE=InnoDB 表示将数据库的引擎设置为InnoDB,从MySQL 5.6开始默认使用该引擎。

DEFAULT CHARSET=utf8 表示设置数据库的默认字符集为utf8

删除数据表

语句:$sql=”DROP TABLE bb_1”;

mysqli_select_db($conn,’aa’);

一定不要忘记写这一句mysqli_select_db($conn,’aa’);

这一句的意思是说在这个aa数据库里面删除bb_1的数据表。

在数据表里面插入数据

语句:

$sql=”INSERT INTO bb_1”.

“(bb_title,bb_name,bb_data)”.

​ “VALUES”.


​ “(‘$bb_title’,’$bb_name’,’$bb_data’)”;


​ 可以多插入几条数据,一样的形式,修改数据就好了。

​ 然后就可以在你的数据库里面看到这些数据了。



查询数据1.1

语句: $sql=’SELECT bb_id,bb_title,bb_name,bb_data FROM bb_1’;

bb_id,bb_title,bb_name,bb_data都是字段

bb_1是数据表名。

一定要注意括号一对一对的写,不要忘记html代码的连续性。

在上面的例子中,PHP mysqli_fetch_array() 函数第二个参数为 MYSQLI_ASSOC
设置该参数查询结果返回关联数组

PHP 提供了另外一个函数 mysqli_fetch_assoc(), 该函数从结果集中取得一行作为关联数组。
返回根据从结果集取得的行生成的关联数组,如果没有更多行,则返回 false。

在我们执行完 SELECT 语句后,释放游标内存是一个很好的习惯。

可以通过 PHP 函数 mysqli_free_result() 来实现内存的释放。

游标内存:存储Select的查询结果,并用来遍历。

查询数据1.2

语句:**$sql=’SELECT bb_id,bb_title,bb_name,bb_data FROM bb_1 WHERE bb_id=”2”‘;**

WHERE相当于一个限制条件。比如这里面的只能是id 为2的数据被查出来。

查询数据1.3

模糊查询

LIKE的使用。

语句:

$sql=’SELECT bb_id,bb_title,bb_name,bb_data FROM bb_1
WHERE bb_name LIKE “%学习”‘;

还有一些用法

‘%a’ //以a结尾的数据

‘a%’ //以a开头的数据

‘%a%’ //含有a的数据

a‘ //三位且中间字母是a的

_a’ //两位且结尾字母是a的

‘a_’ //两位且开头字母是a的

查询数据1.3

语句:

$sql=’SELECT bb_id,bb_title,bb_name,bb_data
FROM bb_1
ORDER BY bb_data ASC’;

按照时间的顺序排序。输出。

其他的和数据测试的一样。

修改数据

语句:

$sql=’UPDATE bb_1
SET bb_name=”谁呀”
WHERE bb_id=2’;

WHERE是一个限制条件;

可以这样理解:update 表名称 set 列名称 = 新值 where 更新条件;

删除数据

语句:

$sql=’DELETE FROM bb_1
WHERE bb_id=3’;

delete,drop,truncate 都有删除表的作用,区别在于:

  • 1、delete 和 truncate 仅仅删除表数据,drop 连表数据和表结构一起删除,打个比
  • 方,delete 是单杀,truncate 是团灭,drop 是把电脑摔了。
  • 2、delete 是 DML 语句,操作完以后如果没有不想提交事务还可以回滚,truncate 和
  • drop 是 DDL 语句,操作完马上生效,不能回滚,打个比方,delete 是发微信说分手,
  • 后悔还可以撤回,truncate 和 drop 是直接扇耳光说滚,不能反悔。
  • 3、执行的速度上,drop>truncate>delete,打个比方,drop 是神舟火箭,truncate
  • 是和谐号动车,delete 是自行车。

好了,到此结束,感谢大家。

参考链接:https://blog.csdn.net/qq_37236745/article/details/78694768

参考:菜鸟教程。