安裝MySQL
時系統自動建立的數據庫,其各自功能以下:html
information_schemm
:主要存儲了系統中的一些數庫對象信息,好比用戶表信息列信息。權限信息,字符集信息、分區信息等cluster
存儲了系統的集羣信息mysql
存儲了系統的用戶權限信息test
系統自動建立的測試數搖庫,任何用戶均可以使用DDL
( Data Definition Langnages)語句:數據定義語言,這些語句定義了不一樣的數據段、數據庫,表、列、索引等數據庫對象。經常使用的語句關鍵字主要包括 create、drop、alter
等DML
( Data Manipulation Language)語句:數據操縱語句,用於添加,刪除,更新和查詢數據庫記錄,並檢查數據完整性。經常使用的語句關鍵字主要包括insert、delete、update和 select
等DCL
( Data Control Languane)語句:數據控制語句,這些語句定義了數據庫、表、字段、用戶的訪問權限和安全級別。主要的語句關鍵字包括grant、revoke
等mysql -uroot -p
create database dbname; use dbname; //選擇數據庫 show tables; //查看數據庫中建立的全部表 drop database dbname;
CREATE TABLE `user`( `id` tinyint(1) unsigned NOT NULL auto_increment comment '主鍵', `name` VARCHAR(20) NOT NULL DEFAULT '', `image` VARCHAR(20) NOT NULL DEFAULT '', `type` tinyint(1) unsigned NOT NULL DEFAULT 0, `create_time` int(10) unsigned NOT NULL DEFAULT 0, `update_time` int(10) unsigned NOT NULL DEFAULT 0, PRIMARY KEY (`id`) )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT charset=utf8 comment '用戶信息表';
desc table_name;//查看錶定義 show full columns from user;//查詢一張表的詳細信息(包括字段註釋,字段名稱,類型等) drop table table_name;//刪除表
alter table table_name modify col_definition; // 修改表類型 alter table table_name change old_col_name col_definition; // 字段更名 alter table table_name add col_definition; // 增長表字段 alter table table_name add/modify/change ... [first|after col_name];//修改字段排列順序 alter table table_name drop col_name; //刪除表字段 alter table table_name rename new_table_name; //更改表名
insert into table_name(field1,field2,...,fieldn) values(value1,value2,...,valuen)[,(value1,value2,...,valuen)]; // (批量)插入記錄 insert into table_name set col1_name=value1,...; update table_name set field1=value1,field2=value2....[where condition]; // 更新記錄 delete from table_name [where condition]; // 刪除記錄 select ... [limit offset_start,row_count]; //offset_start:起始偏移量(默認爲0),row_count:顯示的行數。分頁顯示:limit + order by
聚合函數:mysql
select [field1,field2...] fun_name from table_name [where where_condition] [group by field1,...] [with rollup] [having where_condition]
fun_name
表示要作的聚合操做,經常使用的有sum
(求和)、count(*)
(記錄數)、max
(field)、min
(field)group by
關鍵字表示要進行分類聚合的字段with rollup
是可選語法,代表是否對分類聚合後的結果再彙總having
關鍵字表示對分類後的結果再進行條件的過濾 注意:having
是對聚合後的結果進行條件過濾,where
是在聚合前就對記錄進行過濾sql
MySQL5.0
以後,提供了一個新的數據庫information_schema
,用來記錄MySQL中的元數據
信息。元數據指的是好比表名、列名、列類型、索引名等表的各類屬性名稱。它是一個虛擬數據庫,庫裏show tables
顯示的各類‘表’也不是實際存在的物理表,而所有是視圖。
下面列出一些比較經常使用的視圖:segmentfault
show databases
的結果取之此表show tables from schemaname
的結果取之此表show columns from schemaname.tablename
的結果取之此表show index from schemaname.tablename
的結果取之此表場景示例:安全
tmp
的表select concat('drop table 數據庫名.', table_name,';') from information_schema.tables where table_schema='數據庫名' and table_name like 'tmp%';
myisam
的表改成innodb
select concat('alter table 數據庫名.', table_name, ' engine=innodb;') from information_schema.tables where table_schema='數據庫名' and engine='MyISAM';
select concat('truncate table ',table_name,';') from information_schema.tables where table_schema='數據庫名';
數值數據類型能夠大體劃分爲兩個類別,一個是整數,另外一個是小數
函數
MySQL容許咱們指定數值字段中的值是否有正負之分(unsigned
)或者用零填補(zerofill
)和auto_increment
屬性。性能
MySQL 以一個可選的顯示寬度指示器
的形式對 SQL 標準進行擴展(如 INT(6),6便是其寬度指示器,該寬度指示器並不會影響int列存儲字段的大小
,也就是說,超過6位它不會自動截取,依然會存儲,只有超過它自己的存儲範圍纔會截取;此處寬度指示器的做用在於該字段是否有zerofill
,若是有未滿6位的部分就會用0
來填充)。
Tips:若是一個列指定爲zerofill
,則MySQL自動爲該列添加unsigned
屬性。測試
auto_increment
屬性:優化
auto_increment
列not null
,而且定義爲primary key
或unique
鍵小數類型能夠大體劃分爲兩個類別,一個是浮點數,另外一個是定點數
字符串
形式存放,比浮點數更精確,適合表示貨幣等高精度的數據 float/double/decimal(M,D)
:M
標度(整數位+小數位),D
精度
Tips:小數會自動四捨五入
TIMESTAMP
的一個重要特色就是和時區相關,通常業務也能夠用int
比較好,節約空間,存時間戳便可。
一個英文字符,佔用一個字節
漢字:
字符類型若爲gbk
,每一個字符最多佔2
個字節;
字符類型若爲utf8
,每一個字符最多佔3
個字節。
CHAR 類型用於定長字符串
,而且必須在圓括號內用一個大小修飾符來定義。這個大小修飾符的範圍從 0-255。比指定長度大的值將被截短,而比指定長度小的值將會用空格做填補。
CHAR 類型的一個變體是 VARCHAR 類型。它是一種可變長度
的字符串類型,而且也必須帶有一個範圍指示器。
CHAR 和 VARCHGAR 不一樣之處在於 MYSQL 數據庫處理這個指示器的方式:CHAR 把這個大小視爲值的大小,不長度不足的狀況下就用空格補足。而 VARCHAR 類型把它視爲最大值而且只使用存儲字符串實際須要的長度(增長一個額外字節來存儲字符串自己的長度)來存儲值。因此短於指示器長度的 VARCHAR 類型不會被空格填補,但長於指示器的值仍然會被截短。
select database()/version()/user(); // 查看當前數據庫/版本/用戶