创建数据库
CREATE DATABASE 数据库名;
删除数据库
drop database 数据库名;
选择数据库
use 数据库名;
数据类型
数值类型
类型
|
大小
|
范围(有符号)
|
范围(无符号)
|
用途
|
TINYINT
|
1字节
|
(-128,127)
|
(0,255)
|
小整数值
|
SMALLINT
|
2字节
|
(-32768,32767)
|
(0,65535)
|
大整数值
|
MEDIUMINT
|
3字节
|
(-8388608,8388607)
|
(0,16 777 215)
|
大整数值
|
INT
|
4字节
|
(-2 147 483 648,2 147 483 647)
|
(0,4 294 967 295)
|
大整数值
|
BIGINT
|
8字节
|
(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)
|
(0,18 446 744 073 709 551 615)
|
极大整数值
|
FLOAT
|
4字节
|
|
|
单精度
浮点数值
|
DOUBLE
|
8字节
|
|
|
双精度
浮点数值
|
DECIMAL
|
|
|
|
小数值
|
日期和时间类型
类型
|
大小(字节)
|
范围
|
格式
|
用途
|
DATE
|
3
|
1000-01-01/9999-12-31
|
YYYY-MM-DD
|
日期值
|
TIME
|
3
|
|
HH:MM:SS
|
时间值或持续时间
|
YEAR
|
1
|
1901/2155
|
YYYY
|
年份值
|
DATETIME
|
8
|
|
YYYY-MM-DD HH:MM:SS
|
混合日期和时间值
|
TIMESTAMP
|
4
|
|
|
时间戳
|
字符串类型
类型
|
大小
|
用途
|
CHAR
|
0-255字节
|
定长字符串
|
VARCHAR
|
0-65535字节
|
变长字符串
|
TINYBLOB
|
0-255字节
|
不超过255个字符的二进制字符串
|
TINYTEXT
|
0-255字节
|
短文本字符串
|
BLOB
|
0-65535字节
|
二进制形式的长文本数据
|
TEXT
|
0-65535字节
|
长文本数据
|
MEDIUMBLOB
|
0-16777215字节
|
二进制形式的中等长度文本数据 |
MEDIUMTEXT
|
0-16777215字节
|
中等长度文本数据
|
LONGBLOB
|
0-4294967295字节
|
二进制形式的极大文本数据
|
LONGTEXT
|
0-4294967295字节
|
极大文本数据
|
BLOB是二进制大对象,可以容纳可变数量的数据。
一个汉字占多少长度与编码有关:
UTF-8:一个汉字=3个字节
GBK:一个汉字=2个字节
MySQL检查长度:
select LENGTH(filedname) from tablename
char、varchar、text的区别:
char:char是定长格式的,范围是0-255字节,不足255字节,MySQL会用空格填充剩下的字符。
varchar:可变长字符,最大65535字节。
text:text不可以有默认值,其最大长度是216-1
经常变化的字段用varchar,知道固定长度用char,尽量用varchar,超过255字符的只能用varchar或者text,能用varchar的地方不用text。
创建数据表
CREATE TABLE 表名 (列名,类别)
例子:
CREATE TABLE IF NOT EXISTS `runoob_tb1`(
`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`)
)ENGING=InnoDB DEFAULT CHARSET=utf-8;
解析:
NOT NULL表示不能为空,如果提交NULL值会报错。
AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1.
PRIMARY KEY 关键字用于定义列为主键。您可以使用多列来定义主键,列间以逗号分隔。
ENGINE 设置存储引擎,CHARSET设置编码。
删除数据表
DROP TABLE 表名;
插入数据
INSERT INTO 表名(field1,field2,field3...)
VALUES
(value1,value2,value3...);
当所有列都要输入,field可以省略
查询数据
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N] [OFFSET M]
可以使用*来代替其他字段,SELECT语句会返回表的所有字段数据
可以使用WHERE语句来包含任何条件
可以使用LIMIT属性来设定返回的记录数
可以通过OFFSET指定数据偏移量,默认偏移量为0
子句:
where:数据库中常用的是where关键字,用于在初始表中筛选查询。它是一个约束声明,用于约束数据,在返回结果集之前起作用。
group by:对select查询出来的结果集按照某个字段或者表达式进行分组,获得一组组的集合,然后从每组中取出一个指定字段或者表达式的值。
having:用于对where和group by查询出来的分组进行过滤,查出满足条件的分组结果。它是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作。
执行顺序
select->where->group by->having->order by
更新数据
UPDATE table_name SET field1=newValue1,field2=newValue2
[WHERE Clause]
替换某个字段中的字符
UPDATE table_name SET field=REPLACE(field,`old-string`,`new-string`) [WHERE Clause]
实例:
UPDATE runoob_tb1 SET runoob_title =REPLACE(runoob_title,`C++`,`Python`) where runoob_id=3;
删除表的数据
DELETE FROM table_name [WHERE Clause]
如果没有指定WHERE子句,MySQL表中的所有记录将被删除
可以在WHERE子句中指定任何条件
LIKE子句
SELECT field1,field2,...fieldN
FROM table_name
WHERE field1 LIKE condition1 [AND[OR]] filed2 = 'somevalue'
例子:
SELECT * FROM runoob_tb1 WHERE runoob_author LIKE '%COM%';
也可以使用DELETE或UPDATE命令中使用WHERE...LIKE子句来指定条件
UNION 操作符
UNION操作符用于连接两个以上的SELECT语句的结果组合到一个结果集中。多个SELECT语句会删除重复的数据。
SELECT expression1,expression2,...expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1,expression2,...expression_n
FROM tables
[WHERE conditions];
例子:
SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;
expression 是要检索的列
tables:要检索的数据表
WHERE conditions:可选,检索条件
DISTINCT:可选,删除结果集中重复的数据。默认情况下UNION操作符已经删除了重复数据,所以DISTINCT修饰符对结果没啥影响。
ALL:可选。返回所有结果集,包含重复数据。
排序(ORDER BY)
SELECT field1,field2,...fieldN FROM table_name1,table_name2
ORDER BY field1 [ASC [DESC]],field2...默认升序ASC
分组(GROUP BY)
SELECT column_name,function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
实例:
SELECT name,COUNT(*) FROM employee_tb1 GROUP BY name;
连接
可以在SELECT,UPDATE和DELETE语句中使用MySQL的JSON来联合多表查询。
JOIN按照功能大致分为如下三类:
INNER JOIN(内连接或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右链接):用于获取右表中所有记录,即使左表没有对应匹配的记录。
INNER JOIN(内连接或等值连接)
SELECT * FROM runoob_tb1 a INNER JOIN tcount_tb1 b ON a.runoob_author = b.runoob_author;
等价于:
SELECT * FROM runoob_tb1 a,tcount_tb1 b WHERE a.runoob_author = b.runoob_count;
LEFT JOIN(左连接)
SELECT * FROM runoob_tb1 a LEFT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
RIGHT JOIN(右链接)
SELECT * FROM runoob_tb1 a RIGHT JOIN tcount_tb1 b ON a.runoob_author = b.runoob_author;
NULL值处理
MySQL使用SQL SELECT命令及WHERE子句来 读取数据表中的数据,但是当提供的查询条件字段为NULL时,该命令就无法正常工作。
为了处理这种情况,MySQL提供了三大运算符:
IS NULL:当列的值是NULL,此运算符返回true。
IS NOT NULL:当列的值不为NULL,运算符返回true。
<=>:比较操作符(不同于=运算符),当比较的两个值为NULL时返回true。
注意:在MySQL中,NULL值与任何其它值的比较(即使是NULL)永远返回false,即NULL=NULL返回false。
MySQL中处理NULL使用 IS NULL 和 IS NOT NULL 运算符。
SELECT *,columnName1+ifnull(columnName2,0) from tableName;
columnName1,columnName2 为int型,当columnName2中,有值为null时,columnName1+columnName2=null,ifnull(columnName2,0)把columnName2中null值转为0.
SELECT * FROM runoob_tb1 WHERE runoob_count IS NOT NULL;
正则表达式
SELECT name FROM runoob_tb1 WHERE name REGEXP '正则表达式';
事务
事务是一系列操作的集合,能确保一系列的操作要么全部执行要么全部不执行。必须满足4个条件(ACID):原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。
原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节 。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
事务控制语句:
BEGIN或START TRANSACTION 显式开启一个事务;
COMMIT提交事务,使已对数据库进行的所有修改成为永久性的。
ROLLBACK 回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。
SAVEPOINT identifier,SAVEPOINT 允许在事务中创建一个保存点,一个事务中可以有多个SAVEPOINT;
RELEASE SAVEPOINT identifier 删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;
ROLLBACK TO identifier 把事务回滚到标记点;
SET TRANSACTION用来设置事务的隔离级别。InnoDB存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。