SQL语言共分为四大类:
- 数据查询语言DQL
SELECT <字段名表> FROM <表或视图名> WHERE <查询条件>
- 数据操纵语言DML
<1> 插入:INSERT <2> 更新:UPDATE <3> 删除:DELETE
- 数据定义语言DDL
用来创建数据库中的各种对象—–表、视图、索引、同义词、聚簇等
CREATE TABLE表/VIEW视图/INDEX索引/SYN同义词/CLUSTER簇
DDL操作是隐性提交的!不能rollback
- 数据控制语言DCL
数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制
数据库操纵事务发生的时间及效果,对数据库实行监视等。如:
- GRANT:授权。
- ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。
回滚—ROLLBACK
回滚命令使数据库状态回到上次最后提交的状态。其格式为:
SQL>ROLLBACK; - COMMIT [WORK]:提交。
# 进入 mysql -u root -p # 退出 exit # 查看数据库 show databases;
# 创建数据库 CREATE DATABASE dataname; # 删除数据库 drop database dataname; # 使用数据库 use dataname;
数值类型
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
字符串类型
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。
# 创建数据表 # 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); # 删除数据表 DROP TABLE table_name; # 插入数据 # 如果数据是字符型,必须使用单引号或者双引号,如:"value" INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN ); # 读取数据表 select * from table_name;
# 查询数据 SELECT column_name,column_name FROM table_name [WHERE condition1 [AND [OR]] condition2..... [LIMIT N][ OFFSET M] # 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。 # SELECT 命令可以读取一条或者多条记录。 # 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据 # 你可以使用 WHERE 语句来包含任何条件。 # 你可以使用 LIMIT 属性来设定返回的记录数。 # 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。 # 你可以在 WHERE 子句中指定任何条件。你可以使用 AND 或者 OR 指定一个或多个条件。 # WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。 # WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。 # 可用于 WHERE 子句中的操作符列表,=、!=、>、<、>=、<=
# LIKE 子句 SELECT field1, field2,...fieldN FROM table_name WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue' # LIKE 通常与 % 一同使用,类似于一个元字符的搜索 # 你可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句来指定条件。
# UPDATE 更新数据 UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause] # DELETE删除记录 DELETE FROM table_name [WHERE Clause]
# 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]; # DISTINCT: 可选,删除结果集中重复的数据。默认为DISTINCT # ALL: 可选,返回所有结果集,包含重复数据。
# 排序ORDER BY # 你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认升序排列 # SELECT * from runoob_tbl ORDER BY submission_date DESC; SELECT field1, field2,...fieldN FROM table_name1, table_name2... ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
# 分组GROUNP BY #GROUP BY 语句根据一个或多个列对结果集进行分组。在分组的列上我们可以使用 COUNT, SUM, AVG等函数。 SELECT name, COUNT(*) as singin_count FROM employee_tbl GROUP BY name;
# 连接 # INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。 # LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。 # RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。 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; 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; 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;
# NULL值处理 # 查找数据表中 runoob_test_tbl 列是否为 NULL,必须使用 IS NULL 和 IS NOT NULL, SELECT * FROM runoob_test_tbl WHERE runoob_count IS NULL; SELECT * from runoob_test_tbl WHERE runoob_count IS NOT NULL;
# ALTER命令 # 修改数据表名或者修改数据表字段时,使用到MySQL ALTER命令。 # 删除列 ALTER TABLE testalter_tbl DROP i; # 添加列 ALTER TABLE testalter_tbl ADD i INT; # 查看列 SHOW COLUMNS FROM testalter_tbl; # 修改字段类型和名称 ALTER TABLE testalter_tbl MODIFY c CHAR(10); # 设置字段默认值 ALTER TABLE testalter_tbl MODIFY j BIGINT NOT NULL DEFAULT 100; # 修改字段默认值 ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000; # 修改表名 ALTER TABLE testalter_tbl RENAME TO alter_tbl;
# 索引 # CREATE INDEX indexName ON table_name (column_name); # 创建索引 CREATE INDEX 索引名ON 表名 ( 字段1,[字段2,……] ); # 删除索引 ALTER INDEX 索引名 REBUILD; # 显示索引 # 添加 \G 来格式化输出信息 SHOW INDEX FROM table_name; \G