壹 . MySQL入门
一 . 数据库的五个基本单位
1.数据库服务器
数据库服务器:是指用来运行数据库服务的一台电脑。在中小型企业通常为一台。在数据存储量计算量很大的时候可以存在多台。多台数据库服务器共同来存储或计算。由于数据安全非常重要,我们经常会对数据库服务器里面的数据进经备份。
2.数据库
数据库:一个数据库服务器里面有可以有多个数据库。主要用来分类使用。我们可以建立交通信息数据库、游戏数据库、酒店开房数据库… … 主要用来将各个不同用途的数据,按照业务进行大块的划分。
3.数据表
数据表:例如在游戏数据库中。根据这一款游戏又分为了不同的数据表。专门用来区分游戏不同的数据。例如:用户数据(用户、密码);人物数据;所有装备和装备信息;用户的充值信息;药品、魔力药水信息… …等
4数据字段
数据字段:也叫数据列。就是我们日常所见表格里面的列。在表格中,我们会将一张用户表分成多个列。如下(表一)所示:用户编号、用户名、性别、年龄是字段。在真正的数据库中数据字段需要换成英文需要写成:id、username、sex、年龄。
5.数据行
数据行:真正的数据存在每一个表的行里面。字段(列)划分出来了一个表应该按照什么样的格式存数据。而行,是真正的数据。每一行需要遵循数据字段(列)的规范和要求进行存入数据。
貮 . MySQL 连接数据库
安装后,可以在开始菜单的列表中找到MySQL Command
Line 点击操作的命令行终端操作。效果如图:
如果加入到了windows的环境变量中,可以在命令行下直接操作。
在命令行下,通过以下命可以连接到数据库服务器:
mysql -h localhost -u root -p
上面的命令中: mysql 表示 mysql数据库启动工具。
参数 | 说明 |
---|---|
-h | 表示数据库连接地址,连接本机可不填 |
-u | 表示要登录的用户名 |
-p | 表示要登录的密码 |
如果登录成功如下所示:
mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.6.25 MySQL Community Server (GPL)
Copyright © 2000, 2015, 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>
上面的中文意思翻译过来是说,欢迎使用MySQL的命令行操作工具。每一个命令结束可以输入\g 或者 ;
mysql当前是第 7次连接。
当前数据库的版本是5.6.25社区支持版。遵循GPL协议。
版权所有:2000至 2015。归Oracle及其子机构拥有所有权。
如果需要帮助的话,通过 ‘help;’ 或者 ‘\h’ 命令来显示帮助内容,通过 ‘\c’ 命令来清除命令行历史。
mysql>
mysql > 表示等待输入指令。
注:
在登陆成功后有这么一句提示,可能大家不太理解:
Your MySQL connection id is 7
表示第7次连接登陆,每登陆一次这个id为加1。下一次显示的会是第8次。
叁 . Mysql数据库操作
1 . 创建数据库
类别 | 详细解释 |
---|---|
基本语法 | create database 数据库名; |
示例 | create database php ; |
创建一个数据库,数据库的名字为php , 示例:
mysql > creale database php
query ok ,1 row affected (0.00 sec)
“Query OK” 表示上面的命令执行成功,所有的 DDL 和 DML(不包
括 SELECT)操作执行成功后都显示“Query OK”,这里理解为执行成功就可以了;“1 row affected” 表示操作只影响了数据库中一行的记录,“0.00 sec”则记录了操作执行的时间。
1.2 . Linux系统中部署数据库: mysql
https://dev.mysql.com/downloads/mysql/
准备Linux环境: vmware虚拟软件 — 加载虚拟主机 — 启动
部署数据库服务: mariadb — yum install -y mariadb(操作数据库命令) mariadb-server
启动数据库服务: systemctl start mariadb
方式一: 连接数据库(命令行)
虚拟主机环境 — mysql -uroot
2 . 查看数据库
基本语法 : show databases;
示例说明 : 显示当前服务器的所有数据库
show 是指显示
databases 是数据库的复数形式 , 指全部的数据库
示例:
3. 选中数据库
基本语法 : use 库名
示例: use php;
//use 是指使用
4. 查看数据库中的表
基本语法 : show tables;
使用use 进入到某个数据库后可以使用show tables
示例,查看当前数据库的表
5. 删除数据库
基本语法 : drop database 库名
示例:drop database php;
示例说明 删除一个数库,数据库的名字为php
注意:drop 是汉语可以翻译为指掉下来,不要了的意思
database 是指库名 是指要删掉的库的名称
mysql> DROP DATABASE PHP;
Query OK, 0 rows affected (0.01 sec)
肆 . MySQL 数据表操作
1. 创建表
基本语法 : create table 表名
示例 : create table mm (username varchar(20),password varchar(32));
例说明 创建一个表名叫user的表,第一个字段为username、表的字段类型为varchar长度为32个长度。第二个字段为password,类型也为varchar,长度也为32个长度。
注释:
int , 代表整型 . float 代表, 浮点, char 和 varchar 代表字符串
CREATE TABLE emp(
ename varchar(10),
hiredate date,
sal float(10,2),
deptno int(2)
);
2. 查看表字段结构信息
基本语法 desc 表名;
示例 desc emp
示例说明 查看emp表的表结构
DESC emp;
3 . 查看表创建语句
类别 详细解示
基本语法 SHOW CREATE TABLE表名 \G;
示例 SHOW CREATE TABLE emp \G;
示例说明 查看表emp的创建语句
4. 删除表
基本语法 drop table 表名
示例 drop table emp;
示例说明 删除表emp
mysql> DROP TABLE emp;
Query OK, 0 rows affected (0.34 sec)
注:删除表。表和数据均会丢失,请勿必删除重要表之前备份数据。
5.指定引擎和字符集
指定表默认字符集:
DEFAULT CHARSET=utf8
效果如下:
CREATE TABLE emp (
useraname varchar(10) DEFAULT NULL,
password date DEFAULT NULL,
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
伍 . MySQL数据字段操作
1.查看表结构
命令 语句 : mysql> desc user;
图例:
2.修改表的字段类型modify
基本语法 alter table 表名 modify 字段名 varchar(20);
示例 alter table user modify username varchar(20);
示例说明 将user表的username的类型改为varchar(20)
我们执行一下,看看结果:
mysql> alter table user modify username varchar(20);
Query OK, 0 rows affected (0.48 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;
图例:
3.增加表字段
基本语法 alter table 表名 add column 字段名 类型;
示例 alter table user add column age int(3);
示例说明 添加一个字段为age,类型为整型长度为3
mysql> alter table emp add column age int(3);
Query OK, 0 rows affected (0.40 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;
图例:
3. 增加字段时控制字段顺序
我们刚刚学了增加字段。如果你仔细实验发现每次都是增加在最后面,如何在第一个增加或者在指字字段之后增加呢?
基本语法 ALTER TABLE 表名 ADD 字段名 字段类型 AFTER 字段名;
示例 ALTER TABLE user ADD email VARCHAR(60) AFTER createip;
示例说明 user表中,在uid后增加一个字段为fff,类型为varchar,长度为60
ALTERTABLE user ADD fff VARCHAR(60) AFTER uid;
Query OK, 0 rows affected (0.40 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;
图例:
4.删除表字段
基本语法 alter table 表名 drop column 字段名;
示例 alter table user drop column age;
示例说明 在user表中删除字段age
mysql> alter table user drop column age;
Query OK, 0 rows affected (0.27 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;
图例:
5. 表字段改名
基本语法 alter table 表名 change 字段原名 字段新名 字段类型;
示例 alter table user change email em varchar(60);
示例说明 在user表中将字段中的fff字段名字为em
详细示例:
mysql> alter table user change email em varchar(60);
Query OK, 0 rows affected (0.38 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;
6.修改表字段排列顺序
在前的字段增加和修改语句(add/change/modify)中,最后都可以加一个可选项 first|after。
增加表字段时我们已经学过了如何调整顺序。我们现在在来看看另外的change或modify如何来调整顺序。
我们用first做个小实验。
使用modify调整顺序
mysql> alter table user modify em varchar(60) first;
Query OK, 0 rows affected (0.41 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;
7. 修改表名
类别 详细解示
基本语法 alter table 旧表名 rename 新的表名;
示例 alter table user rename new;
示例说明 将user表名改为new
mysql> alter table user rename new;
Query OK, 0 rows affected (0.35 sec)
mysql> desc new_user;
陆 . Mysql数据类型
MySQL中存的是数据。只要是数据,我们就会规定数据的类型。在表的字段中规定了使用的是某个数据类型。那么,在插入的数据中就要使用对应的数据类型。并且,遵守数据类型的长度要求。
柒 . MySQL字符集
捌 . MySQL索引
说明 : 索引用于快速找出在某个列中有一特定值的行.
1.MySQL的索引类型
普通索引
基本语法 alter table 表 add index(字段)
示例 ALTER TABLE new ADD INDEX(username);
示例解释 为money表的username字段增加索引
唯一索引
类型 详细说明
基本语法 alter table 表 add UNIQUE(字段)
示例 ALTER TABLE new ADD UNIQUE(em);
示例解释 为money表的email字段增加唯一索引
主键索引
类型 详细说明
基本语法 alter table 表 add PRIMARY KEY(字段)
示例 ALTER TABLE new ADD PRIMARY KEY(uid);
示例解释 为money表的id字段增加主键索引
创建表时也可以声明索引
创建表时可在创建表语句后加上对应的类型即可声明索引:
玖 . 增删改查值插入记录
插入基本语法一
基本语法 insert into 表 values(值1,值2,值n);
示例 INSERT INTO user values(2,‘php中文网’,‘男’)
示例说明 向user表中插入值id为2,姓名为李文凯,性别为男
插入基本语法二
基本语法 insert into 表(字段1,字段2,字段n) values(值1,值2,值n);
示例 INSERT INTO user(id,username,sex) values(213,‘小沈阳’,1);
示例说明 向user表中插入id为213,username为小沈阳,性别为1
1.插入记录有两种个基本语法
说明:
基本语法1和基本语法2的区别是:
基本语法1的插入语句,表中有多少个字段就必须要插入多少个值。一个不能多,一个也不能少。若有默认值,不想传,可以写上null。
基本语法2中,除非有必填字段必须要写入值外。如果有默认值的不想写可以忽略不写。mysql会自动补主默认值。
基本语法2中,以user(id,username,sex)字段顺序为值的顺序。
按照基本语法二写上表中的插入语句:
INSERT INTO user(username,sex) values(‘oldboy’,10);
基本语法变形:一次插入多条记录
INSERT INTO user(username,password,sex)
values(‘黄晓明’, ‘abcdef’, 1),
( ‘angelababy’, ‘bcdeef’, 0),
( ‘陈赫’, ‘123456’, 1),
(‘王宝强’, ‘987654’, 1);
拾 . MySQL多表联合查询
user表创建语句:
CREATE TABLE IF NOT EXISTS user (
uid int(11) NOT NULL,
username varchar(30) NOT NULL,
password char(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS order_goods (
oid int(11) NOT NULL,
uid int(11) NOT NULL,
name varchar(50) NOT NULL,
buytime int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
user表数据:
INSERT INTO user(uid,username,password) values(‘1’,‘jintian’,‘123456’);
INSERT INTO user(uid,username,password) values(‘2’,‘zhangsha’,‘1234f56’);
INSERT INTO user(uid,username,password) values(‘3’,‘wangwu’,‘1234fs56’);
INSERT INTO user(uid,username,password) values(‘4’,‘lisi’,‘123s456’);
INSERT INTO user(uid,username,password) values(‘5’,‘xiaotian’,‘123d456’);
INSERT INTO user(uid,username,password) values(‘6’,‘wangfei’,‘123f456’);
INSERT INTO user(uid,username,password) values(‘7’,‘oldboy’,‘123w456’);
INSERT INTO user(uid,username,password) values(‘8’,‘oldboyww’,‘123w45ee6’);
rder_goods数据如下:
INSERT INTO order_goods(oid,uid,name,buytime) values(‘1’,‘7’,‘opper’,‘12345622’);
INSERT INTO order_goods(oid,uid,name,buytime) values(‘2’,‘2’,‘iphone’,‘1234356’);
INSERT INTO order_goods(oid,uid,name,buytime) values(‘3’,‘4’,‘xieli’,‘12342s56’);
INSERT INTO order_goods(oid,uid,name,buytime) values(‘4’,‘3’,‘lisi’,‘12322456’);
INSERT INTO order_goods(oid,uid,name,buytime) values(‘5’,‘5’,‘juzi’,‘12344456’);
INSERT INTO order_goods(oid,uid,name,buytime) values(‘6’,‘6’,‘tianmiju’,‘12322456’);
INSERT INTO order_goods(oid,uid,name,buytime) values(‘7’,‘1’,‘xiangjiao’,‘12311456’);
注意:在上表order_goods表中uid是指user表中的uid字段。上表中oid为1的数据行,uid为7的用户。为user表中uid为7的用户:oldboy。该用户购买了商品为xiangjiao。购买时间buytime为一个unix时间戳。
mysql>
select u.uid ,u.username as username,o.oid,o.uid,o.name as shopname from user u,order_goods o where u.uid = o.uid;
拾壹 . PHP操作MySQL数据库
在正式开始学习前,我们需要开启mysqli扩展,使用phpinof()你可以看到如下展示就说明开启成功:
若没有看到mysqli扩展在windows服务器下,打开php.ini文件,将php_mysqli.dll打开即可。
注意:
从PHP7开始默认不再支持mysql扩展,即不再支持mysql_*系列函数。请使用mysqli连接数据库。
mysqli即支持php5也支持php7。
创建表结构:
CREATE TABLE IF NOT EXISTS users (
id INT(10) NOT NULL,
username varchar(30),
password varchar(30),
createtime date not null,
createip binary(16)
);
拾贰 . PHP操作mysql数据库
在正式开始学习前,我们需要开启mysqli扩展,使用phpinof()你可以看到如下展示就说明开启成功:
创建表结构:
CREATE TABLE IF NOT EXISTS users (
id INT(10) NULL,
username varchar(30),
password varchar(200),
createtime varchar(200) not null,
createip binary(16)
);
<html>
<head> <meta charset="UTF-8">
</head>
<body>
<form action="connect.php" method="post">
用户名:<input type="text" name="username"><br />
密码:<input type="password" name="password"><br />
重复密码:<input type="password" name="repassword"><br />
<input type="submit" value="提交">
</form>
</body>
</html>
<?php
if (trim($_POST['password']) != trim($_POST['repassword'])) {
exit('两次密码不一致,请返回上一页');
}
$username = trim($_POST['username']);
$password = md5(trim($_POST['password']));
$time = time();
$ip = $_SERVER['REMOTE_ADDR'];
$conn = mysqli_connect('localhost', 'root', 'root');
//如果有错误,存在错误号
if (mysqli_errno($conn)) {
echo mysqli_error($conn);
exit;
}
mysqli_select_db($conn, 'ddd');
mysqli_set_charset($conn, 'utf8');
$sql = "insert into users(username,password,createtime,createip) values('" . $username . "','" . $password . "','" . $time . "','" . $ip . "');";
$result = mysqli_query($conn, $sql);
if ($result) {
echo '成功';
} else {
echo '失败';
}
echo '当前用户插入的ID为' . mysqli_insert_id($conn);
mysqli_close($conn);
?>