drop table test.student;
mysql用户管理
mysql
提供了一套完善的数据库用户以及权限管理系统。
创建和删除用户
使用create
语句创建用户:
create user 'username'@'host' idendified by 'password';
username
表示为创建的用户名,host
指定该用户在哪个主机上可以登录。
create user 'test1'@'localhost' idendified by '1234';
create user 'test3'@'122.xxx' idendified by '1234';
使用drop
语句可以删除用户,语法格式:
drop user 'username'@'host';
示例如下:
drop user 'test1'@'localhost';
授予与回收用户权限
授予用户权限
grant
语句可以对用户进行授权:
grant privileges on dbname.tablename TO 'username'@'host';
privileges
表示要授予用户的操作权限。
grant select, insert on mysql.test TO 'test1'@'%';
表示授权用户test1
在所有登录主机均对mysql
库的test
表拥有select
和insert
权限。
grant all on *.* TO 'test2'@'localhost';
表示授权用户test2
在本地主机数据库的所有库的所有表拥有所有权限。
回收用户权限
使用revoke
语句可以对权限进行回收。
revoke privileges on databasename.tablename from 'username'@'host';
revoke select on *.* from 'test2'@'localhost';
设置与更改用户密码
使用mysql
所提供的密码设置与更改语句,语法格式:
set password for 'username'@'host' = password('newpassword');
username
表示要设置或更改密码的用户名;
host
指定该用户的登录主机;
newpassword
表示要设置或更改的密码。
set password for 'test1'@'localhost' = password('12345');
什么是数据库
数据库是按照数据结构来组织,存储和管理数据的仓库。每个数据库都有一个或多个不同的api
用于创建,访问,管理,搜索,复制所保存的数据。
将数据存储在文件中,但是在文件中读写数据速度相对较慢。
数据库是一些关联表的集合。
数据表是数据的矩阵。
列,一列包含了相同类型的数据。
行,一行是一组相关的数据。
冗余,存储两倍数据,冗余降低了性能,但提高了数据的安全性。
主键,是唯一的,一个数据表中只能包含一个主键。
外键,用于关联两个表。
复合键,将多个列作为一个索引键,一般用于复合索引。
索引,使用索引可以快速访问数据库中的特定信息。
参照完整性,参照的完整性要求关系中不允许引用不存在的实体。
一个关系型数据库由一个或数个表格组成:表头,行,列,键,值。
表头为每一列的名称,列为具有相同数据类型的数据的集合,行为每一行用来描述某条记录的具体信息,值为行的具体信息,每个值必须与该列的数据类型相同,键的值在当前列中具有唯一性。
MySQL
下载地址为: MySQL
下载
https://dev.mysql.com/downloads/mysql/
安装 MySQL
https://dev.mysql.com/downloads/repo/yum/
Mysql
安装成功后,默认的root
用户密码为空,可以使用以下命令来创建root
用户的密码:
[root@host]# mysqladmin -u root password "new_password";
登录Mysql
命令行:mysql -h 主机名 -u 用户名 -p
运行mysql服务:
mysql -h localhost -u root -p
MySQL PHP 语法
PHP Mysqli函数格式如下:
mysqli_function(value,value,...);
mysqli_connect($connect);
mysqli_query($connect,"SQL 语句");
mysqli_fetch_array()
mysqli_close()
使用 PHP 脚本连接 MySQL
mysqli_connect()
函数来连接数据库
mysqli_connect(host,username,password,dbname,port,socket);
参数说明:
host
为主机或ip
地址;
username
为mysql
用户名;
password
为mysql
密码;
dbname
为默认使用的数据库;
port
尝试连接到mysql
服务器的端口号;
bool mysqli_close ( mysqli $link )
连接mysql
服务器:
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '123456';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
die('Could not connect: ' . mysqli_error());
echo '数据库连接成功!';
mysqli_close($conn);
mysql
创建数据库
使用create
命令创建数据库,语法:
create database 数据库名;
使用php脚本创建数据库
语法:mysqli_query(connection,query,resultmode);
connection
为要使用的mysql
连接;
query
为查询字符串;
resultmode
一个常量,值MYSQLI_USE_RESULT
和MYSQLI_STORE_RESULT
。
使用PHP来创建一个数据库
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '123456';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
die('连接错误: ' . mysqli_error($conn));
echo '连接成功<br />';
$sql = 'create database web';
$retval = mysqli_query($conn,$sql );
if(! $retval )
die('创建数据库失败: ' . mysqli_error($conn));
echo "数据库 web 创建成功\n";
mysqli_close($conn);
drop命令删除数据库
drop
命令格式:
drop database <数据库名>;
使用php脚本删除数据库
mysqli_query(connection,query,resultmode);
使用PHP mysqli_query
函数来删除数据库:
删除数据库:
$dbhost = 'localhost:3306';
$dbuser = 'root';
$dbpass = '123456';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
die('连接失败: ' . mysqli_error($conn));
echo '连接成功<br />';
$sql = 'DROP DATABASE web';
$retval = mysqli_query( $conn, $sql );
if(! $retval )
die('删除数据库失败: ' . mysqli_error($conn));
echo "数据库 web 删除成功\n";
mysqli_close($conn);
使用PHP脚本选择MySQL数据库
使用函数mysqli_select_db
来获取一个数据库
mysqli_select_db(connection,dbname);
mysqli_select_db
函数来选取一个数据库:
选择数据库
$dbhost = 'localhost:3306';
$dbuser = 'root';
$dbpass = '123456';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
die('连接失败: ' . mysqli_error($conn));
echo '连接成功';
mysqli_select_db($conn, 'web' );
mysqli_close($conn);
MySQL 数据类型
mysql
支持多种类型,分三类:
日期/时间;
字符串类型。
MySQL 5.0 以上的版本
1、一个汉字占多少长度与编码有关:
UTF-8:一个汉字=3个字节
GBK:一个汉字=2个字节
2、varchar(n)
表示 n 个字符,无论汉字和英文,Mysql
都能存入 n 个字符,仅是实际字节长度有所区别
3、MySQL
检查长度,可用 SQL
语言来查看
MySQL 创建数据表
定义每个表字段
创建mysql
数据表的sql
语法。
CREATE TABLE table_name (column_name column_type);
在数据库中创建数据表:
create table if not exists `table_tb` (
`table_id` int unsigned auto_increment,
`table_title` varchar(100) not null,
`table_author` varchar(40) not null,
`table_date` date,
primary key (`table_id`)
)engine=InnoDB default charset = utf8;
注意:在auto_increment
定义列为自增的属性,一般用于主键,数值会自动加1,。engine设置存储引擎,charset设置编码。
创建数据表
$dbhost = 'localhost:3306';
$dbuser = 'root';
$dbpass = '123456';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
die('连接失败: ' . mysqli_error($conn));
echo '连接成功<br />';
$sql = "create table table_tbl( ".
"table_id int not null auto_increment, ".
"table_title varchar(100) not null, ".
"table_author varchar(40) not null, ".
"submission_date DATE, ".
"primary key ( runoob_id ))ENGINE=InnoDB DEFAULT CHARSET=utf8; ";
mysqli_select_db( $conn, 'RUNOOB' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
die('数据表创建失败: ' . mysqli_error($conn));
echo "数据表创建成功\n";
mysqli_close($conn);
MySQL 字段属性应该尽量设置为 NOT NULL
首先,考虑空值“”和null的概念:
空值是不占用空间的
mysql
中null
其实是占用空间的
MySQL删除数据表
语法,删除mysql
数据表的语法:
drop table table_name;
使用PHP脚本删除数据表
mysqli_query(connection,query,resultmode);
使用了PHP脚本删除数据表:
$dbhost = 'localhost:3306';
$dbuser = 'root';
$dbpass = '123456';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
die('连接失败: ' . mysqli_error($conn));
echo '连接成功<br />';
$sql = "drop table table_tb1";
mysqli_select_db( $conn, 'web' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
die('数据表删除失败: ' . mysqli_error($conn));
echo "数据表删除成功\n";
mysqli_close($conn);
MySQL 插入数据
mysql
数据表插入数据通用insert into
语法:
insert into table_name(field1,field2,...fieldN)
values
(value1,value2,...valueN);
$dbhost = 'localhost:3306';
$dbuser = 'root';
$dbpass = '123456';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
die('连接失败: ' . mysqli_error($conn));
echo '连接成功<br />';
mysqli_query($conn , "set names utf8");
$table_title = '学习';
$table_author = 'web';
$submission_date = '2018-03-06';
$sql = "insert into table_tbl ".
"(table_title,table_author, submission_date) ".
"values ".
"('$table_title','$table_author','$submission_date')";
mysqli_select_db( $conn, 'web' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
die('无法插入数据: ' . mysqli_error($conn));
echo "数据插入成功\n";
mysqli_close($conn);
INSERT 插入多条数据
INSERT INTO table_name (field1, field2,...fieldN) VALUES (valueA1,valueA2,...valueAN),(valueB1,valueB2,...valueBN),(valueC1,valueC2,...valueCN)......;
SQL基本语法
学习sql
语句和mysql
基本数据类型,学习掌握数据插入,修改,删除的sql语句,查询语句,以及各类特定的查询语句。
学会数据库事务的概念,特性以及使用方法。
sql
的目录也整理一个思维导图:
sql语句简介
结构化查询语言简称SQL
,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
sql
语句就是对数据库进行操作的一种语言。
sql
分三种类型:
DDL
语句,数据定义语句,定义了不同数据库,表,列,索引等数据库对象。
DML
语句,数据操作语句,用于添加,删除,更新和查询数据库记录,并检查数据完整性。
DCL
语句,数据控制语句,定义数据库,表,字段,用户的访问权限和安全级别。
mysql基本数据类型
mysql
提供了多种数据类型,包括数值类型,字符串类型,日期和时间类型。
字符串类型
日期和时间类型
mysql
的数值类型:
浮点数类型
定点数类型
整数类型:
tinyint
small int
medium int
big int
浮点数类型:
float
double
定点数类型:
decimal
整数类型的划分是根据存储空间的大小和表示范围的大小来划分
浮点类型是用来表示实数的一种方法,根据位数和精度,浮点类型分单精浮点数(8位精度)和双精浮点数(16位精度)。
字符串类型
提供了多种字符串类型:
varchar
binary
varbinary
char与varchar
char
定义固定长度字符串
varchar
定义可变长度字符串
char
的长度固定为创建表时声明的长度,其取值范围为0到255,当保存char
值时,在右边填充空格以达到指定的长度。
当检索到char
值时,其尾部的空格会被删除,所以在存储时,一般字符串右边不能有空格。如果字符串右边有空格,在查询出来后会被删除。
varchar
的长度可以指定为0到6535,varchar
值在保存时只保存需要的字符串,并另外加一个字节来记录长。
binary
与varbinary
binary
和varbinary
用来存储二进制字符串。没有字符集,并且会排序和比较基于列值字节的数值。
text与blob
text
和blob
是以对象类型保存的文本与二进制。
text
视为足够大的varchar
,将blob
视为足够大的varbinary
,但text
和blob
与varchar
和varbinary
的不同之处:
当保存或检索blob
和text
的值时不删除尾部空格。
在比较时,会用空格对text
进行扩充以适应比较的对象。
对于blob
和text
的索引,必须制定索引前缀的长度。
blob
和text
不能有默认值。
对弈text
和blob
对象的最大字符串长度由其类型确定。
text
分为tinytext
,text
,mediumtext
和longtext
四种类型。
blog
分为tinyblob
,blob
,mediumblob
和longblob
四种类型。
enum
表示枚举类型,它的取值范围需要在创建表时通过枚举方式显式制定。enum
是忽略大小写的。enum
只允许从值集合中选取单个值,不能一次选取多个值。
set是一个集合对象,可以包含0到64个成员,其所占存储空间的大小是因集合成员数量的不同而有所不同的。
日期和事件类型
提供了多种日期和时间类型:
datetime
timestamp
日期格式,year
,YYYY;time
,HH:MM:SS;date
,YYYY-MM-DD;datetime
,YYYY-MM-DD HH:MM:SS,timestamp
,YYYY-MM-DD HH:MM:SS。
insert into 表名 values (值1,值2,...);
insert into 表名 (列1,列2,...) values (值1,值2);
在mysql
中,insert
语句,可以一次性插入多条记录,语法格式如下。
insert into 表名 (列1,列2,...) values (值1,值2,...), (值1,值2,...),...;
通过update
命令进行修改:
update 表名 set 列名 = 新值 whert 列名 = 某值;
update 表1,表2,...set 表1.列1,表2.列2,...where 条件;
可以使用delete
命令进行删除:
delete from 表名 where 列名=值;
delete
命令可以一次删除多个表的数据:
delete 表1,表2,... from 表1,表2,...where 条件;
最基本的select
语句的语法格式:
select 字段 from 表名 where 条件;
条件查询的语句:
select 字段 from 表名 where 条件;
union
操作符
union
操作符用于合并两个或多个select
语句的结果集。
select 条件 from 表1
union
select 条件 from 表2;
union
和union all
的主要区别
union all
用于将结果集直接合并在一起。
union
用于将union all
后的解构进行一次distinct
,以删除重复结果记录。
不重复查询
语法格式如下:
select distinct 字段 from 表名;
语法格式:
select 字段 from 表名 where 字段 like 值;
%
的使用,用来匹配0个或多个字符,可以匹配任意类型和长度的字符,对长度没有限制。
“_”
的使用,用来匹配任意单个字符,常用来限制表达式的字符长度。
使用order by
关键字来排序:
select 字段 from 表名 where 条件 order by field1 desc/asc, field2 desc/asc, ...;
排序方式:desc
表示降序排列,asc
表示升序排序。默认值为asc
。
order by
后面可以跟多个不同的排序字段。
使用limit
关键字进行限制查询,格式:
select 字段 limit 起始偏移量,行数;
聚合语句格式:
select 字段 op_name from 表名 where 条件 group by filed1, filed2, ... with rollup having 条件;
op_name
表示要进行的聚合操作,就是聚合函数。
聚合函数:
sum
函数求和
count
函数记录数
max
函数最大值
min
函数最小值
groupby
表示要进行分类聚合的字段
with rollup
表示是否对分类聚合后的结果进行在汇总
having
表示对分类后的结果进行条件过滤
内连接查询是指所有查询的结果都能够在连接的表中有对应记录。在默认情况下是内连接,可以不写join
关键字,或者写inner join
。
join
分三类:
inner join
:获取两个表中字段匹配关系的记录。
left join
:获取左表所有记录,即使右表没有对应匹配的记录。
right join
:用于获取右表所有记录,即使左表没有对应匹配的记录。
事务概述:事务,一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元。
事务由事务开始和事务结束之间执行的全体操作组成。
事务就是一组由sql
语句组成的业务逻辑,只有事务内的所有sql
语句都成功执行,整个事务才算成功,否则就是失败。
事务的四大特性
默认情况下,sql
语句是自动提交的,每条sql
语句在执行完毕后会 自动提交事务,要想统一提交事务,需要先关闭mysql
的自动提交功能。
查看数据库是否开启自动提交:
show variables like 'autocommit';
使用命令关闭自动提交:
set autocommit=0;
命令手动进行事务提交:
commit
事务中已执行成功的语句结果应该回退至未执行状态,称为事务回滚。
事务回滚:
rollback
事务隔离级别
事务的并发读问题
脏读:读取到另一个事务未提交数据;
不可重复读:两次读取不一致;
幻读(虚读):读到另一事务已提交数据。
事务以begin transaction
开始:
begin transaction <事务名称> |@ <事务变量名称>
语法说明如下:
@<事务变量名称>
由用户定义的变量,必须用char,varchar,nchar或nvarchar
数据类型来声明该变量。
begin transaction
语句的执行。
commit
表示提交事务,即提交事务的所有操作。
rollback
表示撤销事务,即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销,回滚到事务开始时的状态。
语法格式:
rollback[transaction]
MySQL 正则表达式
^
匹配输入字符串的开始位置。
$
匹配输入字符串的结束位置。
[...]
字符集合。匹配所包含的任意一个字符。
[^...]
负值字符集合。匹配未包含的任意字符。
*
匹配前面的子表达式零次或多次。
+
匹配前面的子表达式一次或多次。
{n}
n 是一个非负整数。匹配确定的 n 次。
{n,m}
m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
sql语句
sql
语句:
select lastname from persons
select
从数据库表中获取数据
update
更新数据库表中的数据
delete
从数据库表中删除数据
insert into
向数据库表中那个插入数据
DDL语句
create database
创建新数据库
alter database
修改数据库
create table
创建新表
drop table
删除表
alter table
变更数据库表
create index
创建索引
drop index
删除索引
SELECT
语句用于从表中选取数据。
SELECT 列名称 FROM 表名称
SELECT * FROM 表名称
SELECT LastName,FirstName FROM Persons
SQL SELECT DISTINCT
语句
在表中,可能会包含重复值。关键词 DISTINCT 用于返回唯一不同的值。
SELECT DISTINCT 列名称 FROM 表名称
WHERE
子句用于规定选择的标准。
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
如果第一个条件和第二个条件都成立,则 AND
运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR
运算符显示一条记录。
ORDER BY
语句用于对结果集进行排序。
INSERT INTO
语句
INSERT INTO 表名称 VALUES (值1, 值2,....)
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
Update
语句用于修改表中的数据。
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
DELETE
语句用于删除表中的行。
DELETE FROM 表名称 WHERE 列名称 = 值
数据库的发展历程:
网状型数据库
层次型数据库
关系数据库
面向对象数据库
关系数据库:
桌面数据库
客户/服务器数据库
数据表是存储数据的逻辑单元。
数据表中,一行称为一条记录,一列称为一个字段。
主键:唯一标识此条记录。
扫码关注公众号,订阅更多精彩内容。
- 120
-
浏览器API调用工程师_Taylor
Node.js
MySQL
- 1397
-
京东云开发者
MySQL
Elasticsearch