MySQL-01

1.數據庫介紹

數據庫是用來存放數據的,數據不是直接存放在數據庫中的,數據庫中存放的是表,表中存放的才是數據.

圖片1.png

所以我們學習就是分為數據的操作,表的操作,數據庫的操作.

2.數據庫的發展史

2.1萌芽階段(文件)

所有的存儲數據的文件都屬于數據庫.安全性低.

2.2層次模型

1.優點:查詢分類的數據效率比較高
2.缺點:
    導航結構,如果查找不同類型的數據,那么效率非常低
    數據的不完整(如下圖)
圖片2.png

注意:在數據庫中,數據本身是沒有對錯之分的,如果數據不正確的話我們稱之為'數據不完整'或'失去了數據的完整性'

2.3網狀模型

圖片3.png

注意:網狀模型解決了數據的不完整性,但是沒有解決導航問題.

2.4關系模型

現在的主流數據庫都是關系型數據庫

特點:每個表都是獨立的,沒有導航結構,表與表之間通過公共的字段建立關系.

注意:公共字段的名字可以不一樣,但是數據類型必須一樣.數據類型一樣的但它不一定是公共字段.兩個字段必須數據類型必須一樣,字段的含義必須一樣

圖片4.png

建表語句

圖片5.png
謹記:關系模型在多表查詢的時候并且數據量很大的時候,它的執行效率很低.
    在項目中,我們通過非關系型數據庫來解決此問題(NoSql),redis.MongoDB.

3.記錄.行.列.字段.屬性.字段的屬性.數據

1.一行我們通常稱為一條記錄
2.一列稱為一個字段,也叫一個屬性 
  就表結構層面而言:表分為行和列
  就數據層面而言:表分為記錄和字段
3.數據冗余:相同的數據儲存在不同的地方
圖片6.png
1.冗余只能減少,不能完全杜絕
2.冗余減少了,表的體積也就減小了,更新的速度加快了,保存了數據的完整性.
3.但是減少了冗余,那么肯定增加了表,多表查詢的效率又降低了,在項目中有的時候寧可讓數據冗余也要保證查詢的效率.(但效率和規范起沖突的,效率要大于規范,保證實用性)

4.數據的完整性

正確性+準確性 = 數據的完整性

分析:學生的年齡字段(age int),儲存到1000,問正確性如何?準確性又如何?
    正確但是不準確

正確性:描述數據類型是否準確

準確性:描述數據的范圍是否合理(準確)

5.windows命令行運行客戶端

(1).啟動MySql

使用CMD開啟客戶端

如果你使用的是原生的mysql5.7,那么先要開啟 命令是:net start(stop) mysql57

如果你是用的是第三方服務性,那么你就按規則操作.

或者進入到mysql的bin目錄下,電機mysqld.exe進行開啟

(2).連接MySql服務器

mysql -hlocalhost -uroot -proot -P3306

localhost 代表本地的IP地址
host 主機 -h
username  用戶名 -u
password  密碼   -p
port   端口號    -P

(3).斷開連接

1.quit
2.exit
3.\q

(4)SQL語句

SQL即結構化查詢語言(Structured Query Language),是一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用于存取數據以及查詢、更新和管理關系數據庫系統;同時也是數據庫腳本文件的擴展名。SQL語句無論是種類還是數量都是繁多的,很多語句也是經常要用到的,SQL查詢語句就是一個典型的例子,無論是高級查詢還是低級查詢,SQL查詢語句的需求是最頻繁的。

關系型數據庫 公司 擴展
access 微軟 SQL
SQL-Server 微軟 T-SQL
Oracle 甲骨文 PL/SQL
MySql 甲骨文 MySql
思考:已知SQL是標準SQL,那么在oracle上編寫的PL/SQL能否在MySql上運行?
答案:不能,能相互運行的只是標準SQL.

(5)數據庫操作

a.創建數據庫
語法:create database [if not exists] `數據庫名` charset=字符的編碼(utf8);
b.創建已經存在的數據庫會報錯
c.指定數據庫的字符編碼
create database `數據庫名` charset=字符的編碼(utf8);
d.創建數據庫,數據庫名要加上反引號(``),你使用關鍵字作為數據庫名可以防止報錯,并創建成功.
e.顯示數據庫

語法:show databases;

f.顯示創建數據庫的語句
語法:show create database `數據庫名`;

(6)修改數據庫

只能修改數據庫的字符編碼

修改數據庫字符集
alter database `數據庫名` charset=字符集選項;

(7)刪除數據庫

drop database [if exists] `數據庫名`;

如果刪除一個不存在的數據庫會報:

1008 - Can't drop database '$%@'; database doesn't exist

加上[if exists]

drop database if exists `數據庫名`;
#可以避免報錯
#作用:判斷指定的數據庫存不存在,存在則刪除.

(8)選擇數據庫

use `數據庫名`;


6.表的操作

(1)創建表

create table [if not exists] `表名`(
    -> id int not null auto_increment  primary key comment'主鍵字段',
    -> username char(64) comment'用戶名' default'root',
    -> password varchar(64) comment'密碼'
    -> )engine=myisam charset=utf8;

注意:最后一局不能加逗號,如果加了,那么表示沒寫完

1.null|not null   字符是否為空
2. default        默認值
3.auto_increment  自動增長
4.primary key     設為主鍵
5.engine   表的存儲引擎(innodb | myisam) 

