数据类型:
TINYINT - 小整数值 (-128,127) 1 Bytes
SMALLINT - 大整数值 (-32 768,32 767) 2 Bytes
MEDIUMINT - 大整数值 (-8 388 608,8 388 607) 3 Bytes
NT或INTEGER - 大整数值 (-2 147 483 648,2 147 483 647) 4 Bytes
BIGINT - 极大整数值
FLOAT - 单精度/浮点数值
DOUBLE - 双精度/浮点数值
DECIMAL - 小数值
DATE - 日期值
TIME - 时间值或持续时间
YEAR - 年份值
DATETIME - 混合日期和时间值
TIMESTAMP - 混合日期和时间值,时间戳
CHAR - 定长字符串
VARCHAR - 变长字符串
TINYBLOB - 不超过 255 个字符的二进制字符串
TINYTEXT - 短文本字符串
BLOB - 二进制形式的长文本数据
TEXT - 长文本数据
MEDIUMBLOB - 二进制形式的中等长度文本数据
MEDIUMTEXT - 中等长度文本数据
LONGBLOB - 二进制形式的极大文本数据
LONGTEXT - 极大文本数据
关键字:
IS NULL: 当列的值是 NULL,此运算符返回 true
IS NOT NULL: 当列的值不为 NULL, 运算符返回 true
操作符:
= : 等号,检测两个值是否相等,如果相等返回true
<>, != :不等于,检测两个值是否相等,如果不相等返回true
‘>’ :大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true
< : 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true
‘>=’ :大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true
<= :小于等于号,检测左边的值是否小于或等于右边的值, 如果左边的值小于或等于右边的值返回true
<=> :比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时返回 true
1.登录 - mysql -u root -p
u : 登录的用户名;
-p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。
-h : 指定客户端所要登录的 MySQL 主机名, 登录本机(localhost 或 127.0.0.1)该参数可以省略;
2.创建数据库
create database 数据库名;
3.删除数据库
drop database 数据库名;
4.选择数据库
use 数据库名;
5.创建数据表
CREATE TABLE table_name (column_name column_type)
table_name : 表名
column_name : 列名
column_type : 列的类型
创建临时表:CREATE TEMPORARY TABLE
runoob_tbl
删除临时表:DROP TABLE SalesSummary;
(即便不主动删除,关闭连接时也会自动销毁)
例如:
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;
INSERT INTO runoob_tbl
(runoob_title, runoob_author, submission_date)
VALUES
("学习 PHP", "菜鸟教程", NOW());
6.删除数据表:
DROP TABLE table_name;
6.1复制表:
获取数据表的完整结构:SHOW CREATE TABLE runoob_tbl \G;
创建新的克隆表 clone_tbl:CREATE TABLE
clone_tbl
拷贝数据表的数据你可以使用 INSERT INTO… SELECT 语句来实现
例如:
INSERT INTO clone_tbl (runoob_id,
-> runoob_title,
-> runoob_author,
-> submission_date)
-> SELECT runoob_id,runoob_title,
-> runoob_author,submission_date
-> FROM runoob_tbl;
7.插入数据:
INSERT INTO runoob_tbl
例:
INSERT INTO runoob_tbl
(runoob_title, runoob_author, submission_date)
VALUES
("学习 PHP", "菜鸟教程", NOW());
8.查询数据:
SELECT column_name,column_name FROM table_name
- 读取表里所有的数据:
select * from runoob_tbl;
9.子句:WHERE 、 AND 、 OR
- 可以在 WHERE 子句中指定任何条件
- 可以使用 AND 或者 OR 指定一个或多个条件
- WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令
- WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据
例如:SELECT * from runoob_tbl WHERE runoob_author='菜鸟教程' or runoob_author='菜鸟教程2';
10.更新数据库(修改数据表中的数据,且修改的字段不能为空):UPDATE
- 可以同时更新一个或多个字段
- 可以在一个单独表中同时更新数据
例如:UPDATE runoob_tbl SET runoob_title='学习 C++' WHERE runoob_id=3;
11.删除数据表中的数据:DELETE
- 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
- 可以在 WHERE 子句中指定任何条件
- 可以在单个表中一次性删除记录
例如:DELETE FROM runoob_tbl WHERE runoob_id=3;
12.字句:LIKE
- 可以使用LIKE子句代替等号 =
- LIKE 通常与 % 一同使用,类似于一个元字符的搜索
- 可以在 DELETE 或 UPDATE 命令中使用 WHERE…LIKE 子句来指定条件
例如:SELECT * from runoob_tbl WHERE runoob_author LIKE '%COM';
±----------±--------------±--------------±----------------+
| runoob_id | runoob_title | runoob_author | submission_date |
±----------±--------------±--------------±----------------+
| 3 | 学习 Java | RUNOOB.COM | 2015-05-01 |
| 4 | 学习 Python | RUNOOB.COM | 2016-03-06 |
±----------±--------------±--------------±----------------+
13.操作符:UNION
- 用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中
- 将两个表中的相同字段下的所有值列出来,不会重复列出
- 使用 UNION ALL 来选取重复的值
例如:
SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;
14.排序:ORDER BY
- 使用 ORDER BY 子句将查询数据排序后再返回数据:
- 以使用任何字段来作为排序的条件,从而返回排序后的查询结果
- 可以设定多个字段来排序
- 可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列
- 可以添加 WHERE…LIKE 子句来设置条件
例如:SELECT * from runoob_tbl ORDER BY submission_date ASC;
±----------±--------------±--------------±----------------+
| runoob_id | runoob_title | runoob_author | submission_date |
±----------±--------------±--------------±----------------+
| 3 | 学习 Java | RUNOOB.COM | 2015-05-01 |
| 4 | 学习 Python | RUNOOB.COM | 2016-03-06 |
| 1 | 学习 PHP | 菜鸟教程 | 2017-04-12 |
| 2 | 学习 MySQL | 菜鸟教程 | 2017-04-12 |
±----------±--------------±--------------±----------------+
15.分组;GROUP BY
- 根据一个或多个列对结果集进行分组
例如:SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;
±-------±---------+
| name | COUNT(*) |
±-------±---------+
| 小丽 | 1 |
| 小明 | 3 |
| 小王 | 2 |
±-------±---------+
16.连接:
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录
- 将两个表中拥有的相同数据打印出来
例如:SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a, tcount_tbl b WHERE a.runoob_author = b.runoob_author;
±------------±----------------±---------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
±------------±----------------±---------------+
| 1 | 菜鸟教程 | 10 |
| 2 | 菜鸟教程 | 10 |
| 3 | RUNOOB.COM | 20 |
| 4 | RUNOOB.COM | 20 |
±------------±----------------±---------------+
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录
例如: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;
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录
例如:SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a RIGHT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
17.NULL值处理
关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值
SELECT * FROM runoob_test_tbl WHERE runoob_count IS NULL;
18.事物:主要用于处理操作量大,复杂度高的数据
- 比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等
19.命令:ALTER
当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令
新增字段:ALTER TABLE testalter_tbl ADD i INT;
删除字段:ALTER TABLE testalter_tbl DROP i;
设定为第一列:ALTER TABLE testalter_tbl ADD i INT FIRST;
设定为于某个字段之后:ALTER TABLE testalter_tbl ADD i INT AFTER c;
显示表中的所有字段:SHOW COLUMNS FROM testalter_tbl;
修改表名: ALTER TABLE testalter_tbl RENAME TO alter_tbl;
设置字段的默认值:ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
删除字段的默认值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
修改字段类型及名称:可以在ALTER命令中使用 MODIFY 或 CHANGE 子句
例如:在 CHANGE 关键字之后,紧跟着的是你要修改的字段名,然后指定新字段名及类型
ALTER TABLE testalter_tbl MODIFY c CHAR(10);
ALTER TABLE testalter_tbl CHANGE i j BIGINT;
20.索引
添加索引:ALTER table tableName ADD INDEX indexName(columnName)
删除索引:DROP INDEX [indexName] ON mytable;
21.自动增长序列:AUTO_INCREMENT
例如:id INT UNSIGNED NOT NULL AUTO_INCREMENT,