MySQL基础
数据库基础操作
创建数据库
create DATABASE xxx(数据库名)
删除数据库
drop DATABASE xxx(数据库名)
选择数据库
use xxx(数据库名)
MySQL数据类型
MySQL 支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型
数值类型
MySQL支持所有标准SQL数值数据类型,包括严格数值数据类型(integer、smallint、decimal、numeric)、近似数据类型(float、real、double precision)
具体支持的数据类型可参考下图👇
日期和时间类型
🎉ATTENTION:timestamp有自动更新特征
字符串类型
🎉ATTENTION:
- char(n)和varchar(n)中的n代表的是字符个数并不代表字节个数,比如char(30)表示可以存储30个字符
- char和varchar数据类型相似,但保存和检索的方式不同,最大长度和是否尾部空格被保留等方式也不同,在存储或检索的过程中不进行大小写转换
- binary和varbinary类似于char和varchar,不同的是它们包含二进制字符串而不要非二进制字符串
数据表
创建数据表
CREATE TABLE table_name (column_name column_type);
CREATE TABLE IF NOT EXISTS `runoob_tbl`(
`runoob_id` INT UNSIGNED 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;
删除数据表
drop TABLE xxx(数据表名)
插入数据
数据表中插入数据通用SQL:insert into
INSERT INTO table_name
-> ( field1, field2,...fieldN )
-> VALUES
-> ( value1, value2,...valueN );
🎉ATTENTION:
- 如果数据是字符型,必须使用单引号或者双引号,如:"value"
- 使用箭头标记 -> 不是 SQL 语句的一部分,它仅仅表示一个新行,如果一条SQL语句太长,可以通过回车键来创建一个新行来编写 SQL 语句,SQL 语句的命令结束符为分号 ;
查询数据
查询语句:select
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
🍕ATTENTION:
- 查询语句中可以使用一个表或多个表,表名之间用
,
连接 select *
会返回表的所有字段的数据where
语句用来包含查询条件,limit
属性用来设置返回的记录数,offset
指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0
更新
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
🍕ATTENTION:
- 可以一次更新多个字段(在where语句中指定更新条件)
删除
DELETE FROM table_name [WHERE Clause]
🍕ATTENTION:
- 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
- 可以在 WHERE 子句中指定删除条件
like子句
LIKE 子句中使用百分号 %字符来表示任意字符,如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的
通用用法
SELECT field1, field2,...fieldN
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
---例如---
---查找以com结尾的所有记录
mysql> SELECT * from runoob_tbl WHERE runoob_author LIKE '%COM';
union操作符
UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。且会对结果进行去重和排序
参考下例子👇👇
SELECT * FROM a;
+----+--------------+
| id | name |
+----+--------------+
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
+----+--------------+
SELECT * FROM b;
+----+--------------+
| id | name |
+----+--------------+
| 1 | 张三 |
| 2 | 李四 |
| 3 | 赵六 |
+----+--------------+
先来看下union all的返回结果
select name from a
union all
select name from b
+----+--------------+
| id | name |
+----+--------------+
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
| 4 | 张三 |
| 5 | 李四 |
| 6 | 赵六 |
+----+--------------+
可以看到,union all
没有去重,直接合并了两张表的查询结果
再来看看使用union
的返回结果
select name from a
union
select name from b
+----+--------------+
| id | name |
+----+--------------+
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
| 4 | 赵六 |
+----+--------------+
从结果可以明显看出,union
的结果去重了
排序
mysql中排序可以用order by
实现
升序:ASC
降序:desc
连接
🍕 外连接
- 分类
- 左外连接(LEFT OUTER JOIN),结果保留左表的全部数据,即使右表没有数据
- 右外连接(RIGHT OUTER JOIN),结果保留右表的全部数据,即使左表没有数据
- 全外连接(FULL OUTER JOIN),结果是两表的并集
- 应用场景:用于查询一个表中有,另一个表没有的记录
- 特点:
- 外连接的查询结果为主表中的所有记录
- 如果从表中有和它匹配的,则显示匹配的值
- 如果从表中没有和它匹配的,则显示null
- 外连接查询结果=内连接查询结果+主表中有而从表中没有的记录
- 外连接的查询结果为主表中的所有记录
- 主表:左外连接left join左边的是主表,右外连接right join右边的是主表
- 左外和右外交换两个表的顺序,可以实现同样的效果
- 全外连接=内连接的结果+表1中有单表2没有的+表2有但表1没有的
🍕 内连接(INNER JOIN):两表的公共数据,可参考下图
🍕 交叉连接(CROSS JOIN):笛卡尔积,排列组合所有情况
事务
作用:事务用于处理操作量大,复杂度高的数据
需满足的条件(ACID):原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)
- 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
- 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
- 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
- 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
alter
作用:修改数据表名和表字段