Mysql数据库
Mysql数据库
1.熟悉基本的linux下的命令行,运用他们。
前言
了解一些名词。(菜鸟教程上解释的很清楚)
- 数据库: 数据库是一些关联表的集合。
- 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
- 列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
- 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
- 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
- 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
- 外键:外键用于关联两个表。
- 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
- 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
- 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性
- 表头(header): 每一列的名称;
- 列(col): 具有相同数据类型的数据的集合;
- 行(row): 每一行用来描述某条记录的具体信息;
- 值(value): 行的具体信息, 每个值必须与该列的数据类型相同;
- 键(key): 键的值在当前列中具有唯一性
退出
exit 或 quit。
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 | alter database dbname CHARACTER SET utf8 COLLATE utf8_general_ci; |
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 起已废弃,并在将来会被移除。应使用 MySQLi 或 PDO_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
参考:菜鸟教程。