一、表與庫的概念 資料庫管理數據,它是以什麼樣的形式組成的? 生活中的表 >表 table多行多列,傳統的資料庫都是這樣的;聲明瞭表頭,一個表創建好了,剩下的就是往表中添加數據 多張表放在檔案中 >庫 database學生信息表,成績表,記過表 -> 都是這個班級的信息,將這幾張表放在一個文件夾中 ...
一、表與庫的概念
資料庫管理數據,它是以什麼樣的形式組成的?
生活中的表---->表 table
多行多列,傳統的資料庫都是這樣的;聲明瞭表頭,一個表創建好了,剩下的就是往表中添加數據
多張表放在檔案中--->庫 database
學生信息表,成績表,記過表 -> 都是這個班級的信息,將這幾張表放在一個文件夾中 -> 這個文件夾,文檔就是 庫
mysql伺服器可以幫我們管理多個庫
xampp\mysql\data
資料庫中的數據放在這個文件中, .MYD就是數據文件
檔案袋管理員---> 伺服器 server
資料庫就是將我們的數據存儲成文件,分文別類的管理起來
查看庫 show databases;
選庫 use test;
查看庫下的表 show tables;
查表 select * from cat;
二、認識SQL
sql語句大致可以分為三種:
DML is Data Manipulation Language statements. Some examples:數據操作語言,SQL 中處理數
據等操作統稱為數據操縱語言 增刪改查
對我們而言,DML是我們的重點
DDL is Data Definition Language statements. Some examples:數據定義語言,用於定義和管理
SQL 資料庫中的所有對象的語言 (建設者的角度,建表,建庫,建視圖 等等, 15%)
一般來說,一個資料庫在設計完畢之後很少會再改動了
DCL is Data Control Language statements. Some examples:數據控制語言,用來授予或回收訪
問資料庫的某種特權,並控制資料庫操縱事務發生的時間及效果,對資料庫實行監視等
(管理員角度,DBA[資料庫管理員],5%)
這個用戶是否有許可權建表,等
三、增刪改查操作
1. insert 操作
DML,增刪改查—>增
user表,uid name age 三列
(1).添加所有列 添加所有列
insert into user (uid,name,age) values (1,'lisi',23);
(2).一行中有多個列,我們可以插入全部列,也可以插入部分列
但是:列與值要嚴格對應
insert into user (uid,name) values (1,'lucy');
(3).主鍵自增插入 主鍵自增插入 desc user;
insert into user (name) values ('yumi');
(4).插入所有列的簡寫 插入所有列的簡寫
insert into user values ('kimi',25); //報錯:列計數不匹配值計數 insert into user values (3,'kimi',25);
數字可以加單引號,它也會轉成int來理解
但是字元串必須加單引號,不加會理解為一個列名或者變數,會報錯
insert into user values ('4','zhangsan','25'); insert into user values (5,zhangsan,25);
(5).一次添加多行數據 一次添加多行數據
insert into user values (5,'test1',44),(6,'test2',23),(7,'test3',18);
註意:
列與值, 嚴格對應 (id 自增列也必須對應)
數字和字元串的註意點
數字不必加單引號,字元串必須加單引號.
1 次添加多行數據,用逗號隔開
2. update 操作
增刪改查 -> 改
改哪張表?
你需要改哪幾列的值?
分別改為什麼值?
在哪些行生效?
(1).update 更改列
update user set age=99 where name='yumi'; update 表名 set 列1 = 新值1, 列2 = 新值2 where expr
update user set age=23,name='nobody' where uid=2;
(2).update 所有行
註意,不加 where 帶來的後果
update user set name='mingming', age=55;
數據是很寶貴的
如果我們update不加where條件,後果是很可怕的
mysql可以設置新手模式,在新手模式下,刪除和更改不加where條件,它是拒絕執行的.
3. delete 操作
增刪改查 -> 刪
可不可以刪除某一行中的某一列?delete...
其實這是個update操作
對於傳統型資料庫而言,一行就是它的原子型的單位
添加是一行,刪除也要是一行
你要刪除哪張表的數據?
你要刪掉哪些行?
delete from 表名 where expr
sql: *
delete from user where uid=7;
註意不加where條件
delete from user;
4. select 操作
增刪改查 -> 查
查哪張表的數據?
你要選擇哪些列來查詢?
要選擇哪些行?
select 列1,列2,...列n
from 表名
where expr
(1).查詢表的所有行所有列
select * from user;
開發中很少這樣寫,因為表中會有成千上萬的數據,這樣查詢會增加資料庫負擔;
我們需要哪幾條數據,就查詢哪幾條數據即可
(2).查詢一行
select * from user where uid=2;
(3).查詢多行
select * from user where uid>=2;
(4).查詢某幾行的某幾列,* 代表所有列
select uid,name from user where uid>=2; select name from user where uid=2;
dml占sql的80%,查占dml的80%;
我們所學的是最最基礎的查詢語句;
想要寫出高難度的複雜的查詢,我們還需專門討論查詢的模型的問題;
看我們是否能正真理解select,寫出強大的查詢語句,
要靠select的查詢模型,非常之重要
(5).goods表,查詢本店的商品比市場價便宜多少
select goods_id,goods_name,shop_price,market_price,market_price-shop_price from goods;
(6).投影的概念
select name,age from user;
user表有三列,我們只取出2列(部分列),叫做投影運算
就像手電筒筒,只照到兩列,投出影子顯示出來
goods表查詢出來 market_price-shop_price
兩個列做運算,叫做廣義投影
四、練習
1.取整
select num/10 from mian;
2.mysql 手冊函數
floor 向下取整
select floor(num/10)*10 from mian;
3.更改mian表
update mian set num=floor(num/10)*10 where num between 20 and 39; select * from mian;
提示:大膽的把列看成變數,參與運算,甚至調用函數來處理 .
substring(),concat()
4.substring 截取字元串
select goods_id,substring(goods_name,4) from goods where goods_name like '諾基亞%';
5.concat 拼接字元串
select goods_id,concat('HTC',substring(goods_name,4)) from goods where goods_name like '諾基亞%';
6.更改表
為了不破壞表的數據,此處不予修改
update goods set goods_name=concat('HTC',substring(goods_name,4)) where goods_name like '諾基亞%';
大膽的把列看成變數,參與運算
註明:該筆記是學習“MySQL加強_布爾教育”時所記錄的