MySQL总结

1 篇文章 0 订阅

连接 MySQL

mysql -u <user> -p
mysql [db_name]
mysql -h <host> -P <port> -u <user> -p [db_name]

数据库创建、列出、删除

create database db ;	--创建数据库
show databases;	--列出数据库
use db ;	--切换到数据库
drop database db ;	--删除数据库

数据表

show tables;	--列出当前数据库的表
show fields from test ;	--列出表的字段
desc test ;	--显示表结构
show create table test ;	--显示创建表sql
truncate table test ;	--删除表中的所有数据
drop table test ;	--删除表

退出mysql

exit 或 者 \q

管理表
创建一个包含三列的新表

CREATE TABLE test ( 
id INT PRIMARY KEY, 
name VARCHAR NOT NULL, 
price INT DEFAULT 0 );

从数据库中删除表

DROP TABLE test ;

向表中添加一个新列

ALTER TABLE test ADD c INT(4);

从表中删除列 c

ALTER TABLE test DROP COLUMN c ;

添加约束

ALTER TABLE test ADD constraint;

删除约束

ALTER TABLE test DROP constraint;

将表从表test重命名为 t2

ALTER TABLE tset RENAME TO t2;

将列 c 重命名为 c2

ALTER TABLE test RENAME c1 TO c2 ;

删除表中的所有数据

TRUNCATE TABLE test;

从表中查询数据

从表中查询 c、c2 列中的数据

SELECT c, c2 FROM test

查询表中的所有行和列

SELECT * FROM test

查询数据并使用条件过滤行

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 t1 INNER JOIN t2 ON condition

左连接 t1 和 t1

SELECT c1, c2 FROM t1 LEFT JOIN t2 ON condition

右连接 t1 和 t2

SELECT c1, c2 FROM t1 RIGHT JOIN t2 ON condition

执行全外连接

SELECT c1, c2 FROM t1 
FULL OUTER JOIN t2 ON condition

生成表中行的笛卡尔积

SELECT c1, c2 FROM t1 CROSS JOIN t2

另一种执行交叉连接的方法

SELECT c1, c2 FROM t1, t2

使用 INNER JOIN 子句将 t1 连接到自身

SELECT c1, c2 FROM t1 A INNER JOIN t1 B ON condition

使用 SQL 运算符组合来自两个查询的行

SELECT c1, c2 FROM t1 UNION [ALL] SELECT c1, c2 FROM t2

返回两个查询的交集

SELECT c1, c2 FROM t1 INTERSECT SELECT c1, c2 FROM t2

从另一个结果集中减去一个结果集

SELECT c1, c2 FROM t1 MINUS SELECT c1, c2 FROM t2

使用模式匹配 %, _ 查询行

SELECT c1, c2 FROM t1 WHERE 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, c1 INT, UNIQUE(c2,c3) );

确保 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) ASSELECT c1, c2 FROM t;

使用检查选项创建新视图

CREATE VIEW v(c1,c2) ASSELECT c1, c2 FROM t; WITH [CASCADED | LOCAL] CHECK OPTION;

创建递归视图

CREATE RECURSIVE VIEW v 
ASselect-statement -- anchor part 
UNION [ALL] 
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;

什么时候调用

  1. BEFORE ,在事件发生之前调用
  2. AFTER, 事件发生后调用

事件

  1. INSERT ,调用 INSERT
  2. UPDATE ,调用更新
  3. DELETE ,调用删除

触发器类型

  • 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;

MySQL 数据类型

字符串

CHAR 字符串 (0 - 255)
VARCHAR 字符串 (0 - 255)
TINYTEXT 字符串 (0 - 255)
TEXT 字符串 (0 - 65535)
BLOB 字符串 (0 - 65535)
MEDIUMTEXT 字符串 (0 - 16777215)
MEDIUMBLOB 字符串 (0 - 16777215)
LONGTEXT 字符串 (0 - 4294967295)
LONGBLOB 字符串 (0 - 4294967295)
ENUM 预设选项之一
SET 预设选项的选择

日期时间

DATE : yyyy-MM-dd
TIME : hh:mm:ss
DATETIME: yyyy-MM-dd hh:mm:ss
TIMESTAMP: yyyy-MM-dd hh:mm:ss
YEAR:yyyy

数值

TINYINT x 整数(-128 到 127)
SMALLINT x 整数(-32768 到 32767)
|MEDIUMINT x 整数(-8388608 到 8388607)
INT x 整数(-2147483648 到 2147483647)
BIGINT x 整数(-9223372036854775808 到 9223372036854775807) FLOAT 十进制(精确到 23 位)
DOUBLE 十进制(24 到 53 位)
DECIMAL “DOUBLE”存储为字符串

进程

show processlist;	--列出进程
kill 进程号;	--杀死进程

创建备份

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
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaojiang满眼星辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值