Mysql

启动及关闭Mysql服务器

  • Windows系统下
1
2
3
4
5
6
7
8
9
打开命令窗口(cmd),进入MySQL安装目录的bin目录。

启动:
cd c:/mysql/bin 移动到mysql的bin目录下
mysqld --console

关闭:
cd c:/mysql/bin
mysqladmin -uroot shutdown
  • Linux 系统下
1
2
3
4
5
6
7
8
9
10
11
首先,我们需要通过以下命令来检查MySQL服务器是否启动:
ps -ef | grep mysqld

如果MySql已经启动,以上命令将输出mysql进程列表,如果mysql未启动,你可以使用以下命令来启动mysql服务器:
cd /usr/bin
./mysqld_safe &

如果你想关闭目前运行的 MySQL 服务器, 你可以执行以下命令:
cd /usr/bin
./mysqladmin -u root -p shutdown
Enter password: ******

管理MySQL的命令

  • 创建数据库
1
2
3
4
5
6
进入mysql
CREATE DATABASE 数据库名;

在命令行直接创建
mysqladmin -u root -p create RUNOOB
root用户拥有最高权限,可以使用mysql mysqladmin命令来创建数据库。
  • SHOW DATABASES

列出MySQL数据库管理系统的数据库列表。

  • USE 数据库名

选择要操作的Mysql数据库,使用该命令后所有Mysql命令都只针对该数据库。

  • SHOW TABLES

显示指定数据库的所有表,使用该命令前需要使用use命令来选择要操作的数据库。

  • SHOW COLUMNS FROM 数据表

显示数据表的属性,属性类型,主键信息,是否为NULL,默认值等其他信息。

  • SHOW INDEX FROM 数据表

显示数据表的详细索引信息,包括PRIMARY KEY(主键)。

  • SHOW TABLE STATUS(FROM db_name)LIKE(LIKE ‘pattern’)\G

该命令将输出Mysql数据库管理系统的性能及统计信息。

1
2
3
SHOW TABLE STATUS  FROM RUNOOB;   # 显示数据库 RUNOOB 中所有表的信息
SHOW TABLE STATUS from RUNOOB LIKE 'runoob%'; # 表名以runoob开头的表的信息
SHOW TABLE STATUS from RUNOOB LIKE 'runoob%'\G; # 加上 \G,查询结果按列打印
  • 删除数据库
1
2
3
4
5
6
进入mysql
drop 命令删除数据库
drop database <数据库名>;

在命令行直接删除
mysqladmin -u root -p drop RUNOOB

数据类型

  • 字符串类型
1
2
3
4
CHAR        0-255字节       定长字符串
VARCHAR 0-65535字节 变长字符串
BLOB 0-65535字节 二进制形式的长文本数据
TEXT 0-65535字节 长文本数据
  • 日期和时间类型
1
2
3
4
DATE          3     1000-01-01/9999-12-31         YYYY-MM-DD    日期值
TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
  • 数值类型
1
2
3
4
INT或INTEGER   4字节  (-2147483648,2147483647) 大整数值
BIGINT 8字节 (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) 极大整数值
FLOAT 4字节 (-3.402823466E+38,-1.175494351E-38),0,(1.175494351E-38,3.402823466351E+38) 单精度浮点数值
DOUBLE 8字节 (-1.7976931348623157E+308,-2.2250738585072014E-308),0,(2.2250738585072014E-308,1.7976931348623157E+308) 双精度 浮点数值

DDL数据定义语言

  • 创建表
1
2
3
4
5
6
7
CREATE TABLE runoob_tbl(
runoob_id INT NOT NULL AUTO_INCREMENT,
runoob_title VARCHAR(100) NOT NULL,
runoob_author VARCHAR(40) NOT NULL,
submission_date DATE,
PRIMARY KEY ( runoob_id )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 删除表
1
DROP TABLE runoob_tbl;

DML数据操作语言

  • 插入数据
1
INSERT INTO table_name (field1,field2,...fieldN) VALUES (value1,value2,...valueN);
  • 查询数据
1
SELECT column_name,column_name FROM table_name;
  • 更新数据
1
2
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]

  • 删除数据
1
2
DELETE FROM table_name [WHERE Clause]
如果没有where则删除表中所有数据。
  • 条件语句
1
2
3
4
5
6
SELECT field1, field2,...fieldN FROM table_name1, table_name2...[WHERE condition1 [AND [OR]] condition2.....
可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。
可以使用AND或者OR指定一个或多个条件。
WHERE子句也可以运用于SQL的DELETE或者UPDATE命令。

SELECT * from runoob_tbl WHERE runoob_author='菜鸟教程';
  • LIKE子句
1
2
3
SELECT * from runoob_tbl  WHERE runoob_author LIKE '%COM';

%表示未知字符串,_表示单字母。
  • UNION操作符
1
2
3
4
5
6
7
8
9
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: 可选,返回所有结果集,包含重复数据。
  • 排序
1
2
3
4
5
SELECT * from runoob_tbl ORDER BY submission_date ASC;
SELECT * from runoob_tbl ORDER BY submission_date DESC;

使用ASC或DESC关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
可以添加WHERE...LIKE子句来设置条件。
  • 分组
1
2
3
SELECT name, COUNT(*) FROM  employee_tbl GROUP BY name;

在分组的列上我们可以使用COUNT, SUM, AVG,等函数。
  • 连接
1
2
3
4
5
6
7
8
9
10
11
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与LEFT JOIN相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

SELECT a.runoob_id,a.runoob_author,b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON runoob_author = b.runoob_author;

以runoob_tbl为左表,tcount_tbl为右表
ELECT a.runoob_id,a.runoob_author,b.runoob_count FROM runoob_tbl a LEFT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;

以runoob_tbl为左表,tcount_tbl为右表
SELECT a.runoob_id,a.runoob_author,b.runoob_count FROM runoob_tbl a RIGHT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
  • NULL 值处理
1
2
3
where里判断字符是否为空
IS NULL: 当列的值是 NULL,此运算符返回 true。
IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。