標籤:表名 def 表數 relay vcc 韓國 複製 delete utf-8
drop,delete與truncate的區別:
優先順序: drop > truncate > delete
TRUNCATE 按行刪除並不把刪除操作記錄記入日誌儲存(不可恢複)
DELETE 全部刪除表內資料並可將刪除操作記錄在日誌中,可以加where字句,可應用於table和view
DROP 刪除整個表(結構和資料)再插入時自增長id又從1開始
複製基本原理流程
主:binlog線程——記錄下所有改變了資料庫資料的語句,放進master上的binlog中;
從:io線程——在使用start slave 之後,負責從master上拉取 binlog 內容,放進 自己的relay log中;
從:sql執行線程——執行relay log中的語句;
myisam與innodb的區別
1.InnoDB支援事物,而MyISAM不支援事物
2.InnoDB支援行級鎖,而MyISAM支援表級鎖
3.InnoDB支援MVCC, 而MyISAM不支援
4.InnoDB支援外鍵,而MyISAM不支援
5.InnoDB不支援全文索引,而MyISAM支援
myisam與innodb在select count(*)哪個更快,為什嗎?
myisam更快,因為myisam內部有一個計數器,可以直接調取
varchar與char的區別:
char是長度固定的,而varchar的長度是可以變化的
比如說儲存字串"abc":
char(10)表示儲存的字元將佔10個位元組(包括7個Null 字元),大於10個位元組時和varchar沒區別則都將截掉超出部分
varchar(10)表示只佔用3個位元組的長度,當儲存的字元小於或小於10時,都按實際長度儲存
innodb有redo和undo兩種日誌...
MySQL binlog幾種日誌的區別
Statement:每一條會修改資料的sql都會記錄在binlog中
Row:不記錄sql語句上下文相關資訊,僅儲存哪條記錄被修改
Mixedlevel: 是以上兩種level的混合使用
在一條 SQL 操作了多行資料時, statement 更節省空間的, row 更佔用空間。但是 row模式更可靠
當 cpu 飆升到 500%時,先用 top 命令觀察是不是 mysqld 佔用導致的,如果不是,找出佔用高的進程
如果是 mysqld 造成的看session情況,定位是不是有消耗資源的 sql 在運行找出消耗高的 sql並kill掉然後限制串連數或作出其他調整
mysqldump和xtranbackup的區別:
一般來說 100G 內的庫,可以考慮使用 mysqldump。輕巧靈活備份出來的檔案比較小,壓縮之後更小
100G 以上的庫,可以考慮用 xtranbackup。比 mysqldump 要快
表:
約束
自增長:auto_increment
非空:not null
預設值:default ‘xx‘
唯一:unique
指定字元集:charset //例:charset utf-8
主鍵:primary key
增:
create table students(
id int(15) auto_increment,
name varchar(10) not null,
sex varchar(3) default ‘‘,
age char(2),
address varchar(50),
phone char(11) not null unique,
primary key(id));
mysql> desc students;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| id | int(15) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| sex | varchar(3) | YES | | | |
| age | char(2) | YES | | NULL | |
| address | varchar(50) | YES | | NULL | |
| phone | int(11) | NO | UNI | NULL | |
+---------+-------------+------+-----+---------+----------------+
mysql> insert into students (name,sex,age,address,phone) values(‘zhangsan‘,‘男‘,26,‘廣東省珠海市香洲區‘,13356789124);
mysql> insert into students (name,sex,age,address,phone) values(‘金正南‘,‘女‘,54,‘廣東省珠海市拱北區‘,15844551634);
mysql> insert into students values(‘‘,‘金三胖‘,‘男‘,58,‘朝鮮‘,14444444444);
mysql> insert into students values(‘‘,‘小泉純一郎‘,‘男‘,78,‘日本‘,14445554444);
mysql> insert into students values(‘‘,‘樸槿惠‘,‘女‘,60,‘韓國‘,14445554774);
mysql> select * from students;
+----+------------+------+------+-----------------------------+-------------+
| id | name | sex | age | address | phone |
+----+------------+------+------+-----------------------------+-------------+
| 1 | zhangsan | 男 | 26 | 廣東省珠海市香洲區 | 13356789124 |
| 2 | 金正南 | 女 | 54 | 廣東省珠海市拱北區 | 15844551634 |
| 3 | 金三胖 | 男 | 58 | 朝鮮 | 14444444444 |
| 4 | 小泉純? 男 | 78 | 日本 | 14445554444 |
| 5 | 樸槿惠 | 女 | 60 | 韓國 | 14445554774 |
+----+------------+------+------+-----------------------------+-------------+
insert into student (name,money,sex,phone) values (‘hk‘,10000,‘男‘,188);
insert into student values(‘‘,‘小明‘,100,‘‘,120);
刪:
drop table tablename; #刪除整張表,操作會被記錄
truncate tablename; #刪除整表資料,自增長id從頭再來,快速,從磁碟直接刪除,不可恢複
delete from student #刪除整個表的資料,自增長繼續
查:
SELECT * from students limit 5; #查詢前5條
SELECT id,name,sex,money,phone from students; #指定查詢的欄位
SELECT * from students where sex=‘男‘ and money>100; #多個條件,必須同時滿足
SELECT * from students where sex=‘男‘ or sex=‘未知‘ ; #多個條件,有一個滿足即可
SELECT * from students where sex !=‘男‘; # <>也是不等於
SELECT * FROM students where addr like ‘%東京%‘; #模糊比對,%代表的是萬用字元,必須得用like
SELECT * from students a where stu_name like ‘姚_‘; #_萬用字元表示任意一個單字元,姚字後面只能跟一個字
SELECT * from students ORDER BY money desc; #order by xxx desc,根據哪個欄位排序,預設是升序,降序是desc,升序asc
select * from table order by id desc,name desc; #多個欄位排序
改:
alter table oldtable rename newtable; #改表名
alter table tablename modify name varchar(20); #改表結構
alter table tablename change name newname varchar(20); #改表結構
alter table tablename add age float after name; #在name後面新增age欄位
update student set money=100; #不指定條件,修改所有
update student set money=110 where name=‘hk‘; #只改hk
備份庫:
mysqldump -u root -p mysql > ~/mysql.sql
還原庫:
mysql -u root -p web < ~/web.sql
備份表:
mysqldump -u root -p 資料庫名 表名 > xxx.sql
恢複表:
mysqldump -uroot -p 資料庫名 < xxx.sql
mysql簡單面試題