1. 程式人生 > >MySQL基本命令

MySQL基本命令

賦值 const 字符串結束 磁盤 ons 約束 host 錯誤輸入 scribe

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基本命令