數據庫和表的創建
用戶的增 刪 改 查
增 create user '用戶名'@'192.168.16.%' identified by ‘123’;
創建一個賬戶,并設置密碼,可不設密碼
grant all on *.* to '用戶'@'地址'; #給賬戶授權 flush privileges; #刷新授權立即生效
創建賬戶并授權
grant all on *.* to 'eva'@'%' identified by '123'
刪 drop user '用戶名'@'ip地址';
改 rename user '用戶名'@'ip地址' to '新用戶名'@‘ip地址' ;
查 select user,host from mysql.user; 查看賬戶和地址
庫(文件夾)的增 刪 改 查
- 增 create database 庫名 charset utf8; 增加一個庫,編碼為utf8
- 查 show databases; 查看所有的數據庫
- 改 alter database 庫名 charset latin1;
- 刪除 drop database 庫名 ; 慎用
操作表(文件) 增 查 改 刪
先切換到庫中
use 庫名
例 use db
增 create table 表名 (列名 類型 約束,列名 類型 約束);
列名與列名之間用逗號隔開, **約束可不設置**
類型
- int 整數 float 小數 (常用)
- date 年月日 time 時分秒 datetime 年月日時分秒
- char 定長字符串 varchar 變長字符串
約束 not null, unique , primary key , foreign key (自列名) references 約束表名(列名),auto_increment,
not null
非空約束,指定某列不能為空
unique
唯一約束
primary key
主鍵 指定給列名的值可以唯一地標識該記錄
foreign key
外鍵 指定該行記錄從屬于主表中的一條記錄,主要用于參照完整性
例:foreign key (id) references class(cid)
foreign key(dpt_id) references department(id) on delete cascade # 連級刪除 on update cascade # 連級更新
atuo_increment
表示自增
查 show tables
查庫中的所有表名
- desc 表名
查看表結構
- desc 表名
改
- alter table 表名 modify 原列名 新的類型 約束;
在表名中的列名改成新的類型和約束(覆蓋掉原來的類型和約束)
- alter table 表名 change 原列名 新列名 新的類型 約束;
將表名中的列名更換成新的列名,和新的類型,約束(**必須寫新的類型和約束,不能直接只修改列名**)
- alter table 表名 modify 原列名 新的類型 約束;
刪 drop table 表名;
刪除某個表
操作表(文件)內容 增 查 改 查 清空表
增 insert into 表名 values (1,'egon1'),(2,'egon2');
改 update 表名 set 列名=’新的類容‘ where id = 2;
需要用到主鍵作為約束條件
刪
- delete from 表名 where id =1;
根據條件進行刪除某一行
- delete from 表名 where id =1;
清空表
- delete from 表名;
清空表中的內容,如果表中有自增id,那么新增的數據仍然是刪除前的最后一個+1
- truncate table 表名;
清空,有自增的也從0開始,速度比上一條快
- delete from 表名;
查
簡單查詢
select * from 表名;
可以單獨查表名中的某些列名,將*號換成列名,列名與列名之間用逗號隔開
- 例
select id,name from student;
去重查 distinct
select distinct 列名 from 表名;
對所查列名進行去重
- 通過四則運算查詢
select 列名*12 as 別名 from 表名;
比如說月薪x12 進行查詢,as是取別名的意思,as可以省略不寫
- 定義顯示格式,concat() 用于連接字符串
類似格式化輸出
- 定義顯示格式,concat() 用于連接字符串
select concat('內容',列名,'內容',列名) as 別名 from 表名
例 select concat('姓名:',name,'年齡:',age) as user from users;
concat_ws() 第一個參數為分割符
例select concat_ws(':',name,age) as user from users;
?
結果為: alex:38
- 結合case語句
SELECT(CASEWHEN emp_name = 'jingliyang' THENemp_nameWHEN emp_name = 'alex' THENCONCAT(emp_name,'_BIGSB')ELSEconcat(emp_name, 'SB')END) as new_nameFROMemp;
- where約束
where 類似if條件語句
between 80 and 100
值在80到100之間
between 是之間的意思- not between
值不在80到100之間的數,
- not between
in(a,b,c)
表示取值為a或b或c的數
is null 或者 is not null
判斷某個字段是否為空,不能用等號
like 'eg%'
以eg...開頭的
%表示eg后面接任意長度字符,- like 'eg_'
以eg后只能由一個字符
_表示任意長度為1字符
- like 'eg_'
聚合函數 count(),對于數字類的列名可以用avg(平均),min,max,等
- 例
select avg(salary) from employee where depart_id = 3;
- 例
分組關鍵字group by 分組的意思 通常和group_concat() ,聚合函數配合使用
SELECT post,GROUP_CONCAT(emp_name) FROM employee GROUP BY post;#按照崗位分組,并查看組內成員名 select post,count(id) as count from employee group by post;#按照崗位分組,并查看每個組有多少人
優先級 where >group by > having >order by
單例排序 以...進行排序 order by 列名 osc;
小到大,osc為默認值,可以不寫
或者order by 列名 desc;大到小
多例排序
先按照age排序,如果年紀相同,就按薪資排序
SELECT * from employee ORDER BY age,salary DESC;
限制次數 limit 顧首不顧尾,初始值為0
SELECT * FROM employee ORDER BY salary DESCLIMIT 0,5; #從第0開始,即先查詢出第一條,然后包含這一條在內往后查5條SELECT * FROM employee ORDER BY salary DESCLIMIT 5,5; #從第5開始,即先查詢出第6條,然后包含這一條在內往后查5條
正則關鍵字 regexp
SELECT * FROM employee WHERE emp_name REGEXP 'on$';