1.操作數據庫
1.1 查看存在的庫、定義信息、正在使用和切換數據庫的命令
a.查看數據庫服務器已有的數據庫:
show databases;
b.查看數據庫的定義信息:
show create database 數據庫名稱;
c.切換/連接數據庫
use 數據庫名稱;
d.查看當前連接的數據庫:
select database();
1.2數據庫的創建
語法:create database 數據庫名稱;
如: create database t1;
1.3數據庫修改和刪除
修改語法:
alter database 數據庫名稱 character set 字符編碼名稱;
如: alter database t1 character set gbk;
刪除語法:
drop database 數據庫名稱;
如:drop database t1;
2.mysql常用數據類型
- int:整型 double:浮點型,例如double(5,2)表示最多5位,其中必須有2位小數,即最大值爲999.99;
- char:固定長度字符串類型; varchar:可變長度字符串類型; text:字符串類型;
- blob:字節類型;
- date:日期類型,格式爲:yyyy-MM-dd;
- time:時間類型,格式爲:hh:mm:ss
- timestamp:時間戳類型 格式爲:yyyy-MM-dd hh:mm:ss
3.操作表
3.1查看當前庫已有表、表定義及表結構
查看當前庫已有表:
show tables;
查看錶定義信息:
show create table 表名;
查看錶結構:
desc 表名;
3.2創建表
語法:
create table 表名(
列名 數據類型(長度),
列名 數據類型(長度),
……
);
注意:最後一列的定義後面不需要加逗號
如:
create table emp(
eid int,
ename varchar(20),
eage int
);
3.3修改表
a.爲emp表添加列address varchar(30)
alter table emp add address varchar(30);
b.修改emp表的address 數據長度爲40
alter table emp modify address varchar(40);
c. 修改address列名爲addr
alter table emp change address addr varchar(40);
d. 刪除emp表的addr列
alter table emp drop addr;
e. 修改emp表的表名爲employee
alter table emp rename to employee;
alter table emp rename employee;
3.4刪除表
語法: drop table 表名;
如:drop table employee;
4.完整性約束
4.1約束簡述
完整性約束:保證數據庫表中數據的正確性,合理性等。
數據庫約束:
- 主鍵約束:用戶保證表中數據的唯一性(沒有重複的數據)
- not null:非空約束。約束列中的數據非空
- unique:唯一約束。保證列數據的唯一性(不能重複)
- 外鍵約束:保證表中數據引用的完整性。
4.2約束詳解
a.創建主鍵約束:主鍵列值必須非空且唯一,並且一個表有且只有一個主鍵。
方式一:
create table stu (
sid varchar(10) primary key,
sname varchar(20)
);
方式二:
create table stu (
sid varchar(10),
sname varchar(20),
primary key(sid)
);
方式三: 先創建表,然後修改表添加主鍵
create table stu (
sid varchar(10),
sname varchar(20)
);
alter table stu add primary key(sid);
主鍵自增:auto_increment
create table stu(
sid int primary key auto_increment,
sname varchar(20)
);
b.非空約束:not null
方式一:
create table stu(
sid int,
sname varchar(20) not null
);
方式二:alter table stu modify sname varchar(20) not null;
c.唯一約束:unique
create table stu(
sid int,
sname varchar(20) unique
);
alter table stu add address varchar(30) unique;
d.外鍵約束:foreign key
方式一:
create table dept(
deptno int,
deptname varchar(20),
primary key(deptno)
);
create table emp(
eid int,
ename varchar(20),
e_d_no int,
primary key(eid),
foreign key(e_d_no) references dept(deptno)
);
方式二:
先定義表結構,然後修改表添加主鍵和外鍵(比較常用)
create table emp(
eid int,
ename varchar(20),
e_d_no int
);
create table dept(
deptno int,
deptname varchar(20)
);
修改主表,添加主鍵
alter table dept add primary key(deptno);
修改從表,添加外鍵引用
alter table emp add foreign key(e_d_no) references dept(deptno);
DML語句:對錶數據的增刪改
相關命令:insert update delete
1. 向表中插入數據:
語法:insert into 表名(用逗號分隔的列名列表) values(使用逗號分隔的每列的數據列表);
如:
insert into stu(sid,sname,age,gender) values('M_001','tom',23,'male');
2.修改表數據:
update 表名 set 列名=新值,列名=新值…… [where 子句];
如:
update stu set sname=’jack’;
3 刪除表中的數據
使用delete刪除表數據
語法: delete from 表名 [where 子句];
如:delete from stu;
使用truncate刪除表數據:
語法:truncate [table] stu;
delete和truncate區別
delete逐條刪除數據(性能較低)
truncate(截斷表):首先執行drop table刪除表結構, 然後再執行create table創建表結構。性能較優。
DQL操作
命令只有select
語法:
SELECT selection_list /*要查詢的列名稱*/
FROM table_list /*要查詢的表名稱*/
[
WHERE condition /*篩選數據行的條件*/
GROUP BY grouping_columns /*對結果分組*/
HAVING condition /*分組後的篩選行的條件*/
ORDER BY sorting_columns /*對結果排序*/
]
注:[…] 代表可選,而不是語句中有[] 。
0.基本查詢:
select * from stu; /*查詢所有列*/
select sname,age from stu; /*查詢指定列*/
1.條件查詢
運算符:
- =、!=、<>、<、<=、>、>=;
- BETWEEN…AND;
- IN(set);
- IS NULL;
- AND;
- OR;
- NOT;
a.查詢年齡大於35歲的人的姓名和年齡
select sname,age from stu where age>35;
b.查詢年齡在15和35歲的人的姓名和年齡
select sname,age from stu where age between 15 and 35;
c.查詢年齡等於25、35、45歲的人的信息
select * from stu where age in(25,35,45);
d.查詢沒有填寫性別的人的信息
select * from stu where gender is null;
e.查詢年齡大於35歲的男性的信息
select * from stu where age>35 and gender=’male’;
f.查詢年齡大於35歲的信息
select * from stu where age>35;
g.查詢性別不爲空的人的信息
select * from stu where gender is not null;
2.模糊查詢
模糊查詢的通配符:
% 表示任意數量的字符
_ 表示任意一個字符
模糊查詢的關鍵詞:like
a.查詢名字是字母z開頭的人
select * from stu where sname like 'z%';
b.查詢名字包含b字母的人
select * from stu where sname like '%b%';
c.查詢名字包含n字母其n字母前只有兩個字符的人
select * from stu where sname like '__n%';
以下查詢使用emp表
3.列別名
使用as關鍵字爲列定義別名,另外,該關鍵字可以省去
select ename as '名字', sal as '月薪' from emp e;
select ename '名字', sal '月薪' from emp e;
4.排序
desc降序 asc升序(默認值)
查看僱員的月薪,並進行排序
select ename, sal as 'sal' from emp order by sal desc;
5.聚合函數
聚合函數是用來做縱向運算的函數:
- COUNT():統計指定列不爲NULL的記錄行數;
- MAX():計算指定列的最大值,如果指定列是字符串類型,那麼使用字符串排序運算;
- MIN():計算指定列的最小值,如果指定列是字符串類型,那麼使用字符串排序運算;
- SUM():計算指定列的數值和,如果指定列類型不是數值類型,那麼計算結果爲0;
AVG():計算指定列的平均值,如果指定列類型不是數值類型,那麼計算結果爲0;
注意:聚合函數只返回一個結果
a.查詢emp表中月薪大於2500的人數:
select count(*) from emp where sal>2500;
b.統計所有員工平均工資:
select avg(sal) from emp;
6.多表查詢
笛卡爾積查詢:
select * from emp,dept;
消除笛卡爾積:
內連接(等值連接)
select * from emp e,dept d where e.deptno=d.detpno;