注:<基礎概念,再也不贅述,點開連接查看>html
information_schema: 虛擬庫,不佔用磁盤空間,存儲的是數據庫啓動後的一些參數,如用戶表信息、列信息、權限信息、字符信息等。mysql
performance_schema: MySQL 5.5開始新增一個數據庫:主要用於收集數據庫服務器性能參數,記錄處理查詢請求時發生的各類事件、鎖等現象 。sql
mysql: 受權庫,主要存儲系統用戶的權限信息。數據庫
test: MySQL數據庫系統自動建立的測試數據庫,值得注意的是Mysql5.7及之後移除了test庫以及刪除了空密碼用戶等安全措施。安全
1 語法(help create database)服務器
CREATE DATABASE 數據庫名 charset utf8;
2 數據庫命名規則:框架
能夠由字母、數字、下劃線、@、#、$
區分大小寫
惟一性
不能使用關鍵字如 create select 不能單獨使用數字
最長128位
查看數據庫 show databases; show create database db1; select database(); 選擇數據庫 USE 數據庫名 刪除數據庫 DROP DATABASE 數據庫名; 修改數據庫 alter database db1 charset utf8;
注:<基礎概念,再也不贅述,請點擊 >ide
表至關於文件,表中的一條記錄就至關於文件的一行內容,不一樣的是,表中的一條記錄有對應的標題,稱爲表的字段。函數
create table tbName ( 列名稱1 列類型 [列參數] [not null default ], ....列名稱2... .... 列名稱N 列類型 [列參數] [not null default ] )engine myisam/innodb charset utf8/gbk
例子: create table user ( id int auto_increment, name varchar(20) not null default '', age tinyint unsigned not null default 0, index id (id) )engine=innodb charset=utf8; 注:innodb是表引擎,也能夠是myisam或其餘,但最經常使用的是myisam和innodb, charset 經常使用的有utf8,gbk;
MariaDB [db1]> insert into t1 values -> (1,'egon',18,'male'), -> (2,'alex',81,'female') -> ; MariaDB [db1]> select * from t1; +------+------+------+--------+ | id | name | age | sex | +------+------+------+--------+ | 1 | egon | 18 | male | | 2 | alex | 81 | female | +------+------+------+--------+ MariaDB [db1]> insert into t1(id) values -> (3), -> (4); MariaDB [db1]> select * from t1; +------+------+------+--------+ | id | name | age | sex | +------+------+------+--------+ | 1 | egon | 18 | male | | 2 | alex | 81 | female | | 3 | NULL | NULL | NULL | | 4 | NULL | NULL | NULL | +------+------+------+--------+
desc 表名 #查看錶結構性能
show create table 表名\G; #查看建立表的語句
MariaDB [db1]> describe t1; #查看錶結構,可簡寫爲desc 表名 +-------+-----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(50) | YES | | NULL | | | sex | enum('male','female') | YES | | NULL | | | age | int(3) | YES | | NULL | | +-------+-----------------------+------+-----+---------+-------+ MariaDB [db1]> show create table t1\G; #查看錶詳細結構,可加\G
注:<基礎概念,再也不贅述,點開連接查看>
注:<基礎操做,再也不贅述,點開連接查看>
語法: 1. 修改表名 ALTER TABLE 表名 RENAME 新表名; 2. 增長字段 ALTER TABLE 表名 ADD 字段名 數據類型 [完整性約束條件…], ADD 字段名 數據類型 [完整性約束條件…]; ALTER TABLE 表名 ADD 字段名 數據類型 [完整性約束條件…] FIRST; ALTER TABLE 表名 ADD 字段名 數據類型 [完整性約束條件…] AFTER 字段名; 3. 刪除字段 ALTER TABLE 表名 DROP 字段名; 4. 修改字段 ALTER TABLE 表名 MODIFY 字段名 數據類型 [完整性約束條件…]; ALTER TABLE 表名 CHANGE 舊字段名 新字段名 舊數據類型 [完整性約束條件…]; ALTER TABLE 表名 CHANGE 舊字段名 新字段名 新數據類型 [完整性約束條件…];
示例: 1. 修改存儲引擎 mysql> alter table service -> engine=innodb; 2. 添加字段 mysql> alter table student10 -> add name varchar(20) not null, -> add age int(3) not null default 22; mysql> alter table student10 -> add stu_num varchar(10) not null after name; //添加name字段以後 mysql> alter table student10 -> add sex enum('male','female') default 'male' first; //添加到最前面 3. 刪除字段 mysql> alter table student10 -> drop sex; mysql> alter table service -> drop mac; 4. 修改字段類型modify mysql> alter table student10 -> modify age int(3); mysql> alter table student10 -> modify id int(11) not null primary key auto_increment; //修改成主鍵 5. 增長約束(針對已有的主鍵增長auto_increment) mysql> alter table student10 modify id int(11) not null primary key auto_increment; ERROR 1068 (42000): Multiple primary key defined mysql> alter table student10 modify id int(11) not null auto_increment; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 6. 對已經存在的表增長複合主鍵 mysql> alter table service2 -> add primary key(host_ip,port); 7. 增長主鍵 mysql> alter table student1 -> modify name varchar(10) not null primary key; 8. 增長主鍵和自動增加 mysql> alter table student1 -> modify id int not null primary key auto_increment; 9. 刪除主鍵 a. 刪除自增約束 mysql> alter table student10 modify id int(11) not null; b. 刪除主鍵 mysql> alter table student10 -> drop primary key;
複製表結構+記錄 (key不會複製: 主鍵、外鍵和索引) mysql> create table new_service select * from service; 只複製表結構 mysql> select * from service where 1=2; //條件爲假,查不到任何記錄 Empty set (0.00 sec) mysql> create table new1_service select * from service where 1=2; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> create table t4 like employees;
刪除表有三種方法:drop,delete,和truncate DROP TABLE 表名; 1. delete是一種DML,它會放到rollback segment,事務提交以後才生效。若是有對應的觸發器,那麼執行時還會觸發trigger。 truncate,drop是DDL,操做當即生效,也就意味着不能回滾。 2. truncate和delete不刪除表的結構,drop將刪除表的結構被依賴的約束,觸發器,索引;依賴於表的存儲過程/函數將被保留,可是變爲invalid狀態。 3. delete語句不影響表所佔用的extent,high watermark不動。drop語句將最大限度釋放該表所佔的空間。truncate語句缺省狀況下將空間釋放到最小個extent,除非使用reuse storage,那種狀況下下truncate將空間恢復到最大個extent。 4. 速度上,drop>truncate>delete 5. 安全性,drop和druncate都不能回滾,所以慎用。 6. 使用上,想刪部分數據行,用帶where子句的delete命令。想刪除表,用drop。想保留表而將全部數據刪除,而且和事
注:<基礎操做,再也不贅述,點開連接查看>
<重點查看單表,多表的select查詢及權限管理>
注:<基礎必備,篇幅過多,請點開連接查看>
<重點查看pymsql模塊使用方式>
注:<sql進階必備,篇幅過多,請點開連接查看>
注:<ORM框架,請點開連接查看>
注<優化Mysql必備,篇幅過多,請點開連接查看>