(2)常用的引擎

innodb,myisam不同的儲存引擎就是儲存數據的格式不一樣.

IO模型,是針對硬盤的 curd insert->create update read->select delete

I 寫 innodb 在寫的時候更加的有優勢 del update insert

o 讀 myisam 讀的時候更加的有優勢 select

(3)給指定的數據庫建表

 create table 數據庫名.表名(
    -> id int,
    -> p char(32)
    -> );

(4)中文亂碼

create table 數據庫名.表名(
    -> id int,
    -> name char(32) default'你好' #default 默認不能使用中文
    -> );
#1067 - Invalid default value for 'name'

#windows默認的是GBK

set names gbk

7.數據庫文件

一個數據庫對應一個文件夾,一個表對應一個文件

(1)myisam引擎

MySQL\data\python->mysql的路徑

比如在python數據庫文件夾下有一個user表

myisam會默認創建三個文件

user.frm  -> 表結構
user.MYD  -> 儲存表數據
user.MYI  -> 儲存表的索引

(2)innodb引擎

user_info 文件是innodb的

user_info.frm  表結構.索引都是在一起的

在MySQL\data

ibdata1 ->它是儲存innodb數據的,如果ibdata1滿了,他會自動創建ibdata2\ibdata3
總結:myisam引擎的表可以任意的移動,innodb不能任意移動.

默認的情況下,innodb的數據都存放在ibdata1文件中,可以在創建表的時候指定innodb和myisam一樣,表和數據不存放在一起(后面提到)

8.表的操作

(1)顯示表

show tables;

+------------------+
| Tables_in_python |
+------------------+
| user             |
| user_info        |
+------------------+
2 rows in set

(2)顯示建表結構

show create table user\G

*************************** 1. row ***************************
       Table: user
Create Table: CREATE TABLE `user` (
  `uid` int(11) NOT NULL AUTO_INCREMENT COMMENT '涓婚敭瀛楁'
  `username` char(64) DEFAULT NULL COMMENT '鐢ㄦ埛鍚?,
  `password` varchar(64) DEFAULT NULL COMMENT '瀵嗙爜',
  PRIMARY KEY (`uid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

(3)刪除表

語法:drop table [if exists] `表1`,`表2`;
mysql> drop table if exists `user`,`user_info`;
Query OK, 0 rows affected
mysql> show tables;
Empty set

(4)查看表結構

desc `表名`;  | describe `user`;

+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| name  | char(16)         | NO   |     | tom     |                |
+-------+------------------+------+-----+---------+----------------+
2 rows in set

(5)更改表

a.修改表名
語法: alter table `old_name` rename `new_name`;
b.增加一個字段
alter table `表名` add `字段名` 數據類型;

alter table user2 add age int(3) first;  #添加在表的第一個

alter table user2 add height int(3) after age; #添加字段在指定字段的后面
c.修改字段屬性
alter table `表名` modify `屬性名(字段名)` 數據類型;
d.修改字段名
alter table `表名` change `原字段名` `新的字段名` varchar(10) ;
e.修改字段的位置
alter table user2 change `字段名` `改為新的字段名` char(16) after '字段名';
f.修改表的引擎
alter table `表名` engine=innodb|myisam;
g.移動表到指定數據庫并改名為指定名稱
alter table `原表名` rename to java.user;

(6)復制表

create table `新表` select * from `原來的表`;

特點:
1.舊表的數據會一起復制過來到新表中
2.不能復制主鍵
create table `新表` like `原來的表`;

特點:
1.它可以復制主鍵
2.但是不會復制數據

(7)數據操作

a.插入數據
1.insert into user(`id`,`age`,`sex`) values('',18,'tom');
#值的個數要和字段數一致
2.insert into user(`age`,`sex`) values(20,'jack');
#id為自動增長字段,可以不寫
3.insert into user values(null,25,'lily');
#不寫字段l,40,'wj'),(null,50,'ybq');
#一次插入多條
5.insert into user set age=60,sex='hx';名,要一一對應字段個數
4.insert into user values(null,30,'lyb'),(nul
#一次只能插入一條數據   insert into 表名 set 字段='',字段='';

#面試題
如何優化insert插入語句(一次性插入1萬跳,一次性插入100萬條)

答:將insert語句進行字符串拼接,拼接vaules.
    
#why?
insert每寫一次都需要被機器做語法解析,語法設別,字段對應,它需要耗費時間.

查詢:select * from 表明;

md5()在mysql中可以直接加密,在python中hashlib.md5().

md5 是單向加密

md5在項目中怎么加密.

md5(123456) --->e10adc3949ba59abbe56e057f20f883e

md5(e10adc3949ba59abbe56e057f20f883e+base64(admin))
b.修改數據
update user set sex='pgone' where id=8;
#update 表名 set 字段名='值',字段名=123 where 字段(一般使用主鍵)=值;
update user set sex='賈乃亮',age=40 where id=5;
#修改多個字段
c.刪除數據
delete from user where id=8;
#delete from 表名 where 字段(一般為主鍵)=值
#一條一條的刪
delete from user where True;
#刪除全部
#它也是一條一條的刪
truncate user;
#記錄你原來建表語句,然后刪除整個表,在創建,數據全部被清空

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,345評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,494評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,283評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,953評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,714評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,410評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,940評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,776評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,210評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,654評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容