马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
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 [db_name]
- mysql -h <host> -u <user> -p [db_name]
复制代码 常用的
数据库 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 会话
退出 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,
- name VARCHAR DEFAULT NOT NULL,
- price INT DEFAULT 0
- PRIMARY KEY(id)
- );
复制代码 从数据库中删除表 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;
复制代码 删除表中的所有数据
从表中查询数据
从表中查询列 c1、c2 中的数据
查询表 t 中的所有行和列
查询数据并利用条件筛选行
- SELECT c1, c2 FROM t
- WHERE condition
复制代码 查询表中的不同行
- SELECT DISTINCT c1 FROM t
- WHERE condition
复制代码 按升序或降序对效果集排序
- SELECT c1, c2 FROM t
- ORDER BY c1 ASC [DESC]
复制代码 跳过行的偏移并返回下 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 [ALL]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 [NOT] LIKE pattern
复制代码 查询列表中的行
- SELECT c1, c2 FROM t
- WHERE c1 [NOT] IN value_list
复制代码 查询两个值之间的行
- SELECT c1, c2 FROM t
- WHERE c1 BETWEEN low AND high
复制代码 检查表中的值是否为 NULL
- SELECT c1, c2 FROM t
- WHERE c1 IS [NOT] 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
- 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 [CASCADED | LOCAL] CHECK OPTION;
复制代码 创建递归视图
- CREATE RECURSIVE VIEW v
- AS
- select-statement -- anchor part
- UNION [ALL]
- select-statement; -- recursive part
复制代码 创建临时视图
- CREATE TEMPORARY VIEW v
- AS
- SELECT c1, c2
- FROM t;
复制代码 删除视图
管理触发器
创建或修改触发器
- 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([seed])返回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企服之家,中国第一个企服评测及商务社交产业平台。 |