本地连接数据库:
mysql -u root -p #[root@host]
使用 PHP 脚本连接 MySQL:
mysqli_connect(host,username,password,dbname,port,socket);
启动:
cd c:/mysql/bin
mysqld --console
关闭:
cd c:/mysql/bin
mysqladmin -uroot shutdown
添加新用户
INSERT INTO user
添加用户的的实例,用户名为guest,
密码为guest123,
并授权用户可进行 SELECT, INSERT 和 UPDATE操作权限:
INSERT INTO user
(host, user, password,
select_priv, insert_priv, update_priv)
VALUES (‘localhost’, ‘guest’,
PASSWORD(‘guest123’), ‘Y’, ‘Y’, ‘Y’);
注意:在 MySQL5.7 中 user 表的 password 已换成了authentication_string。
注意:password() 加密函数已经在 8.0.11 中移除了,可以使用 MD5() 函数代替。
注意:在注意需要执行 FLUSH PRIVILEGES 语句。 这个命令执行后会重新载入授权表。
如果你不使用该命令,你就无法使用新创建的用户来连接mysql服务器,除非你重启mysql服务器。
你可以在创建用户时,为用户指定权限,
在对应的权限列中,在插入语句中设置为 ‘Y’ 即可,
用户权限列表如下:
Select_priv
Insert_priv
Update_priv
Delete_priv
Create_priv
Drop_priv
Reload_priv
Shutdown_priv
Process_priv
File_priv
Grant_priv
References_priv
Index_priv
Alter_priv
另外一种添加用户的方法:例子
root@host# mysql -u root -p
Enter password:*******
mysql> use mysql;
Database changed
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON TUTORIALS.* #指定的数据库名
-> TO ‘zara’@‘localhost’ #用户名
-> IDENTIFIED BY ‘zara123’; #密码
/etc/my.cnf 文件配置(默认文件配置)
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
[mysql.server]
user=mysql
basedir=/var/lib
[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
管理MySQL的命令:
USE 数据库名 :
#选择要操作的Mysql数据库 使用该命令后所有Mysql命令都只针对该数据库。
SHOW DATABASES:
#列出 MySQL 数据库管理系统的数据库列表。
SHOW TABLES:
#显示指定数据库的所有表,使用该命令前需要使用 use 命令来选择要操作的数据库。
SHOW COLUMNS FROM 数据表名:
#显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。
SHOW INDEX FROM 数据表:
#显示数据表的详细索引信息,包括PRIMARY KEY(主键)。
SHOW TABLE STATUS LIKE [FROM db_name] [LIKE ‘pattern’] \G:
#该命令将输出Mysql数据库管理系统的性能及统计信息。
用法:如
SHOW TABLE STATUS FROM RUNOOB; # 显示数据库 RUNOOB 中所有表的信息
SHOW TABLE STATUS from RUNOOB LIKE ‘runoob%’; # 表名以runoob开头的表的信息
SHOW TABLE STATUS from RUNOOB LIKE ‘runoob%’\G; # 加上 \G,查询结果按列打印
MySQL 创建数据库:
CREATE DATABASE 数据库名;
使用 mysqladmin 创建数据库 #特定的权限来创建或者删除 MySQL 数据库:
mysqladmin -u root -p create RUNOOB #登录加建库
使用 PHP脚本 创建数据库:
mysqli_query(connection,query,resultmode);
resultmode可选:
可选。一个常量。可以是下列值中的任意一个:
MYSQLI_USE_RESULT(如果需要检索大量数据,请使用这个)
MYSQLI_STORE_RESULT(默认)
MySQL 删除数据库:
drop database <数据库名>;
执行以上删除数据库命令后,会出现一个提示框,来确认是否真的删除数据库:
使用PHP脚本删除数据库:
mysqli_query(connection,query,resultmode);
和建库差不多
MySQL 选择数据库:
use 数据库名;
使用PHP脚本选择MySQL数据库:
mysqli_select_db(connection,dbname);
MySQL 数据类型:
整数类型:
tinyint smallint mediumint int integer bigint float double decimal
日期和时间类型:
DATE time year datetime time stamp
字符串类型:
char varchar tinyblob tinytext blob text mediumblob mediumtext longblob longtext
MySQL 创建数据表:
表名 表字段名 定义每个表字段
CREATE TABLE table_name (column_name column_type);
例如:
CREATE TABLE IF NOT EXISTS runoob_tbl
(
runoob_id
INT UNSIGNED AUTO_INCREMENT, #自增+1
runoob_title
VARCHAR(100) NOT NULL,
runoob_author
VARCHAR(40) NOT NULL,
submission_date
DATE,
PRIMARY KEY ( runoob_id
) #主键
)ENGINE=InnoDB DEFAULT CHARSET=utf8; #字符编码
通过命令提示符创建表:使用 SQL 语句 CREATE TABLE 来创建数据表。
CREATE TABLE 数据表名(column_name column_type
column_name column_type 属性,
column_name column_type 属性,
column_name column_type 属性,
PRIMARY KEY (数据库名)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
使用PHP脚本创建数据表:(懒得写)
mysqli_query(connection,query,resultmode);
MySQL 删除数据表:
DROP TABLE table_name ;
使用PHP脚本删除数据表:
mysqli_query(connection,query,resultmode);
MySQL 插入数据: INSERT INTO SQL语法:
INSERT INTO table_name ( field1, field2,…fieldN )
VALUES
( value1, value2,…valueN );
注意:如果数据是字符型,必须使用单引号或者双引号,如:“value”。
通过命令提示窗口插入数据:
INSERT INTO runoob_tbl
(runoob_title, runoob_author, submission_date)
VALUES
(“学习 PHP”, “菜鸟教程”, NOW());
使用PHP脚本插入数据:
mysqli_query(connection,query,resultmode);
MySQL 查询数据:通用的 SELECT 语法:
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
SELECT 命令可以读取一条或者多条记录。
你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
你可以使用 WHERE 语句来包含任何条件。
你可以使用 LIMIT 属性来设定返回的记录数。
你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
通过命令提示符获取数据;
使用PHP脚本来获取数据:
PHP 函数的 mysqli_query() 及 SQL SELECT 命令来获取数据。
该函数用于执行 SQL 命令,然后通过 PHP 函数 mysqli_fetch_array() 来使用或输出所有查询的数据。
mysqli_fetch_array() 函数从结果集中取得一行作为关联数组,
或数字数组,或二者兼有 返回根据从结果集取得的行生成的数组,
如果没有更多行则返回 false;
执行完 SELECT 语句后,释放游标内存
通过 PHP 函数 mysqli_free_result() 来实现内存的释放。
MySQL WHERE 子句:
SELECT field1, field2,…fieldN FROM table_name1, table_name2…
[WHERE condition1 [AND [OR]] condition2…
查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。
你可以在 WHERE 子句中指定任何条件。
你可以使用 AND 或者 OR 指定一个或多个条件。
WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。
WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。
从命令提示符中读取数据:
使用PHP脚本读取数据:
MySQL UPDATE 更新 :
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
例如:
UPDATE runoob_tbl SET runoob_title=‘学习 C++’ WHERE runoob_id=3;
你可以同时更新一个或多个字段。
你可以在 WHERE 子句中指定任何条件。
你可以在一个单独表中同时更新数据。
使用PHP脚本更新数据:
MySQL DELETE 语句 :
DELETE FROM table_name [WHERE Clause]
注意:如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
你可以在 WHERE 子句中指定任何条件
您可以在单个表中一次性删除记录。
从命令行中删除数据:
例如:
DELETE FROM runoob_tbl WHERE runoob_id=3;
使用 PHP 脚本删除数据:
PHP使用 mysqli_query() 函数来执行SQL语句
你可以在 SQL DELETE 命令中使用或不使用 WHERE 子句。
MySQL LIKE 子句:
我们需要获取 runoob_author 字段含有 “COM” 字符的所有记录,这时我们就需要在 WHERE 子句中使用 SQL LIKE 子句。
SQL LIKE 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号 *。
如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。
SELECT field1, field2,…fieldN
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = ‘somevalue’
你可以在 WHERE 子句中指定任何条件。
你可以在 WHERE 子句中使用LIKE子句。
你可以使用LIKE子句代替等号 =。
LIKE 通常与 % 一同使用,类似于一个元字符的搜索。
你可以使用 AND 或者 OR 指定一个或多个条件。
你可以在 DELETE 或 UPDATE 命令中使用 WHERE…LIKE 子句来指定条件。
例如:
SELECT * from runoob_tbl WHERE runoob_author LIKE ‘%COM’;
在PHP脚本中使用 LIKE 子句:
使用PHP函数的 mysqli_query() 及相同的 SQL SELECT 带上 WHERE…LIKE 子句的命令来获取数据
MySQL UNION 操作符:
MySQL UNION 操作符语法格式:
SELECT expression1, expression2, … expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, … expression_n
FROM tables
[WHERE conditions];
参数
expression1, expression2, … expression_n: 要检索的列。
tables: 要检索的数据表。
WHERE conditions: 可选, 检索条件。
DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
ALL: 可选,返回所有结果集,包含重复数据。
例如:
SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;
SQL UNION ALL 实例:
SELECT country FROM Websites
UNION ALL
SELECT country FROM apps
ORDER BY country;
带有 WHERE 的 SQL UNION ALL:
实例:
SELECT country, name FROM Websites
WHERE country=‘CN’
UNION ALL
SELECT country, app_name FROM apps
WHERE country=‘CN’
ORDER BY country;
MySQL 排序:
SQL SELECT 语句使用 ORDER BY 子句将查询数据排序后再返回数据
SELECT field1, field2,…fieldN FROM table_name1, table_name2…
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2…] [ASC [DESC][默认 ASC]]
你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
你可以设定多个字段来排序。
你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
你可以添加 WHERE…LIKE 子句来设置条件。
在命令提示符中使用 ORDER BY 子句:
在 PHP 脚本中使用 ORDER BY 子句:
MySQL GROUP BY 语句 :
GROUP BY 语法
GROUP BY 语句根据一个或多个列对结果集进行分组。
在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
使用 WITH ROLLUP:
WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。
例如我们将以上的数据表按名字进行分组,再统计每个人登录的次数:
SELECT name, SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP;
使用 coalesce 来设置一个可以取代 NUll 的名称,coalesce 语法:
select coalesce(a,b,c);
参数说明:如果anull,则选择b;如果bnull,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)。
实例中如果名字为空我们使用总数代替:
mysql> SELECT coalesce(name, ‘总数’), SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP;
MySQL 连接的使用:
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
在命令提示符中使用 INNER JOIN
SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
在 PHP 脚本中使用 JOIN:
MySQL NULL 值处理:
IS NULL: 当列的值是 NULL,此运算符返回 true。
IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
<=>: 比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时返回 true。
注意:
select * , columnName1+ifnull(columnName2,0) from tableName;
columnName1,columnName2 为 int 型,当 columnName2 中,有值为 null 时,columnName1+columnName2=null, ifnull(columnName2,0) 把 columnName2 中 null 值转为 0。
MySQL 正则表达式:
查找name字段中以’st’为开头的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘^st’;
查找name字段中以’ok’为结尾的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘ok ′ ; 查 找 n a m e 字 段 中 包 含 ′ m a r ′ 字 符 串 的 所 有 数 据 : m y s q l > S E L E C T n a m e F R O M p e r s o n t b l W H E R E n a m e R E G E X P ′ m a r ′ ; 查 找 n a m e 字 段 中 以 元 音 字 符 开 头 或 以 ′ o k ′ 字 符 串 结 尾 的 所 有 数 据 : m y s q l > S E L E C T n a m e F R O M p e r s o n t b l W H E R E n a m e R E G E X P ′ [ a e i o u ] ∣ o k '; 查找name字段中包含'mar'字符串的所有数据: mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar'; 查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据: mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok ′;查找name字段中包含′mar′字符串的所有数据:mysql>SELECTnameFROMpersontblWHEREnameREGEXP′mar′;查找name字段中以元音字符开头或以′ok′字符串结尾的所有数据:mysql>SELECTnameFROMpersontblWHEREnameREGEXP′[aeiou]∣ok’;
MySQL 事务:
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
事务用来管理 insert,update,delete 语句
MYSQL 事务处理主要有两种方法:
1、用 BEGIN, ROLLBACK, COMMIT来实现
BEGIN 开始一个事务
ROLLBACK 事务回滚
COMMIT 事务确认
2、直接用 SET 来改变 MySQL 的自动提交模式:
SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1 开启自动提交
PHP中使用事务实例:
MySQL ALTER命令:
如下命令使用了 ALTER 命令及 DROP 子句来删除以上创建表的 i 字段:
mysql> ALTER TABLE testalter_tbl DROP i;
如果数据表中只剩余一个字段则无法使用DROP来删除字段。
MySQL 中使用 ADD 子句来向数据表中添加列,如下实例在表 testalter_tbl 中添加 i 字段,并定义数据类型:
mysql> ALTER TABLE testalter_tbl ADD i INT;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;
修改字段类型及名称:
把字段 c 的类型从 CHAR(1) 改为 CHAR(10),可以执行以下命令:
mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);
使用 CHANGE 子句, 语法有很大的不同。 在 CHANGE 关键字之后,紧跟着的是你要修改的字段名,然后指定新字段名及类型。尝试如下实例:
mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;
mysql> ALTER TABLE testalter_tbl CHANGE j j INT;
修改字段默认值:
ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
SHOW COLUMNS FROM testalter_tbl;
ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
SHOW COLUMNS FROM testalter_tbl;
修改数据表类型:
可以使用 ALTER 命令及 TYPE 子句来完成。尝试以下实例,我们将表 testalter_tbl 的类型修改为 MYISAM :
注意:查看数据表类型可以使用 SHOW TABLE STATUS 语句。
mysql> ALTER TABLE testalter_tbl ENGINE = MYISAM;
mysql> SHOW TABLE STATUS LIKE ‘testalter_tbl’\G
修改表名:
如果需要修改数据表的名称,可以在 ALTER TABLE 语句中使用 RENAME 子句来实现。
尝试以下实例将数据表 testalter_tbl 重命名为 alter_tbl:
mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;