Mysql

数据库相关知识

结构化信息或数据的有组织的集合,通常有数据库管理系统(DBMS)来控制

大多数数据库使用结构化查询语言(SQL)来编写和查询数据

简单来说就是存放数据的仓库

整个数据库系统可以包含多个数据库,一个数据库可以包含多个数据表,一个数据表可以有多个列(字段)

连接数据库方法

  1. MySQL命令行(cmd中执行mysql -uroot -p)
  2. 使用数据库连接软件(例如phpstudy自带的MySQL-Front、Navicat、phpMyAdmin等)
  3. php连接数据库(写php代码来进行连接操作)

数据库操作

向数据库中插入数据

插入单条数据
insert into 表名(字段1,字段2,.......)values(值1,值2,.......);

插入多条数据
insert into 表名
(字段1,字段2,.......)
values
(值1,值2,.......),
(值11,值12,.......),
(值21,值22,.......);

举例
insert into guestbook(comment,name) values("111","222");
//向guestbook表中的comment列和name列分别插入111222

delete from 表名 where 条件;

举例
delete from guestbook where comment_id=2;
//删除guestbook表中comment_id列的值为2的数据

update 表名 set 字段名="值" [where条件];

where为可选项,使用where时只会修改满足where条件的行,不加where会将该列所有的值修改

举例
update guestbook set comment="333";
//将guestbook数据表中的comment列的所有值改为333
update guestbook set comment="666" where comment_id=2;
//将guestbook表中的comment_id列的值为2的comment的值改为666

select * from 表名;
select */字段 from 表名 [where条件];

show databases --查看有哪些数据库
use 数据库名 --使用数据库
show tables --查看有哪些表

order by

SELECT * FROM 表名 ORDER BY 列名(字段名) [ASC|DESC];
-- 将表中的内容按照某一列(字段)进行排序
ASC表示升序,为默认值,DESC表示降序

order by后的数字大于当前列数,会报错

LIMIT限制

用于限制select语句返回指定的记录数

SELECT * FROM 表名 LIMIT 偏移量,限制条数;

举例
LIMIT 5-- 5表示限制条数(只返回查询的前五行)
LIMIT 1,5 -- 1表示偏移量,5表示限制条数(返回从1+1=2开始,往后5行)

select * from users limit 3,5; -- 检索4-8行
select * from users limit 0,1; -- 检索第1行

MySQL注释

#
--空格
--+(在URL中空格会被编码为+)
/*...*/

注释符可以替换为空格

select/*123*/id,username,password/*123*/from/*123*/users/*123*/limit/*123*/0,3;

/* */中的内容被注释掉了,可以用其代替空格
当空格被过滤时可以进行绕过

内联注释

/*!/*!*/

/* */ 在mysql中是多行注释 但是如果里面加了! 那么后面的内容会被执行

举例
select/*123*/*/*123*/from/*!users*/limit/*123*/0,3;
-- /*!users*/中的users有效,会被当作代码执行

单行注释加换行

单行注释加换行也可以执行

select * from#asdf
users;

--将users换行后,有效执行

系统数据库

MySQL5.0以上自带information_schema这个数据库,5.0以下没有

information_schema是一个信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息

- SCHEMATA 表:提供了当前mysql实例中所有数据库的信息。
show databases; 的结果取之此表。

- TABLES 表:提供了关于数据库中的表的信息。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。
show tables from schemaname; (schemaname为指定数据库名)的结果取之此表。

- COLUMNS 表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。
show columns from schemaname.tablename; (schemaname为指定数据库名, tablename为指定数据库下的数据表名)的结果取之此表。

查询数据库名

select schema_name from information_schema.schemata;

查询某个数据库下的表名

select table_name from information_schema.tables where table_schema='security';
-- 查询security数据库下的表名

查询某个数据库下某个表的列名

select column_name from information_schema.columns where table_schema='security' and table_name='users';
-- 查询security数据库下的user表中的列名

查询表中的具体内容

select * from security.users;
-- 查询security数据库中users表中的所有内容

PHP操作数据库

连接

<?php
header("Content-Type: text/html;charset=utf-8");
$servername = "localhost";
$username = "root";
$password = "root";

// 创建连接
$conn = mysqli_connect($servername, $username, $password);

// 检测连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "连接成功";
?>

查询

<?php  
header("Content-Type: text/html;charset=utf-8");
$servername = "localhost";
$username = "root";
$password = "root";

// 创建连接
$conn = mysql_connect($servername, $username, $password);

// 选择数据库
mysql_select_db('security');

if(isset($_GET['id'])){
$id = $_GET['id'];
$sql = "select * from users where id = $id";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo 'Your Login name:'. $row['username'];
echo "<br>";
echo 'Your Password:' .$row['password'];
echo "</font>";
}
else
{
echo '<font color= "#FFFF00">';
print_r(mysql_error());
echo "</font>";
}
}
?>