一. 學習目標
-
理解什么是數據庫,什么是表
-
怎樣創建數據庫和表(create)
-
怎樣往表里插入數據(insert)
-
怎樣修改表里的數據(update)
-
怎樣刪除數據庫,表以及數據(delete)
二. 理解數據庫和表
1. 什么是數據庫
倉庫—存儲貨物的房子
數據庫—存儲數據的房子
思考:
1. 淘寶上面的展示的所有商品信息是從哪里取的?
2. 發表一個商品信息數據又是保存到了哪里?
3. 我們等了qq后查看qq的聊天記錄信息,這些數據又是從哪里取的?
2. 什么是表
如果倉庫里面堆滿了裝衣服的麻袋,那一個個麻袋就可以看做是一個表
3. 數據庫與表的關系

三. 創建數據庫和表
1. 創建數據庫
創建數據庫和表都需要用到數據庫腳本語言:sql,全稱是:Structured Query Language,結構化查詢語言
創建數據庫的sql語法:create database 數據庫名稱;
示例:create database ningmeng;
2. 創建表
思考:如何把下面excel的數據保存到數據庫表里面

建表語法:
create table <表名> (
<字段名1> <類型1>,
<字段名2> <類型2>,
...
<字段名n> <類型n>
) DEFAULT CHARSET=utf8;
后面加上這一串信息,是為了表數據支持中文,否則當存入中文的時候可能會出現亂碼
所以,我們的創建student表的語句是:
create table student( id int(12) not null PRIMARY key, name varchar(12), sex varchar(12), class_id varchar(12), school_id varchar(12), address varchar(12), create_date datetime, update_date datetime )DEFAULT CHARSET=utf8;
解釋:
create:創建
table:表
每一個字段之所以要聲明類型,是因為每一個數據都是有類型的,要么是數字,要么是字符串語句,要么是時間。一個字段聲明了類型后則這個字段就只能存放相應類型的數據
varchar:表示此數據類型為字符串語句
datetime:表示此數據類型為時間類型,最終保存的數據格式為:yyyy-mm-dd HH:mm:ss
not null:表示此字段的值不能為空
3. 表字段:主鍵
表明主鍵的語法:<字段名> <類型1> primary key;
主鍵是什么?它有什么特征
1). 它是數據庫表的一個字段
2). 主鍵是非必須的,也就是說一個表可以不聲明主鍵字段
3). 一旦聲明了某個字段為主鍵,則該字段的值不能重復
4). 一個表只能有一個主鍵
5). 聲明主鍵的時候可以只用一個字段作為主鍵,也可以將多個字段當做主鍵,后者叫聯合主鍵
注意:什么樣的字段適合做主鍵?
能夠唯一的標識表中的一行數據
思考:學生表哪些字段可以唯一標識一條數據?
學號
4. 字段類型
每種字段都有自己的類型,比如整數型、字符型、時間類型、日期類型、浮點型等。下面介紹常用的數據類型
整型:
int(n):n位長度的整數
字符串型:一般表示姓名地址或者長字符串(非數字類的值)
char(n):n個字符,最多255個字符,固定長度
varchar(n):可變長度,最多65535個字符,可變長度
比較:varchar可以節約空間,但char操作起來更快一點
時間和日期
date:日期,格式(yyyy-mm-dd,例如:2016-08-22)
time:時間,格式(hh:mm:ss,例如:18:40:37)
datetime:日期時間,格式(yyyy-mm-dd hh:mm:ss,例如:2016-08-22 18:41:27)
浮點型
float(m, d):m代表總位數,d小數位,如999.9999聲明類型為:float(7, 4)
double(m, d):m總位數,d小數位
5. 總結
1). 創建表的時候,聲明字段的時候,字段之間以什么符號分隔?符號用中文的可以嗎?
英文狀態下的逗號,不可以
2). 建表聲明字段的時候,最后一個字段后面需不需要逗號?
不需要
3). 主鍵的特征是什么?
唯一性
4). 如果表需要支持中文數據存儲和顯示,需要怎么做?
在末尾加上DEFAULT CHARSET=utf8;
6. 課后作業
創建學校表
表名:school
字段:id(編號)、name(學校名稱)、address(學校地址)、phone(學校電話)、create_date(創建時間)、update_date(更新時間)
字段類型:
id int(11)
name varchar(10)
address varchar(100)
phone varchar(20)
create_date datetime
update_time datetime
主鍵:id
create table school( id int(11) not null PRIMARY key, name varchar(10), address varchar(100), phone varchar(20), create_time datetime, update_time datetime )DEFAULT CHARSET=utf8;
四. 數據庫操作—插入數據(INSERT)
1. 插入一條數據,且只對一部分字段賦值
語法:insert into <表名>(字段A, 字段B, 字段C) values(值A, 值B, 值C);
示例: insert into grade(id, name) values(1, '高一年級');
2. 插入一條數據,對所有字段都賦值
語法:insert into <表名> values(值A, 值B, 值C..., 值F);
示例:insert into grade values(1, '高一年級', SYSDATE(), SYSDATE());
總結:
需要注意的是,如果插入數據時,只對部分字段進行初始化,則需要聲明要插入的字段
在mysql中,字符串的數據是用英文的''括起來的
創建一個grade表
create table grade( id int not null PRIMARY key, name varchar(10), create_date datetime, update_date datetime )DEFAULT CHARSET=utf8;
然后向其中插入一條數據,對一部分字段賦值
insert into grade(id, name) values(1, '高一年級');

