alter table 表名change 舊字段名 新字段名 類型(長度)[comment 注釋][約束];
刪除字段
alter table 表名 drop 字段名;
修改表名
alter table 表名 rename to 新表名;
alter table emp add nickname varchar(20);
alter table emp change nickname username varchar(30);
mysql> alter table emp drop nickname;
mysql> alter table emp rename to employee;
刪除
刪除表
drop table[if exist]表名;
刪除指定表,并重新創建該表
truncate table 表名;#刪除了數據,留下了框架
DML
添加數據
給指定字段添加數據
insert into 表名(字段名1,字段名2,……) values(值1,值2,……);
給全部字段添加數據
insert into 表名 values (值1,值2,……);
批量添加數據
insert into 表名(字段名1,字段名2,……)values(值1,值2,……),(值1,值2,……);
insert into 表名 values(值1,值2,……),(值1,值2,……);
修改數據:update 表名 set 字段名1=值1,字段名2=值2,……[where 條件];#沒有條件就是全部修改
update user set name ='ittest' where id=1;
刪除數據:delect from 表名[where 條件]
delete from user where age=18;
DQL
語法
基本查詢
查詢多個字段
select 字段1,字段2,字段3……from 表名;
查詢所有字段
select*from 表名;
設置別名
select 字段1[as 別名1],字段2[as 別名2]……from 表名;
去除重復記錄
select distinct 字段列表 from 表名;
create table emp(id int,workno varchar(10),name varchar(10),gender char(1),age tinyint unsigned,idcard char(18),entrydate date,worksddress varchar(50)
) comment '員工表';insert into emp (id, workno, name, gender, age, idcard, entrydate, worksddress) values (1,'1','劉艷','女',20,'12345678909876','2000-01-01','北京'),(2,'2','劉小艷','女',21,'12345678809876','2006-01-01','北京'),(3,'3','劉近','男',24,'12333678909876','2001-05-01','河南'),(4,'4','麗麗','女',25,'44345678909876','2005-01-01','上海'),(5,'5','黃麗','女',23,'22775678909876','2004-05-01','南昌'),(6,'6','金小','女',27,'32348878909876','2009-05-01','北京'),(7,'7','張艷','女',20,'42345678909876','2010-01-01','北京'),(8,'8','小力','男',20,'52345678909876','2022-07-01','北京'),(9,'9','宏光','男',20,'62345678909876','2013-01-01','江蘇'),(10,'10','勇士','男',20,'72345678909876','2014-08-01','北京'),(11,'11','故里','女',20,'82345678909876','2011-01-01','北京'),(12,'12','范嘉','女',23,'92345678909876','2017-07-01','沈陽'),(13,'13','王丹','女',24,'23345678909876','2006-06-01','北京'),(14,'14','誠實','男',26,'45345678909876','2000-07-01','大連'),(15,'15','黃亮','男',28,'78345678909876','2009-07-01','北京'),(16,'16','周芷若','女',20,null,'2009-01-01','北京');
select name,workno,age from emp;
select*from emp;
select worksddress from emp;
select worksddress as '工作地址' from emp;
select distinct worksddress as '工作地址' from emp;
條件查詢
語法
select 字段列表 from 表名 where 條件列表;
<>或!=
不等于
between and
某個范圍之內(含最小值,最大值)
in()
在in之后的列表中的值,多選一
like 占位符
模糊匹配(_匹配單個字符,%匹配任意個字符)
is null
是null
and或&&
并且
or 或||
或者
not或 !
非,不是
select *from emp where age=20;
select * from emp where age<26;
select*from emp where idcard is null;
select *from emp where idcard is not null;
select *from emp where age!=20;
select *from emp where age>=23 and age<=28;
select *from emp where age between 23 and 28;
select *from emp where gender='女' and age<23;
select *from emp where age=20 or age=21 or age=23;
select *from emp where age in (20,21,23);
select *from emp where name like '___';
select *from emp where idcard like '%6';
聚合函數:將一列數據作為一個整體,進行縱向計算
語法
select 聚合函數(字段列表)from 表名;
count
統計數量
max
最大值
min
最小值
avg
平均值
sum
求和
select count(*) from emp;#null不參與聚合函數計算
select avg(age) from emp;
select max(age) from emp;
select sum(age) from emp where worksddress='北京';
分組查詢
語法
select 字段列表 from 表名[where 條件] group by 分組字段[having 分組后過濾條件];
select gender,count(*) from emp group by gender;
select gender,avg(age) from emp group by gender;
select worksddress,count(*) from emp where (age<45) group by worksddress having count(*)>=4;
排序查詢
語法
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
排序方式
asc:升序(默認)desc:降序
select * from emp order by age asc;
select * from emp order by entrydate desc;
select * from emp order by age asc,entrydate desc;
分頁查詢
語法
select 字段列表 from 表名 limit 起始索引,查詢記錄數;
注意
起始索引從0開始,起始索引=(查詢頁碼-1)*每頁顯示記錄數
分頁查詢是數據庫的方言,不同數據庫有不同的實現,MySQL中是limit
如果查詢的是第一頁數據,起始索引可以省略,直接簡寫為limit 查詢記錄數
select * from emp limit 0,10;#查詢第一頁員工信息,每頁展示10條記錄
select * from emp limit 10,10;#查詢第二頁員工信息,每頁展示10條記錄#練習
select * from emp where gender = '女' and age in(20,21,22,23);
select * from emp where gender='女' and (age between 20 and 40) and name like '___';
select gender,count(*) from emp where age<60 group by gender;
select name,age from emp where age<=35 order by age asc,entrydate desc;
select * from emp where gender='男' and (age between 20 and 40) order by age asc,entrydate desc limit 5;
執行順序
from 表名列表 --where 條件列表-- group by 分組字段列表--having 分組后條件列表--select 字段列表--order by 排序字段列表--limit 分頁字段列表
DCL
管理用戶
查詢用戶
use mysql;
select * from user;
創建用戶
creat user '用戶名'@‘主機名’ identified by '密碼';
修改用戶密碼
alter user ‘用戶名’@‘主機名’ identified with mysql_native_password by '密碼';
刪除用戶
drop user '用戶名'@‘主機名’;
#創建用戶itcast,只能夠在當前主機localhost訪問,密碼123456;
create user 'itcast'@'localhost' identified by '123456';
#創建用戶heima,可以在任意主機訪問該數據庫,密碼123456;
create user 'heima'@'%' identified by '123456';
#修改用戶heima 的訪問密碼為1234;
alter user 'heima'@'%' identified with mysql_native_password by '1234';
#刪除itcast@localhost用戶
drop user 'itcast'@'localhost';
權限控制
查詢權限
show grants for '用戶名'@‘主機名’;
授予權限
grant 權限列表 on 數據庫名.表名? '用戶名'@'主機名';
撤銷權限
revoke 權限列表 on 數據庫名.表名 from ‘用戶名’@‘主機名’
權限(多個權限間用逗號分隔)
說明
all,all privileges
所有權限
select
查詢數據
insert
插入數據
update
修改數據
delete
刪除數據
alter
修改表
drop
刪除數據庫/表/視圖
create
創建數據庫/表
show grants for 'heima'@'%';
grant all on test.* to 'heima'@'%';
#windows搜索cmd 輸入MySQL -u heima -p回車再輸入密碼1234回車用戶連接成功可以查詢相關權限
revoke all on test.* from 'heima'@'%';
三、函數
(1)字符串函數
函數
功能
concat(s1,s2,...,sn)
字符串拼接,將s1,s2,...sn拼接成一個字符串
lower(str)
將字符串str全部轉為小寫
upper(str)
將字符串str全部轉為大寫
lpad(str,n,pad)
左填充,用字符串pad對str的左邊進行填充,達到n個字符串長度
rpad(str,n,pad)
右填充,用字符串pad對str的右邊進行填充,達到n個字符串長度
trim(str)
去掉字符串頭部和尾部的空格
substring(str,start,len)
返回從字符串str從start位置起的len個長度的字符串
select concat('hello','mysql');#hellomysql
select lower('Hello');#hello
select lpad('01','5','-');#---01
select trim(' hello mysql ');#hello mysql
select substring('hello mysql',1,5);#hello
update emp set workno =lpad(workno,5,'0');
select curdate();
select curtime();
select now();
select year(now());
select month(now());
select day(now());
select date_add(now(),interval 70 day);
select datediff('2021-12-1',curdate());#-168
select name,datediff(curdate(),entrydate) as'entrydays' from emp order by entrydays desc;
(4)流程函數
函數
功能
if(value,t,f)
如果value為true,則返回t,否則返回f
ifnull(value1,value2)
如果value1不為空,返回value1,否則返回value2
case when [val1] then [res1]... else[defult] end
如果val為true,返回res1,..否則返回default默認值
case [exper] when [val1] then [res1]...else[default] end
如果exper 的值等于val1,返回res1,...否則返回default 默認值
select if(true,'ok','error');
select ifnull(null,'default');
select name,(case worksddress when '北京' then '一線城市' when '上海' then '一線城市' else '二線城市'end) as '工作地址' from emp;