结构化查询语言包含6个部分:
1、数据定义语言(DDL):其语句包括动词CREATE,ALTER和DROP。在数据库中创建新表或修改、删除表(CREATE TABLE 或 DROP TABLE);为表加入索引等。
1.1例如:CREATE DATABASE mydb1,创建一个名为 mydb1 的数据库。如果这个数据已经存在,那么会报错。
例如 CREATE DATABASE IF NOT EXISTSmydb1,在名为 mydb1 的数据库不存在时创建该库,这样可以避免报错。
1.2例如:DROP DATABASE mydb1,删除名为 mydb1 的数据库。如果这个数据库不存在,那么会报错。DROP DATABASE IF EXISTS mydb1,就算 mydb1不存在,也不会的报错。
1.3修改数据库编码:ALTER DATABASE mydb1 CHARACTER SET utf8
修改数据库 mydb1 的编码为 utf8。注意,在 MySQL 中所有的 UTF-8 编码都
不能使用中间的“-”,即 UTF-8 要书写为 UTF8。
2、数据操作语言(DML:Data Manipulation Language):其语句包括动词INSERT、UPDATE和DELETE。它们分别用于添加、修改和删除。
2.1 INSERT
语法 1:INSERT INTO 表名(列名 1,列名 2, …) ;
INSERT INTO stu(sid, sname,age,gender) VALUES('s_1001', 'zhangSan', 23, 'male');
语法 2:INSERT INTO 表名 VALUES(值 1,值 2,…);
因为没有指定要插入的列,表示按创建表时列的顺序插入所有列的值:
INSERT INTO stu VALUES('s_1002', 'liSi', 32, 'female');
注意:所有字符串数据必须使用单引用!
2.2 UPDATE
修改数据
语法:UPDATE 表名 SET 列名 1=值 1, … 列名 n=值 n [WHERE 条件];
UPDATE stu SET sname=’zhangSanSan’, age=’32’, gender=’female’ WHERE sid=’s_1001’;
UPDATE stu SET age=age+1 WHERE sname=’zhaoLiu’;
2.3 DELETE 删除数据
语法 1:DELETE FROM 表名 [WHERE 条件];
DELETE FROM stu WHERE sname=’chenQi’ OR age > 30;
DELETE FROM stu;
语法 2:
TRUNCATE TABLE 表名;
TRUNCATE TABLE stu;
DELETE 和 TRUNCATE 两者之间的区别:
虽然 TRUNCATE 和 DELETE 都可以删除表的所有记录,但有原理不同。DELETE的效率没有 TRUNCATE 高!
TRUNCATE 其实属性 DDL 语句,因为它是先 DROP TABLE,再 CREATE TABLE。
而且TRUNCATE删除的记录是无法回滚的,但DELETE删除的记录是可以回滚的(回滚是事务的知识!)
3、数据控制语言(DCL):它的语句通过GRANT或REVOKE实现权限控制,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
3.1 创建用户
语法:CREATE USER ‘用户名’@地址 IDENTIFIED BY '密码';
CREATE USER ‘user1’@localhost IDENTIFIED BY ‘123’;
CREATE USER ‘user2’@’%’ IDENTIFIED BY ‘123’;
3.2 给用户授权
语法:GRANT 权限 1, … , 权限 n ON 数据库.* TO ‘用户名’@地址;
GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mydb1.* TO user1@localhost;
GRANT ALL ON mydb1.* TO user2@localhost;
3.3 撤销授权
语法:REVOKE 权限 1, … , 权限 n ON 数据库.* FROM ‘用户名’@地址;
REVOKE CREATE,ALTER,DROP ON mydb1.* FROM user1@localhost;
3.4 查看用户权限
语法:SHOW GRANTS FOR ‘用户名’@地址;
SHOW GRANTS FOR user1@localhost;
3.5 删除用户
语法:DROP USER ‘用户名’@地址;
DROP USER ‘user1’@localhost;
3.6 修改用户密码(以Root身份)
语法 :use mysql;
alter user '用户名'@localhost identified by '新密码';
4、数据查询语言(DQL: Data Query Language):其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其它类型的SQL语句一起使用。
select … from student where 条件 group by 分组字段 having 条件 order by 排序字段
执行顺序:from->where->group by->having->order by->select
注意:group by 通常和聚合函数(avg(),count()…)一起使用 ,经常先使用group by关键字进行分组,然后再进行集合运算。
group by与having 一起使用,可以限制输出的结果,只有满足条件表达式的结果才会显示。
having和where的区别:
两者起作用的地方不一样,where作用于表或视图,是表和视图的查询条件。having作用于分组后的记录,用于选择满足条件的组。
5、事务控制语言(TCL):它的语句能确保被DML语句影响的表的所有行及时得以更新。包括COMMIT(提交)命令、SAVEPOINT(保存点)命令、ROLLBACK(回滚)命令。
6、指针控制语言(CCL):它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。