- 創建數據庫
創建一個名稱爲mydb1的數據庫。
create database mydb1;
創建一個使用utf8字符集的mydb2數據庫。
create database mydb2 character set gbk;
創建一個使用utf8字符集,並帶校對規則的mydb3數據庫。
create database mydb3 character set utf8 collate utf8_bin - 查看、刪除數據庫
顯示數據庫語句:
SHOW DATABASES
顯示數據庫創建語句:
SHOW CREATE DATABASE db_name
數據庫刪除語句:
DROP DATABASE [IF EXISTS] db_name - 修改數據庫
ALTER DATABASE [IF NOT EXISTS] db_name
[alter_specification [, alter_specification] …]
alter_specification:
[DEFAULT] CHARACTER SET charset_name | [DEFAULT]
COLLATE collation_name
查看服務器中的數據庫,並把其中某一個庫的字符集修改爲utf8;
alter database mydb3 character set gbk;
4 選擇數據庫
use db_name;
查看當前使用的數據庫:
select database(); - 創建表(基本語句)
character set 字符集 , collate 校對規則
field:指定列名, datatype:指定列類型
注意:創建表時,要根據需保存的數據創建相應的列,並根據數據的類型定義相應的
列類型。例:user對象
desc 表名 來查看錶結構
6 MySQL常用數據類型
○ 字符串型
VARCHAR、CHAR, name varchar(20)、 addr char(20) 最大限度255
varchar相對於char在存儲數據上是可變的,數據長度有多少,就在數據庫當中
存儲多少個字符,並不是每次都存儲20個字符。
char不計數據的長度每次都會固定讀取20個字符的數據,但是在查詢效率上char
比varchar更高,因爲varchar需要先獲取數據的長度,再讀取,而char可以直接讀
取。
○ 大數據類型
BLOB、TEXT
○ 數值型
TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
○ 邏輯型
BIT 0 1
○ 日期型
DATE、TIME、DATETIME、TIMESTAMP
3. 定義單表字段的約束
○ 定義主鍵約束
primary key:不允許爲空,不允許重複
刪除主鍵: 如果主鍵是自增的話,要現將主鍵的自增刪除,再刪除主鍵。
刪除自增:alter table tablename modify id int;
alter table tablename drop primary key ;
主鍵自動增長 :auto_increment
○ 定義唯一約束 – 唯一索引
unique
例如:name varchar(20) unique
○ 定義非空約束
not null
例如:salary double not null
○ 外鍵約束
4. 查看錶信息
查看錶結構:
desc tabName
查看當前所有表:
show tables
查看當前數據庫表建表語句
show create table tabName;
9. 修改表
在上面員工表的基本上增加一個image列。
alter table employee add image blob;
修改job列,使其長度爲60。modify
alter table employee modify job varchar(60);
刪除gender列。drop
alter table employee drop gender;
表名改爲emp。
rename table employee to emp;
修改表的字符集爲utf8
alter table emp character set utf8;
列名name修改爲username
alter table emp change name username varchar(20);
修改姓名爲唯一約束
alter table emp change username username varchar(20) unique;
修改salary字段爲非空約束
alter table emp change salary salary double not null;
-
刪除表
drop table tabName;數據庫表中的數據操作–CRUD
- 數據庫的CRUD
insert – 插入數據
select – 讀取數據
update – 更新數據
delete – 刪除數據
- 數據庫的CRUD
-
使用 INSERT 語句向表中插入數據。
a. insert into table_name values(value1,value2….);
(1)在插入數據的時候,可以在表名後添加上部分或全部字段的名
稱,那麼在values後就需要填寫對應字段的全部數據。沒有指定
填寫的字段,不需要values中書寫。
(2)在書寫字段名稱部分,字段可以是無序的,書寫的字段順序是什
麼,那麼values中書寫的值的順序就是什麼。
c. 插入的數據應與字段的數據類型相同。
d.數據的大小應在列的規定範圍內,例如:不能將一個長度爲80的字符串加入
到長度爲40的列中。
e. 在values中列出的數據位置必須與被加入的列的排列位置相對應。
f. 字符和日期型數據應包含在單引號中
g. 插入空值:不指定或insert into table value(null)
h. 如果要插入所有字段可以省寫列列表,直接按表中字段順序寫值列表
set names gbk;臨時修改當前CMD窗口和mysql的通信編碼字符集 -
Update語句
將所有員工薪水修改爲5000元。
update employee set salary = 5000;
將姓名爲’jack’的員工薪水修改爲3000元。
update employee set salary = 3000 where name=‘jake’;
將姓名爲’luce’的員工薪水修改爲4000元,job改爲ccc。
update employee set salary = 4000,job=‘ccc’ where name= ‘luce’;
將’tom’的薪水在原有基礎上增加1000元。
update employee set salary = salary + 1000 where name=‘tom’;. -
Delete語句
刪除表中名稱爲’ls’的記錄。
delete from employee where name=‘ls’;
刪除表中所有記錄。
delete from employee;
使用truncate刪除表中記錄
truncate employee;
拓展:
truncate刪除表結構並會重新建立表結構,以此形式來刪除表中數據。這種刪除方式可能會影響到表與表直接的關係,
Select語句
查詢表中所有學生的信息。
select * from exam ;
查詢表中所有學生的姓名和對應的英語成績。
select name,english from exam;
過濾表中重複數據。distinct去重
select distinct english from exam;
在所有學生分數上加10分特長分顯示。
select name,chinese+10,math+10,english+10 from exam;
統計每個學生的總分。
select name,chinese+math+english from exam;
使用別名表示學生總分。
select name,chinese+math+english as sum from exam;
select name,chinese+math+english sum from exam;
查詢姓名爲張飛的學生成績。
select * from exam where name=‘張飛’;
查詢英語成績大於90分的同學。
select * from exam where english > 90;
查詢總分大於200分的所有同學。
select name,chinese+math+english sum from exam where chinese+math+english>200;
在where字句中不能使用select語句裏的別名,因爲where關鍵字比select關鍵字執行順序靠前
from — where — select
查詢英語分數在 80-100之間的同學。
select * from exam where english between 80 and 100;
select * from exam where english >= 80 and english <= 100;
查詢數學分數爲65,75,77的同學。
select * from exam where math in(65,75,77);
查詢所有姓張的學生成績。
select * from exam where name like ‘張%’;
查詢數學分>70,語文分>80的同學。
select * from exam where math > 70 and chinese > 80;
select * from exam where math > 60 or chinese <90;
查詢數學成績爲null的學生
insert into exam values(null,‘ls’,60,null,90);
select * from exam where math is null;
order by
對語文成績排序後輸出。
select chinese from exam order by chinese desc;
對總分排序按從高到低的順序輸出
select name,chinese+math+english as sum from exam order by sum desc;
對姓張的學生成績排序輸出
insert into exam values(null,‘張飛飛’,11,12,13);
select name,chinese+math+english as sum from exam where name like ‘張%’ order by sum asc;
ifnull的使用:
select name,ifnull(math,0)+ifnull(chinese,0)+ifnull(english,0) from exam;
#select math from exam;
select ifnull(math,0)+ifnull(chinese,0)+ifnull(english,0) as sum from exam order by sum;
聚集函數
count練習:
統計一個班級共有多少學生?
select count(name) from exam;
select count(math) from exam;
統計數學成績大於90的學生有多少個?
select count(math) from exam where math>90;
統計總分大於230的人數有多少?
select count(ifnull(math,0)+ifnull(chinese,0)+ifnull(english,0)) from exam where ifnull(math,0)+ifnull(chinese,0)+ifnull(english,0) > 230;
sum練習:
統計一個班級數學總成績?
select sum(math) from exam;
統計一個班級語文、英語、數學各科的總成績
select sum(math),sum(chinese),sum(english) from exam;
統計一個班級語文、英語、數學的成績總和
select sum(ifnull(math,0)+ifnull(chinese,0)+ifnull(english,0)) from exam;
統計一個班級語文成績平均分
平均分 = 總分/總人數
select sum(chinese)/count(chinese) from exam;
avg練習:
求一個班級數學平均分?
select avg(math) from exam;
求一個班級總分平均分?
select avg(ifnull(math,0)+ifnull(chinese,0)+ifnull(english,0)) from exam;
max/min函數
練習:
求班級最高分和最低分 (數值範圍在統計中特別有用)
select max(ifnull(math,0)+ifnull(chinese,0)+ifnull(english,0)),min(ifnull(math,0)+ifnull(chinese,0)+ifnull(english,0)) from exam;
where和having區別:where在分組前進行條件過濾,having在分組後進行條件
過濾。使用where的地方都可以用having替換。但是having可以使用分組函
數,而where後不可以使用。