sql系列 语法分类
SQL 分类
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
DQL(Data Query Language):数据查询语言,用来查询记录(数据)
DDL:数据定义语言 defining
基本操作
查看所有数据库:show databases;
切换数据库:use mydb1,切换到 mydb1 数据库;
1.操作数据库
创建数据库:CREATE DATABASE [IF NOT EXISTS] mydb1;
例如:CREATE DATABASE mydb1,创建一个名为 mydb1 的数据库。如果这个数据已经存在,那么会报错。
例如 CREATE DATABASE IF NOT EXISTS mydb1,在名为 mydb1 的数据库不存在时创建该库,这样可以避免报错。
删除数据库:DROP DATABASE [IF EXISTS] mydb1;
例如:DROP DATABASE mydb1,删除名为 mydb1 的数据库。如果这个数据库不存在,那么会报错。DROP DATABASE IF EXISTS mydb1,就算 mydb1不存在,也不会的报错。
修改数据库编码:ALTER DATABASE mydb1 CHARACTER SET utf8
修改数据库 mydb1 的编码为 utf8。注意,在 MySQL 中所有的 UTF-8 编码都
不能使用中间的“-”,即 UTF-8 要书写为 UTF8。
创建表
CREATETABLE表名(列名 列类型,列名 列类型,......);
查看表的结构
DESC 表名;
删除表
DROP TABLE 表名;
修改表
添加列:给 stu 表添加 classname 列
ALTER TABLE stu ADD (classname varchar(100));
修改列的数据类型:修改 stu 表的 gender 列类型为 CHAR(2)
ALTER TABLE stu MODIFY gender CHAR(2);
修改列名:修改 stu 表的 gender 列名为 sex
ALTER TABLE stu change gender sex CHAR(2);
删除列:删除 stu 表的 classname 列
ALTER TABLE stu DROP classname;
修改表名称:修改 stu 表名称为 student
ALTER TABLE stu RENAME TO student;
INSERT INTO stu(sid, sname,age,gender) VALUES('s_1001', 'zhangSan', 23, 'male');
INSERT INTO stu VALUES('s_1002', 'liSi', 32, 'female');
语法 1:
INSERT INTO 表名(列名 1,列名 2, …) ;
INSERT INTO stu(sid, sname,age,gender)VALUES('s_1001','zhangSan',23,'male');
INSERT INTO stu(sid, sname)VALUES('s_1001','zhangSan');
UPDATE stu SET sname=’zhangSanSan’, age=’32’, gender=’female’ WHERE sid=’s_1001’;
UPDATE stu SET sname=’liSi’, age=’20’ WHERE age>50 AND gender=’male’;
UPDATE stu SET sname=’wangWu’,
age=’30’ WHERE age>60 OR gender=’female’;
UPDATE stu SET gender=’female’ WHERE gender IS NULL
UPDATE stu SET age=age+1 WHERE sname=’zhaoLiu’;
DELETE FROM stu WHERE sid=’s_1001’003B;
DELETE FROM stu WHERE sname=’chenQi’ OR age >30;
DELETE FROM stu;
两者之间的区别:
虽然 TRUNCATE 和 DELETE 都可以删除表的所有记录,但有原理不同。DELETE的效率没有 TRUNCATE 高!
TRUNCATE 其实属性 DDL 语句,因为它是先 DROP TABLE,再 CREATE TABLE。
而且TRUNCATE删除的记录是无法回滚的,但DELETE删除的记录是可以回滚的(回滚是事务的知识!)。
1.创建用户
语法:
CREATE USER ‘用户名’@地址 IDENTIFIED BY '密码';
CREATE USER ‘user1’@localhostIDENTIFIEDBY‘123’;CREATEUSER‘ user2’@’%’IDENTIFIEDBY‘123’;
2.给用户授权
语法:
GRANT 权限 1, … , 权限 n ON 数据库.* TO ‘用户名’@地址;
GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mydb1.*TO user1@localhost;
GRANT ALL ON mydb1.*TOuser2@localhost;
3.撤销授权
语法:
REVOKE 权限 1, … , 权限 n ON 数据库.* FROM ‘用户名’@地址;
REVOKE CREATE,ALTER,DROP ON mydb1.*FROM user1@localhost;
4.查看用户权限
语法:
SHOW GRANTS FOR ‘用户名’@地址;
SHOW GRANTS FOR user1@localhost;
5.删除用户
语法:
DROP USER ‘用户名’@地址;
DROP USER ‘user1’@localhost;
6.修改用户密码(以root身份)
语法:
use mysql;
alter user '用户名'@localhost identified by '新密码';
语法:
select 列名 ----> 要查询的列名称
from 表名 ----> 要查询的表名称
where 条件 ----> 行条件
group by 分组列 ----> 对结果分组
having 分组条件 ----> 分组后的行条件
order by 排序列 ----> 对结果分组
limit 起始行, 行数 ----> 结果限定
数据查询的基本语法结构其实非常简单,就是要取数,
从哪个表里面取(单表简单,多表需要再join一下),
按照什么维度取,取哪个指标(聚合函数),限制条件是什么(where),
把结果聚合一下(group by),按照哪个字段排序(order by)这个基本上就够用了,复杂一些再来个Having。