登录/退出
登录
退出
创建数据库
删除数据库
选择数据库
数据类型
常用
数值类型
- TINYINT
- INT
- BIGINT
- FLOAT
- DOUBLE
日期类型
- DATE
- TIME
- DATETIME
- TIMESTAMP
字符串类型
- VARCHAR
- BLOB
create tabele 创建表
drop table 删除表
insert into 表中插入数据
注意:
如果添加过主键自增(PRINARY KEY AUTO_INCREMENT)第一列在增加数据的时候, 要写为0或者null
select 查询数据
-
*
表示所有字段
where
如需有条件地从表中选取数据,
可以使用 AND 或者 OR 指定一个或多个条件
注意:
MySQL 的 WHERE 子句的字符串比较是不区分大小写
的。
你可以使用 BINARY
关键字来设定 WHERE 子句的字符串比较是区分大小写
的。
比较符注意这个:
<>, != 这两者都为不等于
补充:MYSQL运算符
BETWEEN
在两值之间 >=min&&<=max
<=>
严格比较两个NULL值是否相等 两个操作码均为NULL时,其所得值为1;而当一个操作码为NULL时,其所得值为0
<>, !=
不等于
IN
NOT IN
update set
更新表中指定的数据字段,可以是多行
delete
删除 MySQL 数据表中的记录。
能清空表中记录,但无法删除该表
like
配合%模糊查询,类似正则
SQL LIKE 使用百分号 %字符来表示任意字符
UNION
联合查询
- 用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。
- 多个 SELECT 语句会删除重复的数据。
有两个选项:
- DISTINCT: 删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
- ALL: 可选,返回所有结果集,包含重复数据
UNION 语句:用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)
UNION ALL 语句:用于将不同表中相同列中查询的数据展示出来;(包括重复数据)
使用形式如下:
ORDER BY
对SELECT读取的数据进行排序
- 可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
- 可以设定多个字段来排序。
- 可以使用
ASC
或DESC
关键字来设置查询结果是按升序或降序排列。 - 默认情况下,它是按升序排列,相当于使用
ASC
。
GROUP BY
根据一个或多个列对结果集进行分组。
使用 COUNT, SUM, AVG等函数。
JOIN
INNER JOIN
内连接:获取两个表中字段匹配关系的记录。
INNER JOIN(也可以省略 INNER 直接使用 JOIN,效果一样)
mysql> 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;
LEFT JOIN
左连接:获取左表所有记录,即使右表没有对应匹配的记录。
mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a, tcount_tbl b WHERE a.runoob_author = b.runoob_author;
RIGHT JOIN
右连接:用于获取右表所有记录,即使左表没有对应匹配的记录。
mysql> SELECT 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;
NULL值处理
使用WHERE,如果提供的查询条件字段为 NULL 时,该命令可能无法正常工作。
也就是如下列条件中使用 = 或 != 无法与NULL作判断
要使用 IS NULL
或 IS NOT NULL
,修改成如下样式即可
并且注意
<=>
: 比较操作符(不同于 =
运算符),当比较的的两个值相等或者都为 NULL 时返回 true。
regexp 正则表达式
REGEXP: REG 正则+ EXP表达式的组合
模式 | 功能 |
| 匹配输入字符串的开始位置, 如设置 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。 |
| 匹配输入字符串的结束位置, 如设置 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。 |
| 匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,使用 [.\n] 的模式。 |
| 字符集合。匹配所包含的任意一个字符。 |
| 负值字符集合。匹配未包含的任意字符。 |
| 匹配 p1 或 p2 或 p3。 |
| 代表 0~N个前面的子表达式 |
| 代表 1~N个前面的子表达式 |
{n} | 非负整数。匹配确定的 n 次。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 |
使用样例:
查找name字段中以任何元音字符开头或以’ok’字符串结尾的所有数据:
事务
MySQL 事务主要用于处理操作量大,复杂度高的数据。
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。
MYSQL 事务处理主要有两种方法:
1、用 BEGIN, ROLLBACK, COMMIT来实现
2、直接用 SET 来改变 MySQL 的自动提交模式:
使用保留点 SAVEPOINT
savepoint 是在数据库事务处理中实现“子事务”(subtransaction),也称为嵌套事务的方法。
事务可以回滚到 savepoint 而不影响 savepoint 创建前的变化, 不需要放弃整个事务。
ROLLBACK 回滚的用法可以设置保留点 SAVEPOINT,执行多条操作时,回滚到想要的那条语句之前。
使用 SAVEPOINT
删除 SAVEPOINT
保留点再事务处理完成(执行一条 ROLLBACK 或 COMMIT)后自动释放。
MySQL5 以来,可以用:
ALTER
可修改表名,表字段(列名及类型)
也可修改存储引擎,删除外键约束,修改表字段默认值
修改表名
修改表字段
删除表中某列字段,注意:表中如果只剩最后一列了,则无法删除
添加表中某列字段
添加表中某列字段,也可以指定位置
关键字 FIRST (设定位第一列), AFTER 字段名(设定位于某个字段之后)。
修改存储引擎:修改为myisam
删除外键约束:keyName是外键别名
修改字段时,你可以指定是否包含值或者是否设置默认值。
以下实例,指定字段(列名) 为 NOT NULL 且默认值为100 。
如果你不设置默认值,MySQL会自动设置该字段默认为 NULL。
MODIFY
修改某列字段的类型
CHANGE
既可以修改列名,可以修改该列字段的类型
INDEX 索引
索引提高MySQL的检索速度。
教程中打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。
索引分单列索引和组合索引。
单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。
组合索引,即一个索引包含多个列。
创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。
实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。
过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE,因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。
普通索引
添加普通索引,索引值可出现多次。
唯一索引
这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。
主键索引
该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
全文索引
显示索引信息 SHOW INDEX FROM table_name; \G
临时表
MySQL 临时表在我们需要保存一些临时数据时是非常有用的。临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间,也可以手动销毁。
1. 创建
和正式的表创建不同的就是创建表时加一个TEMPORARY
关键字
2. 删除
默认情况下,当你断开与数据库的连接后,临时表就会自动被销毁。当然你也可以在当前MySQL会话使用 DROP TABLE 命令来手动删除临时表。
和删除正式的表的方法是一样的
3. 临时表的好用的方法
用查询直接创建临时表的方式:
具体要多少自己调整
复制表
方式一 :比较传统的方式
方式二:推荐
元数据
序列
自增:AUTO_INCREMENT
在MySQL的客户端中你可以使用 SQL中的LAST_INSERT_ID( ) 函数来获取最后的插入表中的自增列的值。
重置序列:
- 删除序列
- 重新添加
设置序列的开始值
一般情况下序列的开始值为1,但如果你需要指定一个开始值100,那我们可以通过以下语句来实现:
或者你也可以在表创建成功后,通过以下语句来实现:
重复数据处理
防止表中出现重复数据
你可以在 MySQL 数据表中设置指定的字段为 PRIMARY KEY(主键) 或者 UNIQUE(唯一) 索引来保证数据的唯一性。
如果你想设置表中字段 first_name,last_name 数据不能重复,你可以设置双主键模式来设置数据的唯一性, 如果你设置了双主键,那么那个键的默认值不能为 NULL,可设置为 NOT NULL。如下所示:
INSERT IGNORE INTO,执行后不会出错,也不会向数据表中插入重复数据
INSERT IGNORE INTO 与 INSERT INTO 的区别就是 INSERT IGNORE 会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。
INSERT IGNORE INTO 当插入数据时,在设置了记录的唯一性后,如果插入重复数据,将不返回错误,只以警告形式返回。
REPLACE INTO 如果存在 primary 或 unique 相同的记录,则先删除掉。再插入新记录。
另一种设置数据的唯一性方法是添加一个 UNIQUE 索引,如下所示:
统计重复数据
过滤重复数据
也可以在数据表中添加 INDEX(索引) 和 PRIMAY KEY(主键)这种简单的方法来删除表中的重复记录。方法如下: