【MySQL】MySQL 利用全教程
MySQL 利用全教程先容
MySQL 是一种广泛利用的开源关系型数据库管理系统(Relational Database Management System),它基于 Structured Query Language(SQL)进行数据管理,允许用户存储、检索、更新和删除数据库中的数据。通过提供高性能、可扩展性以及可靠性,MySQL 被广泛应用于各种规模的数据驱动网站和应用,支持多线程、多用户操纵,并能够处置惩罚大型数据库,是构建动态网站和应用步伐的紧张后端组件。
一个关系型数据库由一个或数个表格组成,如下所示的一个表格
name ▼ 键 ▼ 列(col)
┌┈┈┈┈┬┈┈┈┈┈┈┈┈┬┈┈┈┈┈┈┬┈┈┈┈┈┈┈┐
┆ id ┆ name ┆ uid┆ level ┆◀ 表头header
├┈┈┈┈┼┈┈┈┈┈┈┈┈┤┈┈┈┈┈┈┤┈┈┈┈┈┈┈┤
┆1 ┆ mysql┆ 0 ┆ 3 ┆
├┈┈┈┈┼┈┈┈┈┈┈┈┈┤┈┈┈┈┈┈┤┈┈┈┈┈┈┈┤
┆2 ┆ redis┆ 12 ┆ 1 ┆◀ 行 row
└┈┈┈┈┴┈┈┈┈┈┈┈┈┴┈┈┈┈┈┈┴┈┈┈┈┈┈┈┘
redis ▲ 值
[*]表头(header) 每一列的名称
[*]列(col) 具有相同数据范例的数据的集合
[*]行(row) 每一行用来描述某个人/物的详细信息
[*]值(value) 行的详细信息,每个值与该列数据范例相同
[*]键(key) 用来识别某个特定的人/物的方法,有唯一性
登录 MySQL
# 默认用户名<root>,-p 是密码,
# ⚠️参数后面不需要空格
mysql -h 127.0.0.1 -u <用户名> -p<密码>
mysql -D 数据库名 -h 主机名 -u 用户名 -p
mysql -h <host> -P <端口号> -u <user> -p
mysql -h <host> -u <user> -p
常用的
数据库 Database
:-:-CREATE DATABASE db ;创建数据库SHOW DATABASES;列出数据库USE db;切换到数据库CONNECT db ;切换到数据库DROP DATABASE db;删除数据库 表 Table
:-:-SHOW TABLES;列出当前数据库的表SHOW FIELDS FROM t;表的列表字段DESC t;表现表格结构SHOW CREATE TABLEt;表现创建表sqlTRUNCATE TABLEt;删除表中的所有数据DROP TABLEt;删除表格 Proccess
:-:-show processlist;列出历程kill pid;杀死历程 查看 MySQL 信息
# 显示当前mysql的version的各种信息
mysql> status;
# 显示当前mysql的version信息
mysql> select version();
# 查看 MySQL 端口号
mysql> show global variables like 'port';
退出 MySQL 会话
mysql> exit
退出 quit; 或 \q; 一样的效果
备份
创建备份
mysqldump -u user -p db_name > db.sql
导出不带架构的数据库
mysqldump -u user -p db_name --no-data=true --add-drop-table=false > db.sql
恢复备份
mysql -u user -p db_name < db.sql
MySQL 示例
管理表格
创建一个包含三列的新表
CREATE TABLE t (
id INT,
nameVARCHAR DEFAULT NOT NULL,
price INT DEFAULT 0
PRIMARY KEY(id)
);
从数据库中删除表 t
DROP TABLE t ;
向表中添加新列
ALTER TABLE t ADD column;
从表中删除列 c
ALTER TABLE t DROP COLUMN c ;
添加束缚
ALTER TABLE t ADD constraint;
删除束缚
ALTER TABLE t DROP constraint;
将表从 t1 重命名为 t2
ALTER TABLE t1 RENAME TO t2;
将列 c1 重命名为 c2
ALTER TABLE t1 CHANGE c1 c2 datatype;
ALTER TABLE table_name RENAME COLUMN c1 TO c2;
将列 c1 的数据范例改为 datatype
ALTER TABLE t1 MODIFY c1 datatype;
删除表中的所有数据
TRUNCATE TABLE t;
从表中查询数据
从表中查询列 c1、c2 中的数据
SELECT c1, c2 FROM t
查询表 t 中的所有行和列
SELECT * FROM t
查询数据并利用条件筛选行
SELECT c1, c2 FROM t
WHERE condition 查询表中的不同行
SELECT DISTINCT c1 FROM t
WHERE condition
按升序或降序对效果集排序
SELECT c1, c2 FROM t
ORDER BY c1 ASC 跳过行的偏移并返回下 n 行
SELECT c1, c2 FROM t
ORDER BY c1 LIMIT n OFFSET offset 利用聚合函数对行进行分组
SELECT c1, aggregate(c2)
FROM t
GROUP BY c1
利用 HAVING 子句筛选组
SELECT c1, aggregate(c2)
FROM t
GROUP BY c1
HAVING condition 从多个表查询
内部连接 t1 和 t2
SELECT c1, c2 FROM t
1INNER JOIN t2 ON condition 左连接t1和t1
SELECT c1, c2 FROM t
1LEFT JOIN t2 ON condition 右连接 t1 和 t2
SELECT c1, c2 FROM t
1RIGHT JOIN t2 ON condition 执行完全外部连接
SELECT c1, c2 FROM t
1FULL OUTER JOIN t2 ON condition 生成表中行的笛卡尔积
SELECT c1, c2 FROM t
1CROSS JOIN t2 执行交叉连接的另一种方法
SELECT c1, c2 FROM t
1, t2 利用 INNER Join 子句将 t1 连接到自身
SELECT c1, c2
FROM t1 A
INNER JOIN t1 B ON condition
利用 SQL 运算符,合并两个查询中的行
SELECT c1, c2 FROM t
1UNION SELECT c1, c2 FROM t
2 返回两个查询的交集
SELECT c1, c2 FROM t
1INTERSECTSELECT c1, c2 FROM t
2 从另一个效果会合减去一个效果集
SELECT c1, c2 FROM t
1MINUSSELECT c1, c2 FROM t
2 利用模式匹配 % 查询行_
SELECT c1, c2 FROM t
1WHERE c1 LIKE pattern 查询列表中的行
SELECT c1, c2 FROM t
WHERE c1 IN value_list 查询两个值之间的行
SELECT c1, c2 FROM t
WHEREc1 BETWEEN low AND high 检查表中的值是否为 NULL
SELECT c1, c2 FROM t
WHEREc1 IS NULL 利用 SQL 束缚
将 c1 和 c2 设置为主键
CREATE TABLE t(
c1 INT, c2 INT, c3 VARCHAR,
PRIMARY KEY (c1,c2)
);
将 c2 列设置为外键
CREATE TABLE t1(
c1 INT PRIMARY KEY,
c2 INT,
FOREIGN KEY (c2) REFERENCES t2(c2)
);
使列 c1 和 c2 中的值唯一
CREATE TABLE t(
c1 INT, c2 INT,
UNIQUE(c1,c2)
);
确保 c1>0 和 c1>=c2 中的值
CREATE TABLE t(
c1 INT, c2 INT,
CHECK(c1> 0 AND c1 >= c2)
);
c2 列中的设置值不为 NULL
CREATE TABLE t(
c1 INT PRIMARY KEY,
c2 VARCHAR NOT NULL
);
修改数据
在表格中插入一行
INSERT INTO t(column_list)
VALUES(value_list);
在表格中插入多行
INSERT INTO t(column_list)
VALUES (value_list),
(value_list), …;
将行从 t2 插入 t1
INSERT INTO t1(column_list)
SELECT column_list
FROM t2;
更新列 c1 中所有行的新值
UPDATE t
SET c1 = new_value;
更新列 c1、c2 中与条件匹配的值
UPDATE t
SET c1 = new_value,
c2 = new_value
WHERE condition;
删除表中的所有数据
DELETE FROM t;
删除表中的行子集
DELETE FROM t
WHERE condition;
管理视图
创建由 c1 和 c2 组成的新视图
CREATE VIEW v(c1,c2)
AS
SELECT c1, c2
FROM t;
利用选中选项创建新视图
CREATE VIEW v(c1,c2)
AS
SELECT c1, c2
FROM t;
WITH CHECK OPTION; 创建递归视图
CREATE RECURSIVE VIEW v
AS
select-statement -- anchor part
UNION
select-statement; -- recursive part
创建临时视图
CREATE TEMPORARY VIEW v
AS
SELECT c1, c2
FROM t;
删除视图
DROP VIEW view_name;
管理触发器
创建或修改触发器
CREATE OR MODIFY TRIGGER trigger_name
WHEN EVENT
ON table_name TRIGGER_TYPE
EXECUTE stored_procedure;
WHEN
:-:-BEFORE在变乱发生前调用AFTER变乱发生后调用 EVENT
:-:-INSERT为INSERT调用UPDATE调用UPDATEDELETE调用DELETE TRIGGER_TYPE
:-:-FOR EACH ROW-FOR EACH STATEMENT- 管理索引
在表 t 的 c1 和 c2 上创建索引
CREATE INDEX idx_name
ON t(c1,c2);
在表 t 的 c3、c4 上创建唯一索引
CREATE UNIQUE INDEX idx_name
ON t(c3,c4)
删除索引
DROP INDEX idx_name ON t;
MySQL 数据范例
Strings
--CHARString (0 - 255)VARCHARString (0 - 255)TINYTEXTString (0 - 255)TEXTString (0 - 65535)BLOBString (0 - 65535)MEDIUMTEXTString (0 - 16777215)MEDIUMBLOBString (0 - 16777215)LONGTEXTString (0 - 4294967295)LONGBLOBString (0 - 4294967295)ENUMOne of preset optionsSETSelection of preset options Date & time
Data TypeFormatDATEyyyy-MM-ddTIMEhh:mm:ssDATETIMEyyyy-MM-dd hh:mm:ssTIMESTAMPyyyy-MM-dd hh:mm:ssYEARyyyy Numeric
--TINYINT xInteger (-128 to 127)SMALLINT xInteger (-32768 to 32767)MEDIUMINT xInteger (-8388608 to 8388607)INT xInteger (-2147483648 to 2147483647)BIGINT xInteger (-9223372036854775808 to 9223372036854775807)FLOATDecimal (precise to 23 digits)DOUBLEDecimal (24 to 53 digits)DECIMAL"DOUBLE" stored as string 函数
聚合函数
函数解释SUM()计算一列值的总和AVG()计算一列值的均匀值COUNT()计算行数,可选择性地忽略NULL值MAX()找出一列的最大值MIN()找出一列的最小值 数学函数
函数解释示例语法效果ABS(x)返回数值的绝对值ABS(-5)5ROUND(x,y)四舍五入到指定的小数位数,y为小数位数,默认为0ROUND(3.1415,2)3.14FLOOR(x)向下取整至最接近的整数FLOOR(3.7)3CEIL(x)向上取整至最接近的整数CEIL(3.3)4SQRT(x)返回一个数的平方根SQRT(16)4MOD(x,y)返回x除以y的余数MOD(10,3)1RAND()返回0到1之间的随机数,可选种子值RAND() 或 RAND(123)0.345... 日期和时间函数
函数解释NOW()返回当前日期和时间CURDATE()返回当前日期CURTIME()返回当前时间DATE_FORMAT()格式化日期时间输出DATEDIFF()计算两个日期之间相差的天数STR_TO_DATE()将字符串转换为日期格式 字符串函数
函数解释示例语法效果CONCAT(s1,s2,...)连接两个或更多字符串CONCAT('Hello, ','World!')'Hello, World!'LOWER(str)转换为小写LOWER('HELLO')'hello'UPPER(str)转换为大写UPPER('world')'WORLD'TRIM(str)去除字符串两端空格TRIM(' Hello ')'Hello'LEFT(str,len)提取字符串左侧的若干字符LEFT('Hello', 3)'Hel'RIGHT(str,len)提取字符串右侧的若干字符RIGHT('Hello', 2)'lo'SUBSTR(str,pos,len)提取字符串中的一部分SUBSTR('Hello', 2, 3)'ell'REPLACE(str,from_str,to_str)替换字符串中的部分文本REPLACE('Hello', 'l', 'L')'HeLLo' 高级函数
函数解释示例语法效果BIN(x)返回 x 的二进制编码,x 为十进制数。BIN(2)10BINARY(s)将字符串 s 转换为二进制字符串。BINARY 'RUNOOB''RUNOOB'(表现效果,实际存储为二进制)CASE复合条件函数,根据条件返回不同效果。CASE WHEN 1 > 0 THEN '1 > 0' WHEN 2 > 0 THEN '2 > 0' ELSE '3 > 0' END'1 > 0'CAST(x AS type)转换数据范例。CAST('2017-08-29' AS DATE)2017-08-29COALESCE(expr1, expr2, ..., expr_n)返回第一个非空表达式的值。COALESCE(NULL, NULL, 'runoob.com', NULL, 'google.com')'runoob.com'CONNECTION_ID()返回当前连接的唯一ID。CONNECTION_ID()4292835(示例值)CONV(x, f1, f2)将 f1 进制数转换为 f2 进制数。CONV(15, 10, 2)1111CONVERT(s USING cs)转换字符串 s 的字符集为 cs。CHARSET(CONVERT('ABC' USING gbk))gbkCURRENT_USER()返回当前用户。CURRENT_USER()guest@%DATABASE()返回当前数据库名。DATABASE()runoobIF(expr, v1, v2)条件表达式,expr 为真则 v1,否则 v2。IF(1 > 0, '精确', '错误')'精确'IFNULL(v1, v2)假如 v1 不为 NULL,则返回 v1,否则返回 v2。IFNULL(NULL, 'Hello Word')'Hello Word'ISNULL(expression)判断表达式是否为 NULL。ISNULL(NULL)1LAST_INSERT_ID()返回最近生成的 AUTO_INCREMENT 值。LAST_INSERT_ID()6(示例值)NULLIF(expr1, expr2)若 expr1 等于 expr2,则返回 NULL,否则返回 expr1。NULLIF(25, 25)NULL
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]