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