Mysql基础操作(DQL,DML,DDL,DCL)
1.1 数据库的四种语法
数据查询语言DQL,
数据操纵语言DML, database manipulate / məˈnɪpjuleɪt/控制,操纵,影响
数据定义语言DDL,
数据控制语言DCL。
1.1.1 数据查询语言DQL
数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块:
SELECT
FROM
WHERE
1.1.2 数据操纵语言DML
数据操纵语言DML主要有三种形式:
1) 插入:INSERT
2) 更新:UPDATE
3) 删除:DELETE
1.1.3 数据定义语言DDL
数据定义语言DDL用来创建数据库中的各种对象—–表、视图、索引、同义词、聚簇等如:
CREATE TABLE VIEW INDEX SYN CLUSTER
创建 表 视图 索引 同义词 簇
DDL操作是隐性提交的!不能rollback
1.1.4 数据控制语言DCL
数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。如:
1.1.4.1 GRANT:授权。
1.1.4.2 ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。
回滚—ROLLBACK
回滚命令使数据库状态回到上次最后提交的状态。
其格式为: SQL>ROLLBACK;
1.1.4.3 COMMIT [WORK]:提交。
在数据库的插入、删除和修改操作时,只有当事务在提交到数据库时才算完成。在事务提交前,只有操作数据库的这个人才能有权看到所做的事情,别人只有在最后提交完成后才可以看到。提交数据有三种类型:显式提交、隐式提交及自动提交。下面分别说明这三种类型。
(1) 显式提交
用COMMIT命令直接完成的提交为显式提交。其格式为:
SQL>COMMIT;
(2) 隐式提交
用SQL命令间接完成的提交为隐式提交。这些命令是:
ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,
EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。
(3) 自动提交
若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,
系统将自动进行提交,这就是自动提交。其格式为:
SQL>SET AUTOCOMMIT ON;
DQL常见命令
1.在一个表中查询查询
select ENAME,JOB FROM emp;
2.在emp中查询姓名,工作岗位和年薪
select ENAME,JOB,SAL*12 FROM emp;
select ENAME,JOB,SAL*12 as yearsal FROM emp;
注:在月薪后面*12即可;as可以省略;as后面是别名.
3.查看全部信息
select * from emp;
注:不建议这样使用*,因为mysql会自动的把* 转换成表中的信息,这样会大大降低性能.
4.查询薪水是5000的员工
select ENAME,EMPNO FROM emp where SAL=5000;
5.查询工作是CLERK的员工
select ENAME,EMPNO FROM emp where JOB='CLERK';
6.查询薪水不等于5000的员工
select ENAME from emp where SAL <>5000;
7.查询薪水1600-3000的员工
select ENAME from emp where SAL>=1600 and SAL<=3000;
8.查询津贴为空的员工
select ENAME from emp where COMM is null;
9.查询工作岗位
select ENAME from emp where COMM is null;
10.查询工作为CLERK或MANAGER的员工
select ENAME,JOB from emp where JOB='CLERK' or JOB='MANAGER';
11.查询薪水大于1800并且部门编号是20或30的员工
select ENAME,JOB,SAL from emp where SAL>=1800 and (DEPTNO='20' or DEPTNO='30');
12.查询工作为CLERK或MANAGER的员工
select ENAME,JOB from emp where JOB='CLERK' or JOB='MANAGER';
注:in的执行效率低
13.like 模糊查询,数据量大的时候,影响性能;
DML常见命令
DML是对数据库表中的数据增删改的操作.
1.插入数据:
insert into emp(id,name,sex,birthday,salary) values (1,'dupudupu','男','2011-09-08',1000);
也可以这样写,省略前面括号里面的内容
insert into emp values (2,'Paul','男','2018-09-22',800);
批量插入:
insert into emp values
(3,'Lili','女','2017-06-25',3000),
(4,'Hali','男','2014-09-08',1000),
(5,'Soso','女','1997-07-30',10000),
(6,'Mama','女','1789-03-25',8888);
3.修改数据:当我在Mysql Workbench中使用下面的语句时,出现了错误
update emp set name='Dupu' where id = 1;
首先语句是没有错的,经查询
错误原因:是在safe mode下,要强制安全点,update只能跟where
Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.
解决方案 : 执行命令---->SET SQL_SAFE_UPDATES = 0;
4.删除数据
delete from emp where id=6;
DDL常见命令
DDL主要负责数据库的创/改/查/删以及表格的创/改/查/删
1.创建数据库:
create database [数据库名] character set [字符编码];
例如:
create database study1 character set utf8;
2.查看数据库:
show databases;
3.查看数据库创建明细:
show create database [数据库名字];
4.修改数据库编码:
alter database [数据库名] character set [字符编码];
5.删除数据库:
drop database [数据库名];
6.使用数据库:
use [数据库名];
7.创建表格:
create table employee(id int,name varchar(20),sex char(2),birthday date,job varchar(50),salary double(7,2));
8.查看表的结构:
desc [表名];
9.在表中插入列:
alter table employee add address varchar(100);
10.修改列字符的属性:
ALTER TABLE employee MODIFY job VARCHAR(20);
注:即将原来varchar(50)改为20;
11.删除某列:
ALTER TABLE employee DROP address;
12.更改表名:
RENAME TABLE employee to user;
13.查看表的创建细节:
SHOW CREATE TABLE user;
14.修改字段名:
ALTER TABLE user CHANGE name username VARCHAR(10);
15.删除表:
DROP TABLE user;
16.删除索引
ALTER TABLE `user` DROP INDEX index_mobile;
17.创建联合索引
CREATE INDEX TABLE_username_password ON TABLE(username,password)
create index union_t on user_info(uname,departname)
18.显示所有索引
show index from tb1;
19.删除主键索引
alter table user_info drop primary key;
DCL命令
1. 创建用户
SQL语句 注意说明
create user "用户名"@"IP地址" identified by "密码"; 用户只能在指定的IP地址上登录
create user "用户名"@"%" identified by "密码"; 用户可以在任意IP地址上登录
命令演示
mysql> CREATE USER "demo_user"@"127.0.0.1" IDENTIFIED BY "123456";
mysql> CREATE USER "demo_user1"@"%" IDENTIFIED BY "123456";
mysql> CREATE USER "demo_user2"@"localhost" IDENTIFIED BY "123456";
2. 给用户授权
SQL语句 注意说明
grant 权限1,权限2,... on 数据库.* to "用户名"@"IP地址" 给用户分派在指定的数据库的指定的权限
grant all on 数据库.* to "用户名"@"IP地址" 给用户分派在指定数据库的所有的权限
mysql> GRANT UPDATE, INSERT, DROP, DELETE ON demodb.* TO 'demo_user'@'127.0.0.1';
3. 撤销授权
SQL语句 注意说明
revoke 权限1,...,权限n on 数据库.* from "用户名"@"IP地址" 撤销指定用户在指定数据上的指定权限
mysql> REVOKE INSERT, UPDATE ON demodb.* FROM 'demo_user'@'127.0.0.1';
row | row
4. 查看权限
SQL语句 注意说明
show grants for "用户名"@"IP地址" 查看指定用户的权限
命令演示
mysql> SHOW GRANTS FOR 'demo_user'@'127.0.0.1';
5. 删除用户
SQL语句 注意说明
drop user "用户名"@"IP地址" 删除用户
命令演示
mysql> DROP USER "demo_user2"@"localhost";