插入一條數據,對所有字段賦值
insert into grade values(2, '高一年級', SYSDATE(), SYSDATE());

3. 一次插入多條數據
語法:insert into <表名> values(值1, 值2...), (值1, 值2...)......;
示例:一次性往年級表里面插入三條數據
insert into grade values(3, '高三年級', SYSDATE(), SYSDATE()), (4, '高四年級', SYSDATE(), SYSDATE()), (5, '高五年級', SYSDATE(), SYSDATE());
一次性插入多條數據
insert into grade values(3, '高三年級', SYSDATE(), SYSDATE()), (4, '高四年級', SYSDATE(), SYSDATE()), (5, '高五年級', SYSDATE(), SYSDATE());

五. 數據庫—修改數據(UPDATE)
1. 修改一個表里的所有數據
語法:update 表名 set 字段名=新值;
示例:將學生表里所有學生的住址改為"深圳寶安西鄉"
update student set address='深圳寶安西鄉';
2. 修改一個表里滿足某一條件的那一部分數據
語法:update 表名 set 字段名=新值 where 表達式
示例:將學生表里名字為華華的家庭住址改為"北京海淀區"
update student set address='北京海淀區' where name='華華';
總結:
如果要更新一個表里滿足某個條件的數據,同樣需要用到關鍵字"where"來進行過濾找出那一部分數據,然后針對這一部分數據做更新操作
新創建一個student表
create table student( id int not null PRIMARY key, name varchar(10), sex varchar(10), class_id int, address varchar(100), create_date datetime, update_date datetime )DEFAULT CHARSET=utf8;
向表中插入兩條數據
insert into student values(1601001,'檸檬','女',1601,'深圳市南山區家和苑小區',SYSDATE(),SYSDATE()); insert into student values(1601002,'華華','女',1601,'深圳市南山區家和苑小區',SYSDATE(),SYSDATE());

將student表里所有學生的住址改為"深圳寶安西鄉"
update student set address='深圳寶安西鄉';

將學生表里名字為華華的家庭住址改為"北京海淀區"
update student set address='北京海淀區' where name='華華';

六. 數據庫—刪庫刪表(DROP)
1. 刪除數據庫
語法:drop database 數據庫名稱;
示例:刪除數據庫 xiaozhai
drop database xiaozhai;
2. 刪除數據表
語法:drop table 表名;
示例:刪除school表
drop table school;
總結:
1. drop database test_database; 會把數據庫test_database刪掉,因此庫里所有的表和數據都一並刪除
2. drop table test_table; 會把test_table表刪掉,因此表的數據也刪掉了
3. drop作為一種刪除命令,它不僅會刪數據結構(庫/表),而且會刪數據。簡單點講:drop 刪結構且刪數據
4. 這兩個命令要慎用
七. 數據庫—刪數據(DELETE)
1. 刪掉表里的所有數據
語法:delete from 表名;
示例:刪除學生表里的所有數據
delete from student; 刪除一個表里的所有數據
2. 刪除一個表里的滿足某個條件的數據
語法:delete from 表名 where 條件;
示例:刪除學生表里名字為"華華"的數據
delete from student where name='華華';
總結:
1. 如果要刪除某個表里滿足某個條件的數據,需要用到關鍵字"where"來進行過濾找出那一部分數據
2. delete也是一種刪除命令,但是與drop命令不同的是,delete只會刪除表數據,不會刪表和庫。簡單點講:delete刪數據不刪結構
刪除學生表里名字為"華華"的數據
delete from student where name='華華';

八. 常見問題注意
1. 建表的時候每一個字段的后面用什么符號分隔?最后一個字段后面需要分隔符嗎?
逗號,不需要
2. 插入數據時,只初始化部分字段與初始化所有字段時sql的不同點體現在哪里?
初始化所有字段,不需要寫字段名
3. 賦值時,對於varchar類型的字段,賦的值必須用什么符號括起來?
英文狀態下的單引號''
4. 字段聲明了長度,賦值的時候應該注意什么?
插入數據的長度必須小於等於聲明的長度
5. 聲明為主鍵的值可以重復嗎?
不可以
6. 不插入必填字段(not null字段),插入語句能否執行成功?
不能執行成功的
7. 插入一條數據和多條數據的語法區別是?多條數據時,中間以什么符號做分隔?
插入多條數據,多個括號括起來,以逗號做風格
8. 如果表需要支持中文數據存儲和顯示,需要怎么做?
設置DEFAULT CHARSER=utf8;
九. 課后作業
一. 按照下面給出的表結構創建下面幾個表


二. 用課堂上學習的insert語句向各個表里插入正常的非垃圾數據
注意事項:
1. 成績表里成績是分數(0~100分)
2. 學生的性別和姓名都是中文
要求:至少每個表里都要有10條數據
