数据库-表操作
Mysql的存儲引擎
?
#存儲引擎是什么? Mysql中的數(shù)據(jù)用各種不同的技術(shù)存儲在文件(或者內(nèi)存中),這些技術(shù)中的每一種技術(shù) 都使用不同的存儲機(jī)制,索引技巧,鎖定水平并憑最終提供廣泛的不同的功能和能力。通過 選擇不同的技術(shù),能夠獲得額外的速度或者功能,從而改善你的應(yīng)用的整體功能。 這些不同的技術(shù)以及配套的相關(guān)功能在mysql中被稱作存儲引擎(亦稱作表類型)#mysql5.6版本下的搜索引擎:Innodb:支持事物/行級鎖/外鍵myisam:表級鎖memory:內(nèi)存存儲引擎,讀取速度快,但是不能持久化存儲,重啟mysql會失效blackhole:所有的數(shù)據(jù)都可以寫入,但不會真的記錄在表中,
主從復(fù)制中的數(shù)據(jù)傳輸事物是什么?把執(zhí)行n句sql語句看成一個完整的事件,要么一起成功,要么失敗行級鎖:能夠支持并發(fā)的修改數(shù)據(jù)的操作,但是修改的行數(shù)非常多時,效率會受到影響表級鎖:不支持并發(fā)的修改同一張表,但是不需要加很多的細(xì)粒鎖來浪費(fèi)時間外鍵:在本表中有一個字段關(guān)聯(lián)外表的另一個表的字段緩存的作用:存儲一些對效率要求比較快的 但是丟失不要緊的數(shù)據(jù)。
Innodb:用于事物處理程序,支持外鍵和行級鎖。
數(shù)據(jù)操作除了插入和查詢之外,還包括很多更新和刪除操作。
Myisam:用于讀操作和插入操作為主,含有很少的更新和刪除操作,對于事物的完整性,并發(fā)行要求不高。
Memory:將所有的數(shù)據(jù)保存在內(nèi)存中,能夠快速的定位記錄和其他類似數(shù)據(jù)的環(huán)境下,提供極快的訪問。
? #查看當(dāng)前Mysql的默認(rèn)存儲引擎 show variables like 'default_storage_engine';#查看當(dāng)前Mysql支持的存儲引擎 show engines \G;存儲引擎相關(guān)sql語句
?
創(chuàng)建表
#創(chuàng)建表 create table 表名(字段1 數(shù)據(jù)類型 約束條件,字段2 數(shù)據(jù)類型 約束條件,字段3 數(shù)據(jù)類型 約束條件 );
?
mysql支持的數(shù)據(jù)類型
?
Mysql支持的數(shù)據(jù)類型: 數(shù)值類型:整型:int#后面制定字符長度沒什么用,寫的是多長顯示的還是多長,#如果超過最大長度,則存2 147 483 647 浮點(diǎn)型:float(m,n)#表示該小數(shù)一共只能存m位數(shù),小數(shù)點(diǎn)后n位小數(shù)#插入數(shù)據(jù)時注意數(shù)據(jù)不準(zhǔn)且 doubledecimal(65,30)#稍微準(zhǔn)點(diǎn),因位存取的是字符串 日期類型:now()#表示當(dāng)前時間 date:日期time:時間datetime:日期時間,可以為Nulltimestamp:#1970-01-01 00:00:00/2038-01-19 11:14:07,不為null,默認(rèn)插入null顯示當(dāng)前時間#超出時間一律顯示000000000000 字符串類型:char:#定長(0-255)存儲相對浪費(fèi)空間,存取效率線相對快varchr:#變長(0-65535)相對節(jié)省空間,存取效率相對慢#char 不足設(shè)置的字符長度在'a'后面補(bǔ)0'a0000'#varchar不足在字符前面設(shè)置一個字符的長度 ENUM和SET類型:ENUM:#單選SET:#多選+去重
?
msyql表的完整性約束
mysql表的完整性約束not null:#非空約束#create table t10 (id1 int not null,id2 int not null default 10);#創(chuàng)建一個id1 非空, id2非空 默認(rèn)值為10的表 #mysql> insert into t10 (id1) values(11),(12);#使用某個字段記得帶括號 unique:#唯一約束#對于NUll不生效,仍然可以重復(fù)插入NULL#not null + unique==》主鍵#如果一個表多個字段設(shè)置了not null unique,那么只有第一個字段設(shè)置成了PRI,其他的都是UNI#聯(lián)合唯一:就是一個表不能重復(fù)1,1create table t14 (id int not null,name char(12) not null,ip char(15) not null,port char(4) not null, unique(ip,port));mysql> desc t14;+-------+----------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+----------+------+-----+---------+-------+| id | int(11) | NO | | NULL | || name | char(12) | NO | | NULL | || ip | char(15) | NO | PRI | NULL | || port | char(4) | NO | PRI | NULL | |+-------+----------+------+-----+---------+-------+ 設(shè)置了一組主鍵。primary key:#主鍵#主鍵:必須唯一,必須非空 單字段:多字段:#auto_increment 必須是一個鍵#delete時在insert是從保存的值開始增加#必須用truncate清除foreign key:#外鍵兩個不同的事物存在關(guān)聯(lián),外鍵把這兩個事物關(guān)聯(lián)起來
外鍵關(guān)聯(lián)的字段必須是唯一的
主表對應(yīng)多個外鍵
create table author2book( id int not null unique auto_increment, author_id int not null, book_id int not null, constraint fk_author foreign key(author_id) references author(id) on delete cascade on update cascade, constraint fk_book foreign key(book_id) references book(id) on delete cascade on update cascade, primary key(author_id,book_id) );
?
表結(jié)構(gòu)的修改
?
1. 修改表名ALTER TABLE 表名 RENAME 新表名;2. 增加字段ALTER TABLE 表名ADD 字段名 數(shù)據(jù)類型 [完整性約束條件…],ADD 字段名 數(shù)據(jù)類型 [完整性約束條件…];3. 刪除字段ALTER TABLE 表名 DROP 字段名;4. 修改字段ALTER TABLE 表名 MODIFY 字段名 數(shù)據(jù)類型 [完整性約束條件…];ALTER TABLE 表名 CHANGE 舊字段名 新字段名 舊數(shù)據(jù)類型 [完整性約束條件…];ALTER TABLE 表名 CHANGE 舊字段名 新字段名 新數(shù)據(jù)類型 [完整性約束條件…];5.修改字段排列順序/在增加的時候指定字段位置ALTER TABLE 表名ADD 字段名 數(shù)據(jù)類型 [完整性約束條件…] FIRST;ALTER TABLE 表名ADD 字段名 數(shù)據(jù)類型 [完整性約束條件…] AFTER 字段名;ALTER TABLE 表名CHANGE 字段名 舊字段名 新字段名 新數(shù)據(jù)類型 [完整性約束條件…] FIRST;ALTER TABLE 表名MODIFY 字段名 數(shù)據(jù)類型 [完整性約束條件…] AFTER 字段名;
?
?刪除表
drop table 表名;
?
多表結(jié)構(gòu)的創(chuàng)建與分析
#一對一#一對多#多對多
?
轉(zhuǎn)載于:https://www.cnblogs.com/liuer-mihou/p/10483380.html
總結(jié)
- 上一篇: 四季图是谁画的呢?
- 下一篇: iOS面试题整理---关键字!!!