MYSQL数据库简介
1.什么是数据库?
数据库(database) 就是一个由一批数据构成的有序集合,这个集合通常被保存为一个或多个彼此相关的文件。
2.什么是关系型数据库?
数据被分门别类的存放在一些结构化的数据表(table)中,而数据表之间又往往会形成种种内在的交叉关系。存在于数据表之间的这种关系(relation)使数据库又被称为关系型数据库;
3.关系型数据库系统
MySQL、Oracle、Microsoft SQL Server 和IBM DB2都是关系型数据库系统(database system)。除了管理数据,一个这样的系统还包括用来管理各种关系数据库的程序。一个合格的关系数据库系统不仅要确保各种数据的存储情况安全可靠,还必须能够处理对现有数据进行查询、分析和排序以及对新数据进行保存等诸多命令。
4.非关系型数据库:mongoDB
5.数据表、记录、字段、查询、SQL、索引
数据表(table)即用来实际存放有关数据的框架结构。
这种数据表里的每一行被称为一条数据记录(data record),简称”记录”,每条记录的结构和格式是由人们在定义该数据表时决定的。例如,在某个用户表里,每条记录可能包含着用户的姓名,出生日期,注册时间等多个字段(field)。每个字段对自己所能存储的信息类型又有着一定的要求(例如,它必须是一个有着某种特定格式的数字或者是一个字符个数不得超过某个预定义最大值的字符串)。
查询 是人们用各种SQL指令构造出来的,SQL指令负责具体完成筛选和提取结果数据的工作
SQL (Structured Query Lanuage) 结构化查询语言;这种语言已发展为人们在构造数据库查询命令的一个标准。
SQL语言
SQL (structured Query Language) 结构化查询语言;
主要用途是构造各种数据库系统操作指令,如 SELECT、INSERT、UPDATE、DELETE;
SQL命令可以分类以下三大类别:
DML(Data Manipulation Language 数据处理语言):这类命令主要包括 SELECT、INSERT、UPDATE、DELETE等用来从数据表读出数据,把数据存入数据表或是对数据表里的现有记录进行修改的命令;(增删改查)
DDL(Data Definition Language 数据定义语言):这类命令主要包括CREATE TABLE、
ALTER TABLE 等用来定义和改变数据库结构的命令;
DCL(Data Control Language 数据控制语言):这类命令主要包括GRANT、REVOKE以及另外几个用来帮助人们设置和调整MySQL访问控制机制的SQL命令;
1.简单查询
SELECT * FROM tablename 查询所有
2.限制查询结果中的数据列个数 查询固定的两列
SELECT column1,column2 FROM tablename
3.确定数据表里有多少条数据记录 查询记录
SELECT COUNT(id) FROM tablename
WHERE子句设置查询条件,过滤掉不需要的数据行。 WHERE代表限制条件
例如查询年龄大于20的记录: SELECT * FROM usertable WHERE age>20
WHERE子句可包括各种条件运算符:
1.比较运算符
| 运算符 |
含义 |
| = |
等于 |
| > |
大于 |
| >= |
大于等于 |
| < |
小于 |
| <= |
小于等于 |
| <> |
不等于 |
2.逻辑运算符
| 运算符 |
含义 |
| AND |
如果组合的条件都是TRUE,返回TRUE |
| OR |
如果组合的条件其一是TRUE,返回TRUE |
| NOT |
如果条件是FALSE,返回TRUE |
3.限制查询
LIMIT子句用于强制SELECT语句返回指定的记录数。
LIMIT接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。注意:初始记录行的偏移量是0而不是1。
例:检索前5个记录行
SELECT * FROM table LIMIT 5;
检索记录行 6-15
SELECT * FROM table LIMIT 5,10;
4.查询结构排序
使用ORDER BY子句对查询返回的结果排序。
ORDER BY子句的语法格式为: ORDER BY {column_name [ASC|DESC]} [,...n]
其中ASC表示升序,为默认值,DESC为降序
1.插入数据记录(INSERT)
例:INSERT INTO user (username,password) VALUES ('admin','123456')
一次插入多条记录
INSERT INTO user (username, password)
VALUES ('user1', '123456'), ('user2','123456'), 注:用逗号隔开
2.修改数据记录(UPDATE)
例:UPDATE user SET username = 'admin1', passwd ='12345678' WHERE uid = 10
3.删除数据记录(DELETE)
例:DELETE FROM user WHERE uid = 10
数据库操作
PHP5开始,PHP向程序员提供了两种MySQL应用程序编程接口:一种是从PHP早期版本一直就有的mysql功能模块;另一种是从PHP5才开始有的mysqli接口;
mysql功能模块不是PHP的一个集成组件。要想使用这个功能扩展模块,PHP的Linux版本必须在编译时加上一个—with-mysql选项。PHP的windows版本通过一个DLL文件提供了相应的扩展,不管使用是哪一种操作系统,都必须在php.ini文件里启用这个扩展以确保PHP能够找到所有必要的DLL。
通过mysql功能模块连接MySQL服务器的办法是调用mysql_connect()函数 ,它需要提供3项信息:MySQL服务器的主机名、MySQL用户名和密码。如果MySQL服务器与PHP运行在同一台计算机上,可以使用localhost作为它的主机名。
例:$conn = mysql_connect("localhost", "root", "123456"); $conn为句柄
mysql_connect(server,user,pwd,newlink,clientflag)
| 参数 |
描述 |
| server |
可选。规定要连接的服务器。 可以包括端口号,例如 "hostname:port",或者到本地套接字的路径,例如对于 localhost 的 ":/path/to/socket"。 如果 PHP 指令 mysql.default_host 未定义(默认情况),则默认值是 'localhost:3306'。 |
| user |
可选。用户名。默认值是服务器进程所有者的用户名。 |
| pwd |
可选。密码。默认值是空密码。 |
| newlink |
可选。如果用同样的参数第二次调用 mysql_connect(),将不会建立新连接,而将返回已经打开的连接标识。参数 new_link 改变此行为并使 mysql_connect() 总是打开新的连接,甚至当 mysql_connect() 曾在前面被用同样的参数调用过。 |
| clientflag |
可选。client_flags 参数可以是以下常量的组合: MYSQL_CLIENT_SSL - 使用 SSL 加密 MYSQL_CLIENT_COMPRESS - 使用压缩协议 MYSQL_CLIENT_IGNORE_SPACE - 允许函数名后的间隔 MYSQL_CLIENT_INTERACTIVE - 允许关闭连接之前的交互超时非活动时间 |
如果连接成功,这个函数将返回一个标识号码。反则将返回FALSE,并向Web服务器发送一条出错消息,这将使PHP脚本所生成的结果HTML文档里也出现一条出错消息。如果不想让最终用户在他们的web浏览器里看到这样的出错消息,就必须在调用mysql_connect()函数的时候在它的前面加上一个@字符。
查询MySQL服务器结束后,应当关闭连接。不过关闭连接不是必需的,因为PHP的垃圾回收机制会处理这个问题。
mysql_close()函数关闭可选参数link_id对应的连接。如果没有指定link_id,则认为是最近打开的连接。
例:mysql_close();
与MySQL服务器建立连接后,就可以使用各种mysql_xxx()函数去执行SQL命令。但为了避免每次调用mysql_xxx()函数都要指定目标数据库,最好先用mysql_select_db()函数(它相当于SQL命令USE databasename )为后续操作选定一个默认数据库。
例:mysql_select_db("mycompany"); db(datebase)
为了执行SQL命令,需要把它们作为一个字符串传递给mysql_query()函数.如果想访问的不是当前数据库,就需要调用mysql_db_query()函数来添加SQL命令并明确给出那个数据库名称,这两个函数的最后一个参数(连接的ID号码,即mysql_connect()的返回值)都是可选的,只有与MySQL服务器建立了多个连接的时候才需要给出这个参数
例:$result = @mysql_query("SELECT * FROM user");
// 自 PHP 4.0.6 起不提倡使用此函数。不要用此函数
$result = @mysql_db_query("mycompany", "SELECT * FROM product");
如果SQL命令执行成功,mysql_query()函数将返回PHP资源的引用指针( 一个Resource id #2格式的字符串); 否则将返回FALSE,并生成一条出错消息;
mysql_query()函数可以用来执行任何一种SQL命令,比如 SELECT(查询)、INSERT(插入新记录)、UPDATE(修改现有记录)、DELETE(删除现有记录)、CREATE TABLE(创建新数据表)、ALTER TABLE(修改数据表结构)等。
1. mysql_fetch_row() 获取行
mysql_fetch_row()函数将以一个普通数组的形式返回一条结果,它的各个字段需要以$row[n]的方式进行访问。
2. mysql_fetch_array()
mysql_fetch_array()函数将以一个关联数组的形式返回一条结果,它的各个字段需要以$row[n]或$row["colname"]的方式进行访问。
3. mysql_fetch_assoc()
mysql_fetch_assoc()函数也将以一个关联数组的形式返回一条结果记录,但它的各个字段只能以 $row["colname"]的方式进行访问。
4. mysql_fetch_object()
mysql_fetch_object()函数以一个对象的形式返回一条结果记录,
它的各个字段需要以$row->colname的方式进行访问。
这4个函数的共同点是:每次调用将自动返回下一条结果记录,但如果已经到达结果数据表的末尾,则返回FALSE。
5.mysql_free_result()
PHP会把查询的结果一直保存到脚本执行结束。如果要提前释放某次查询结果(例如在某个脚本里已经进行了大量查询),可以用mysql_free_result()函数提前释放它。
6. mysql_num_rows()
mysql_num_rows()函数用于获取查询返回的记录数;
7. mysql_insert_id()
mysql_insert_id()函数用于获取INSERT 操作产生的 ID ;
8. mysql_affected_rows ()
mysql_affected_rows ()函数用于获取前一次 MySQL 操作所影响的记录数 ;
例:读取数据
$conn = @mysql_connetc(“localhost”, “root”, “123456”); //一般写四个参数 主机名 , 根权限 , 密码 , 数据库名 密码为空可以不写
if($conn == FALSE){
echo “数据库连接失败!“;
exit;
};
mysql_select_db(“test”);
$result = @mysql_query(“SELECT * FROM user”); //这行代码也就是从"user"数据库中取出所有的数据 并用$result存储 可以类比js认为$result是一个数组对象
if(mysql_num_rows($result) > 0){ //使用mysql_num_rows($result) 函数也就说把查询从数据库中取出来的"数组对象"的长度
While($row = mysql_fetch_array($result)){
echo $row["username"];
echo "<br />";
};
};
mysql_free_result($result); //这行代码类似于将$result这个"数组对象"置空
mysql_close();
$conn = @mysql_connetc("localhost","root","123456")or die("数据库连接败!");
mysql_select_db("test");
$username = 'admin';
$password = '123456';
$reg_time = time();
$sql = "INSERT INTO user (username, password, reg_time) VALUES ('$username', '$password', $reg_time)";
$result = mysql_query($sql);
If($result) {
echo "添加成功";
};
mysql_close();
$conn = @mysql_connetc("localhost", "root", "123456") or die("数据库连接失败!");
mysql_select_db("test");
$newname = 'root';
//选取id=1的数据 并选择username的字段改变其值
$sql = "UPDATE user SET username='$newname' WHERE id = 1";
$result = mysql_query($sql);
if(mysql_affected_rows() > 0) {
echo "编辑成功";
}
mysql_close();
$conn = @mysql_connetc("localhost","root","123456") or die("数据库连接失败!");
mysql_select_db("test");
$sql = "DELETE FROM user WHERE id = 1";
$result = mysql_query($sql);
if(mysql_affected_rows() > 0) {
echo “删除成功”;
}
mysql_close();
- nodejs进阶(6)—连接MySQL数据库
1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...
- 当忘记mysql数据库密码时如何进行修改
因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...
- MySQL数据库和InnoDB存储引擎文件
参数文件 当MySQL示例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认情况下,MySQL实例会按照一定 ...
- 一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库
说起Oracle数据库,以前没用过Oracle不知道,但是这1年用Oracle后,发现真的是想狂吐槽,特别是那个.NET驱动和链接字符串,特别奇葩.总归是和其他数据库不一样,标新立异,不知道为何.另外 ...
- CentOS下mysql数据库常用命令总结
mysql数据库使用总结 本文主要记录一些mysql日常使用的命令,供以后查询. 1.更改root密码 mysqladmin -uroot password 'yourpassword' 2.远程登陆 ...
- [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率
使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...
- mysql数据库主从同步
环境: Mater: CentOS7.1 5.5.52-MariaDB 192.168.108.133 Slave: CentOS7.1 5.5.52-MariaDB 192.168. ...
- PDO连接mysql数据库
1.PDO简介 PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接 ...
- mysql数据库开发常见问题及优化
mysql 数据库是被广泛应用的关系型数据库,其体积小.支持多处理器.开源并免费的特性使其在 Internet 中小型网站中的使用率尤其高.在使用 mysql 的过程中不规范的 SQL 编写.非最优的 ...
- 如何在删除ibdata1和ib_logfile的情况下恢复MySQL数据库
昨天,有个朋友对公司内部使用的一个MySQL实例开启binlog,但是在启动的过程中失败了(他也没提,为何会失败),在启动失败后,他删除了ibdata1和ib_logfile,后来,能正常启动了,但所 ...
随机推荐
- [WebGL入门]十六,绘制多个模型
注意:文章翻译http://wgld.org/.原作者杉本雅広(doxas),文章中假设有我的额外说明,我会加上[lufy:],另外.鄙人webgl研究还不够深入.一些专业词语.假设翻译有误.欢迎大家 ...
- 探索Android该Parcel机制上
一.先从Serialize说起 我们都知道JAVA中的Serialize机制.译成串行化.序列化……,其作用是能将数据对象存入字节流其中,在须要时又一次生成对象.主要应用是利用外部存储设备保存对象状态 ...
- 【转】仿QQ5.0侧滑菜单ResideMenu
本文由孙国威 原创.如需转载,请注明出处! 原文:http://blog.csdn.net/manoel/article/details/39013095 为了后续对这个项目进行优化,比如透明度动画. ...
- 推送之HelloWorld及个推Smart Push
最近有个朋友想要推送一些消息到自己的APP上,自己用了HTTP轮询的方式比较耗电,也比较占用流量,一旦用户关闭了进程,消息则很难触达,于是,咨询我有没有什么好的解决方案.我告诉他其实可以使用推送,他瞪 ...
- Ubuntu下的截图工具
转载自:http://os.yesky.com/88/8733088.shtml 相信大家对于屏幕截图(或称抓图)应该不会陌生,在Windows平台上,我们可以使用许多第三方的专业抓图软件如SnagI ...
- Step one : 熟悉Unix/Linux Shell 常见命令行 (二)
2.学会使用一些文本操作命令 sed -- stream editor 1. Sed简介sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pat ...
- JAVA面试精选
JAVA面试精选[Java基础第一部分] 这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对 ...
- 线程:Semaphore实现信号灯
Semaphore是一个计数的信号量,可以维护当前访问自身的线程个数,并提供了同步机制.使用Semaphore可以控制同时访问资源的线程个数,例如实现一个文件允许的线程访问数.打个通俗的比喻,Sema ...
- CLR_Via_C#学习笔记之枚举
CLR_Via_C#学习笔记之枚举 枚举类型(Enum)定义的一组"符号名称/值"配对:因为枚举类型使用程序更容易编写.阅读和维护,而且它是强类型: 枚举是值类型:由System. ...
- SQLSERVER利用FOR XML PATH实现分组拼接字符串
首先看一下数据结构表 IF(OBJECT_ID('tempdb..#tProduct')IS NOT NULL) DROP TABLE #tProduct SELECT * INTO #tProduc ...