MySQL基本命令
Mysql筆記
一.數據庫基本操作
1.mysql -h localhost -u root -p
2.每次輸入以;號結束,中途若有錯誤輸入\c撤銷本次輸入,開始新的輸入。
3.auto_increment 默認從1開始自增。
4.查看全部數據庫。
show databases;
5.使用某個數據庫。
use dbname;
6.查看當前數據庫說有表。
SHOW TABLES;
二.數據表的基本操作
1.使用主鍵約束
(1).單字段主鍵
①.在定義列的同時指定主鍵。
create table tb_emp
(
id int(11) primary key,
name varchar(25),
deptId int(11),
salary float
);
②.在定義完所有列之後指定主鍵。
create table tb_emp
(
id int(11),
name varchar(25),
deptId int(11),
salary float,
primary key(id)
);
(2).多字段聯合主鍵(主鍵由多個字段聯合組成)
create table tb_emp
(
id int(11),
name varchar(25),
deptId int(11),
salary float,
primary key(id,deptId)
);
2.使用外鍵約束
[CONSTRAINT<外鍵名>] FOREIGN KEY 字段名1 [,字段名2,...]
REFERENCES <主表名>主鍵列[,主鍵列2,]
“外鍵名”為定義的外鍵約束的名稱,一個表中不能有相同名稱的外鍵,”字段名”表示字表需要添加外鍵約束的字段列;”主表名”即被字表外鍵所依賴的表的名稱;“主鍵列”表示主表中定義的主鍵列,或者列組合。
3.使用非空約束
非空約束指字段的值不能為空。
4.使用唯一性約束
唯一性約束要求該列唯一,允許為空,但只能出現一個空值,唯一性約束可以確保一列或者幾列不出現重復值。
(1).在定義完列之後直接指定唯一約束。
create table tb_dept
(
id int(11) primary key,
name varchar(22) unique,
location varchar(50)
);
(2).在定義完所有列之後指定唯一約束.
語法規則: [CONSTRAINT <約束名>] UNIQUE (<字段名>)
create table tb_dept
(
id int(11) primary key,
name varchar(22),
location varchar(50),
CONSTRAINT STH UNIQUE(name)
);
UNIQUE和PRIMARY KEY的區別:一個表中可以有多個字段聲明為UNIQUE,但只能有一個PRIMARY KEY聲明,聲明為PRIMARY KEY的列不允許有空值,但是聲明為UNIQUE的字段允許有空值(NULL)存在。
5.使用默認約束
默認約束指定某列的默認值。如男性同學較多,性別就可以默認為男。如果插入一條新的紀錄時沒有為這個字段賦值,那麽系統就會自動為這個字段賦值為男。
語法規則: 字段名 數據類型 DEFAULT 默認值
例:
CREATE TABLE tb_emp
(
id int(11) primary key,
name varchar(25) not null,
deptId int(11) default 1111,
salary float
);
6.設置表的屬性值自動增加
Mysql中,AUTO_INCREMENT 的初始值為1,每新增一條記錄,字段值自動加1.
語法規則:字段名 數據類型 AUTO_INCREMENT
CREATE TABLE tb_emp
(
id int(11) primary key auto_increment,
name varchar(25) not null,
deptId int(11),
salary float
);
7.查看數據表結構
查看表基本結構語句DESCRIBE/DESC
語法規則: DESCRIBE 表名
或簡寫為: DESC 表名
8.查看表詳細結構語句 SHOE CREATE TABLE
語法格式:
SHOW CREATE TABLE 表名\G
如果不加’\G’參數,顯示的結果可能非常混亂,加上參數’\G’之後,可使顯示結果更加直觀,易於查看。
9.修改數據表
修改表指的是修改數據庫中已經存在的數據表的結構。
①.修改表名
alter table 舊表名 rename 新表名;
在此之前,可通過SHOW TABLES;查看當前數據庫中所有存在的表。
②.修改字段的數據類型
語法規則:
alter table 表名 modify 字段名 數據類型;
在此之前,可通過desc 表名;查看表結構。
例:alter table tb_dept1 modify name varchar(30);
10.修改字段名
語法規則:
alter table 表名 change 舊字段名 新字段名 新數據類型;
例子: alter table tb_dept1 change location loc varchar(50);
change也可以只修改數據類型,實現和modify同樣的效果,方法是將SQL語句中的新字段名和舊字段名設置為相同的名稱,只改變數據類型。
11.添加字段
alter table 表名 add 新字段名 數據類型;
12.刪除字段
alter table 表名 drop 字段名;
13.修改字段的排列位置
alter table 表名 modify 字段1 數據類型 first|after 字段2;
①.修改字段為表的第一個字段
alter table tb_dept1 modify column1 varchar(20) first;
②.修改字段到表的指定列之後
alter table tb_dept1 modify column1 varchar(12) after location;
14.更改表的存儲引擎
語法規則:
alter table 表名 engine=更改後的存儲引擎名;
通過SHOW ENGINES;查看支持的引擎名。
15.刪除表的外鍵約束
alter table 表名 drop foreign key外鍵約束名;
16.刪除數據表
①.刪除沒有被關聯的表
drop table [if exists] 表1,表2...;
例子:drop table if exists tb_dept;
②.刪除被其他表關聯的主表
三.數據類型和運算符
1.整數類型
create table tb_emp1
(
id int(11),
name varchar(25),
deptId int(11),
salary float
);
id字段的數據類型為INT(11),註意到後面的數字11,這表示的是該數據類型指定的顯示寬度,指定能夠顯示的數值中數字的個數。顯示寬度和數據類型的取值範圍是無關的。顯示寬度只是指明Mysql最大可能顯示的數字個數,數值的位數小於指定的寬度時會由空格填充;如果插入了大於顯示寬度的值,只要該值不超過該類型整數的取值範圍,數值依然可以插入,而且能夠顯示出來。
2.浮點數類型和定點數類型
Mysql中使用浮點數和定點數來表示小數。浮點類型有兩種:單精度浮點類型(float)和雙精度浮點類型(double)。定點類型只有一種:DECIMAL.浮點類型和定點類型都可以用(M,N)來表示,其中M稱為精度,表示總共的位數;N稱為標度,表示小數的位數。
3.日期和時間類型
YEAR
TIME
DATETIME
TIMESTAMP
4.文本字符串類型
char(M)
VARCHAR(M)
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
ENUM
SET
①.char和varchar類型
char(M)為固定長度字符串,在定義時指定字符串列長。當保存時右側填充空格以達到指定的寬度。M表示列長度,M的範圍是0~255個字符。例如,char(4)定義了一個固定長度的字符串列,其包含的字符個數最大為4,當檢索到CHAR值時,尾部的空格將被刪除掉。
varchar(M)表示長度可變的字符串,M表示最大列長度。M的範圍是0~65535.varchar的最大實際長度由最長的行的大小和使用的字符集確定,而其實際占用的空間為字符串的實際長度加1.例如,varchar(50)定義了一個最大長度為50的字符串,如果插入的字符串只有10個字符,則實際存儲的字符串為10個字符和一個字符串結束字符。varchar在值保存和檢索時尾部的空格仍保留。
②.TEXT類型
TEXT列保存非二進制字符串,如文章內容,評論等。當保存或查詢TEXT列的值時,不刪除尾部空格。Text類型分為4種:TINYTEXT,TEXT,MEDIUMTEXT,和
LONGTEXT.不同的TEXT類型的存儲空間和數據長度不同。
③.ENUM類型
④.SET類型
⑤.二進制字符串類型
Mysql中的二進制有:
BIT,BINARY,VARBINARY,TINYNLOB,BLOB,MEDIUMBLOB和LONGBLOB.
2.數據類型的選擇
①.整數和浮點數
對於浮點數據列,存入的數值會對該列定義的小數位進行四舍五入。例如,如果列的值的範圍為1~99999,若使用整數,則MEDIUMINT UNSIGNED是最好的類型;若需要存儲小數,則使用float類型。
浮點類型包括FLOAT和DOUBLE類型。DOUBLE類型精度比FLOAT類型高,因此,如果要求存儲精度高時,應選擇DOUBLE類型。
②.浮點數和定點數
浮點數FLOAT,DOUBLE相對於定點數DECIMAL的優勢是:在長度一定的情況下,浮點數能表示更大的數據範圍,但是由於浮點數容易產生誤差,因此對精確度要求較高時,建議使用DECIMAL來存儲。DECIMAL在Mysql中是以字符串存儲的,用於定義貨幣等對精確度要求較高的數據。
③.日期與時間類型
如果只需要記錄時間,只需要TIME類型即可。
如果只需要記錄年份,則使用YEAR類型即可。
如果需要同時記錄日期和時間,則可以使用DATETIME和TIMESTAMP類型。由於TIMESTAMP列的取值範圍小於DATETIME的取值範圍,因此存儲範圍較大的日期最好使用DATETIME.
TIMESTAMP也有一個DATETIME不具備的屬性。默認的情況下,當插入一條記錄但並沒有指定TIMESTAMP這個列值時,Mysql會把TIMESTAMP列設為當前時間。因此當需要插入記錄同時插入當前時間時,TIMESTAMP是方便的,另外TIMESTAMP在空間上比DATETIME更有效。
④.CHAR和VARCHAR之間的特點與選擇
CHAR是固定長度,VARCHAR是可變長度字符;
CHAR會自動刪除插入數據的尾部空格,VARCHAR不會刪除尾部空格。
對於InnoDB存儲引擎:使用可變長度的數據列,因為InnoDB數據表的存儲格式不分固定長度和可變長度,因此使用char不一定比使用varchar更好,但由於varchar是按照實際的長度存儲,比較節省空間,所以對磁盤I/O和數據存儲總量比較好。
⑤.ENUM和SET
⑥.BLOB和TEXT
BLOB是二進制字符串,TEXT是非二進制字符串,兩者均可存放大容量的信息。BLOB主要存儲圖片,音頻信息等。而TEXT只能存儲純文本文件。
四.MySQL函數
1.日期和時間函數
①.獲取當前日期的函數
CURDATE()和CURRENT_DATE()函數作用相同。
②.獲取當前時間的函數
CURRENT_TIMESTAMP(),LOCALTIME(),NOW()和SYSDATE() 4個函數的作用相同,均返回當前日期和時間值。
③.UNIX時間戳函數
④.返回UTC日期的函數和返回UTC時間的函數
UTC_DATE()函數返回當前UTC(世界標準時間)日期值。
UTC_TIME()返回當前UTC時間值。
⑤.獲取月份的函數MONTH(date)和MONTHNAME(date)
MONTH(date)函數返回date對應的月份。
MONTHNAME(date)函數返回日期date對應月份的英文全名。
⑥.獲取星期的函數DAYNAME(d),DAYOFWEEK(d)和WEEKDAY(d)
DAYNAME(d)函數返回d對應的工作日的英文名稱,例如Sunday,Monday.
DAYOFWEEK(d)函數返回d對應的一周中的索引,1表示周日,2表示周一。
WEEKDAY(d)返回d對應的工作日索引,0表示周一,1表示周二。
⑦.周期星期數的函數WEEK(d)和WEEKOFYEAR(d)
WEEK(d)計算日期d是一年中的第幾周。
WEEKOFYEAR(d)計算某天位於一年中的第幾周。
⑧.獲取天數的函數DAYOFYEAR(d)和DAYOFMONTH(d)
DAYOFYEAR(d)函數返回d是一年中的第幾天。
DAYOFMONTH(d)函數返回d是一個月中的第幾天。
d為日期。
MySQL基本命令